#define RS_an PORTA.0=1; #define RS_aus PORTA.0=0; #define RW_an PORTA.1=1; #define RW_aus PORTA.1=0; #define enable_an PORTA.2=1; #define enable_aus PORTA.2=0; void LCD_busy(void); void LCD_INIT(void); void init(void); void delay100ms(unsigned char); void delay50ms(unsigned char); void delay2ms(unsigned char); void delay500ys(unsigned char); void LCD_Befehl(void); void LCD_Ausgabe(void); unsigned char a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,save,t,x,y,z; void main(void) { init(); LCD_INIT(); } void init(void) { TRISA = 0x00; TRISB = 0x00; TRISC = 0x00; TRISD = 0x00; } //LCD_INIT void LCD_INIT(void) { delay2ms(8); RS_aus; //RS auf low nop(); RW_aus; //RW auf low nop(); enable_aus; //Enable auf low LCD_8bitinterface; //8 bit laden enable_an; //Enable auf high nop(); enable_aus; //Enable auf low delay2ms(2); enable_an; //Enable auf high nop(); enable_aus; //Enable auf low delay500ys(1); enable_an; //Enable auf high nop(); enable_aus; //Enable auf low save=0b00110000; //8 bit interface LCD_Befehl(); save=0b00111000; //2 Zeilen 5x7 Darstellung LCD_Befehl(); save=0b00001000; //Display aus LCD_Befehl(); save=0b00000001; //Display löschen LCD_Befehl(); save=0b00000110; //Shift aus LCD_Befehl(); save=0b00001100; //Display ein LCD_Befehl(); delay500ys(1); //Anzeige for(i=255;i!=0;i--) { save=0x01; //Display löschen LCD_Befehl(); delay500ys(4); save=0x55; //Ausgabe 0x55 LCD_Ausgabe(); save=0xC0; //zweite Zeile LCD_Befehl(); delay500ys(4); save=0x4A; //Ausgabe 0x4A LCD_Ausgabe(); delay2ms(8); } } //LCD Busy void LCD_busy(void) { RS_aus; nop(); RW_an; nop(); enable_an; nop(); enable_aus; nop(); if(PORTB.7==0) // Abfrage Busy-flag {RW_aus; nop(); } else { LCD_busy();} } //LCD Befehl void LCD_Befehl(void) { LCD_busy(); RW_aus; nop(); RS_aus; PORTB=save; enable_an; nop(); enable_aus; nop(); } //LCD Ausgabe void LCD_Ausgabe(void) { LCD_busy(); RW_aus; nop(); RS_an; PORTB=save; enable_an; nop(); enable_aus; nop(); }