Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- lcd.c :
- */
- /**
- * \addtogroup LCD
- * @{
- */
- #include <absacc.h>
- #include "LCD.h"
- #include <intrins.h>
- #define LCD_IR 0
- #define LCD_DR 1
- //unsigned char puchStr[10] = "Hallo";
- //LCD_WriteString(char*puchStr);
- //index = 0;
- //while(puchStr[index]);
- //LCD_WriteChar(puchStr[index]);
- //index++;
- /**
- * Initialisiere Display
- * @param keine
- * @return nichts
- */
- void LCD_Init()
- {
- LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT); //das | =bitweise verknüpfen
- LCD_Wait100us(50); //wait 5ms
- LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT);
- LCD_Wait100us(2); //wait 100us
- LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT);
- LCD_Wait100us(2); //wait 100us
- while(LCD_IsBusy())
- {
- }
- LCD_WriteIR(LCD_FUNCTION_SET | LCD_FUNCTION_SET_8BIT | LCD_FUNCTION_SET_2LINE | LCD_FUNCTION_SET_F5x8 );
- LCD_WriteIR(LCD_DC_DISPL | LCD_DC_DISPL_DOFF | LCD_DC_DISPL_B);
- LCD_WriteIR(LCD_CLEAR_DISPL);
- LCD_WriteIR(LCD_ENTRY_MODE_SET | LCD_ENTRY_MODE_SET_I | LCD_ENTRY_MODE_SET_S_OFF);
- LCD_WriteIR(LCD_DC_DISPL | LCD_DC_DISPL_DON | LCD_DC_DISPL_CON | LCD_DC_DISPL_B);
- }
- /**
- * Schreiben ins Instructor Register
- * @param uchInstr
- * @return nichts
- */
- void LCD_WriteIR(unsigned char uchInstr)
- {
- LCD_Write(uchInstr, LCD_IR);
- }
- /**
- * Schreiben ins Data Register
- * @param uchInstr
- * @return nichts
- */
- void LCD_WriteDR(unsigned char uchInstr)
- {
- LCD_Write(uchInstr, LCD_DR);
- }
- /**
- * Ruft LCD_WriteDR oder LCD_WriteIR auf
- * @param uchVal
- * @param bReg
- * @param bCheckB
- * @return nichts
- */
- void LCD_Write(unsigned char uchVal, bit bReg)
- {
- #ifdef LCD_MEMMAPPED
- if(bReg == LCD_IR)
- {
- //write IR
- XBYTE[LCD_ADDR_IR] = uchVal;
- }
- else
- {
- //write DR
- XBYTE[LCD_ADDR_DR] = uchVal;
- }
- /*
- while(LCD IsBusy)
- LCD_WriteIRNoBF(val){
- LCD_Write(val,LCD_IR,0)
- }LCD_WriteIR(val){
- LCD_Write(val,LCD_IR,1)
- }
- LCD_WriteDR(val){
- LCD_Write(val,DR,1)
- }
- */
- #elif defined (LCD_PORTMAPPDE)
- //Code für PORT
- //SETB
- #else
- #error "Fehler beim Definieren von Port- oder Memmapped"
- #endif
- }
- /**
- * Funktion zum Warten des Vilefachen von 100us(NOP = 0.5us)
- * @param uchTimes
- * @return nichts
- */
- void LCD_Wait100us(unsigned char uchTimes)
- {
- unsigned char uchTemp;
- while(uchTimes != 0)
- {
- for(uchTemp = 0; uchTemp <= 50; uchTemp++)
- {
- _nop_();
- _nop_();
- _nop_();
- }
- uchTimes--;
- }
- }
- /**
- * Erkennt ob das BusyFlag gesetzt ist
- * @return
- */
- bit LCD_IsBusy()
- {
- return(LCD_Read(LCD_ADDR_IR) & LCD_BF_MASK);
- }
- /**
- * Ruft oder LCD_ReadIR auf
- * @param bReg
- * @return
- */
- unsigned char LCD_Read(bit bReg)
- {
- if(bReg == LCD_IR)
- {
- //read IR
- return(XBYTE[LCD_ADDR_IR]);
- }
- else
- {
- //read DR
- return(XBYTE[LCD_ADDR_DR]);
- }
- }
- /**
- * Liest vom Data Register
- * @param keine
- * @return gelesenes
- */
- unsigned char LCD_ReadDR()
- {
- return(LCD_Read(LCD_DR));
- }
- /**
- * Liest vom Instruction Register
- * @param keine
- * @return gelesenes
- */
- unsigned char LCD_ReadIR()
- {
- return(LCD_Read(LCD_IR));
- }
- /**
- * Setzt den Coursor auf eine bestimmte Position
- * @param uchZeile
- * @param uchSpalte
- * @return
- */
- unsigned char Cursor_GoToXY(unsigned char uchZeile, unsigned char uchSpalte)
- {
- }
- char putchar(char chc)
- {
- if(chc = '\n')
- {
- }
- if(chc == '\t')
- {
- }
- if(chc == '\b')
- {
- }
- LCD_WriteDR(chc);
- return (chc);
- }
- //@}
- lcd.h:
- #ifndef _LCD_H
- #define _LCD_H
- //entweder MEM- oder PORT- MAPPED einstellen
- #define LCD_MEMMAPPED
- //#define LCD_PORTMAPPED
- //MEMMAPPED settings
- #define LCD_ADDR_IR 0x0000
- #define LCD_ADDR_DR 0x4000
- //PORTMAPPED settings
- #define LCD_CLEAR_DISPL 0x01 //oder (1<<5)=einser um 5 stellen nach links versch.
- #define LCD_RETURN_HOME 0x02
- #define LCD_ENTRY_MODE_SET 0x04
- #define LCD_ENTRY_MODE_SET_I 0x02
- #define LCD_ENTRY_MODE_SET_D 0x00
- #define LCD_ENTRY_MODE_SET_S_ON 0x01
- #define LCD_ENTRY_MODE_SET_S_OFF 0x00
- #define LCD_DC_DISPL 0x08
- #define LCD_DC_DISPL_DON 0x04
- #define LCD_DC_DISPL_DOFF 0x00
- #define LCD_DC_DISPL_CON 0x02
- #define LCD_DC_DISPL_COFF 0x00
- #define LCD_DC_DISPL_B 0x01
- #define LCD_CDS 0x10
- #define LCD_CDS_DISPL_SHIFT 0x08
- #define LCD_CDS_CURSOR_MOVE 0x00
- #define LCD_CDS_LINKS 0x00
- #define LCD_CDS_RECHTS 0x04
- #define LCD_FUNCTION_SET 0x20
- #define LCD_FUNCTION_SET_4BIT 0x00
- #define LCD_FUNCTION_SET_8BIT 0x10
- #define LCD_FUNCTION_SET_1LINE 0x00
- #define LCD_FUNCTION_SET_2LINE 0x08
- #define LCD_FUNCTION_SET_F5x10 0x04
- #define LCD_FUNCTION_SET_F5x8 0x00
- #define LCD_BF_MASK 0x80
- #define LCD_LINE_LENGHT 20
- #define LCD_ADDR_LINE1 0
- #define LCD_ADDR_LINE2 0x40
- #define LCD_ADDR_LINE3 (LCD_ADDR_LINE1+LCD_LINE_LENGHT)
- //(mit const davor in den code speicher)char la[] = {LCD_ADDR_LINE1, LCD_ADDR_LINE2, LCD_ADDR_LINE3}
- //Prototypes
- void LCD_Init();
- void LCD_WriteIR(unsigned char uchInstr);
- void LCD_WriteDR(unsigned char uchInstr);
- void LCD_Write(unsigned char uchVal, bit bReg);
- void LCD_Wait100us(unsigned char uchTimes);
- bit LCD_IsBusy();
- unsigned char LCD_Read(bit bReg);
- unsigned char LCD_ReadDR();
- unsigned char LCD_ReadIR();
- unsigned char Cursor_GotToXY(unsigned char uchZeile, unsigned char uchSpalte);
- #endif /* _LCD_H */
- main.c:
- #include <reg8253.h>
- #include "LCD.h"
- #include <stdio.h>
- void main (void)
- {
- LCD_Init();
- printf("hallo\t");
- }
Advertisement
Add Comment
Please, Sign In to add comment