//LCD Functions Developed by electroSome void Lcd_Port(char a) { if(a & 1) IO_RB4_SetHigh(); else IO_RB4_SetLow(); if(a & 2) IO_RB5_SetHigh(); else IO_RB5_SetLow(); if(a & 4) IO_RB6_SetHigh(); else IO_RB6_SetLow(); if(a & 8) IO_RB7_SetHigh(); else IO_RB7_SetLow(); } void Lcd_Cmd(char a) { IO_RA4_SetLow(); // => RS = 0 Lcd_Port(a); IO_RB3_SetHigh(); // => E = 1 __delay_ms(4); IO_RB3_SetLow(); // => E = 0 } void Lcd_Clear() { Lcd_Cmd(0); Lcd_Cmd(1); } void Lcd_Set_Cursor(char a, char b) { char temp,z,y; if(a == 1) { temp = 0x80 + b - 1; z = temp>>4; y = temp & 0x0F; Lcd_Cmd(z); Lcd_Cmd(y); } else if(a == 2) { temp = 0xC0 + b - 1; z = temp>>4; y = temp & 0x0F; Lcd_Cmd(z); Lcd_Cmd(y); } else if(a == 3) { temp = 0x94 + b - 1; z = temp>>4; y = temp & 0x0F; Lcd_Cmd(z); Lcd_Cmd(y); } else if(a == 4) { temp = 0xD4 + b - 1; z = temp>>4; y = temp & 0x0F; Lcd_Cmd(z); Lcd_Cmd(y); } } void Lcd_Init() { Lcd_Port(0x00); __delay_ms(20); Lcd_Cmd(0x03); __delay_ms(5); Lcd_Cmd(0x03); __delay_ms(11); Lcd_Cmd(0x03); ///////////////////////////////////////////////////// Lcd_Cmd(0x02); Lcd_Cmd(0x02); Lcd_Cmd(0x08); Lcd_Cmd(0x00); Lcd_Cmd(0x0C); Lcd_Cmd(0x00); Lcd_Cmd(0x06); } void Lcd_Write_Char(char a) { char temp,y; temp = a&0x0F; y = a&0xF0; IO_RA4_SetHigh(); ; // => RS = 1 Lcd_Port(y>>4); //Data transfer IO_RB3_SetHigh(); __delay_us(40); IO_RB3_SetLow(); Lcd_Port(temp); IO_RB3_SetHigh(); __delay_us(40); IO_RB3_SetLow(); } void Lcd_Write_String(char *a) { int i; for(i=0;a[i]!='\0';i++) Lcd_Write_Char(a[i]); } void Lcd_Shift_Right() { Lcd_Cmd(0x01); Lcd_Cmd(0x0C); } void Lcd_Shift_Left() { Lcd_Cmd(0x01); Lcd_Cmd(0x08); }