/* write a byte to the LCD in 4 bit mode */
void
lcd_write(unsigned char c)
{
if(c & 0x80) LCD_D7=1; else LCD_D7=0;
if(c & 0x40) LCD_D6=1; else LCD_D6=0;
if(c & 0x20) LCD_D5=1; else LCD_D5=0;
if(c & 0x10) LCD_D4=1; else LCD_D4=0;
LCD_STROBE;
if(c & 0x08) LCD_D7=1; else LCD_D7=0;
if(c & 0x04) LCD_D6=1; else LCD_D6=0;
if(c & 0x02) LCD_D5=1; else LCD_D5=0;
if(c & 0x01) LCD_D4=1; else LCD_D4=0;
LCD_STROBE;
__delay_us(40);
}
/* Clear and home the LCD */
void
lcd_clear(void)
{
LCD_RS = 0;
lcd_write(0x1);
__delay_ms(2);
}
/* write a string of chars to the LCD */
void
lcd_puts(const char * s)
{
LCD_RS = 1; // write characters
while(*s) lcd_write(*s++);
}
/* write one character to the LCD */
void
lcd_putch(unsigned char c)
{
LCD_RS = 1; // write characters
lcd_write(c);
}
/* Go to the specified position*/
void
lcd_goto(unsigned char pos)
{
LCD_RS = 0;
lcd_write(pos);
}
/* initialise the LCD - put into 4 bit mode */
void
lcd_init(void)
{
LCD_RS = 0; // write control bytes
__delay_ms(15);// power on delay
LCD_D4 = 1; // init!
LCD_D5 = 1; //
LCD_STROBE;
__delay_ms(5);
LCD_STROBE; // init!
__delay_us(100);
LCD_STROBE; // init!
__delay_ms(5);
LCD_D4 = 0; // set 4 bit mode
LCD_STROBE;
__delay_us(40);
lcd_write(0x28);// 4 bit mode, 1/16 duty, 5x8 font, 2lines
lcd_write(0x0C);// display on
lcd_write(0x06);// entry mode advance cursor
lcd_write(0x01);// clear display and reset cursor
}
void LCDWriteInt(int val,unsigned int field_length)
{
/***************************************************************
This function writes a integer type value to LCD module
Arguments:
1)int val : Value to print
2)unsigned int field_length :total length of field in which the value is printed
must be between 1-5 if it is -1 the field length is no of digits in the val
****************************************************************/
LCD_RS = 1; // write characters
char str[5]={0,0,0,0,0};
int i=4,j=0;
while(val)
{
str[i]=val%10;
val=val/10;
i--;
}
if(field_length==-1)
while(str[j]==0) j++;
else
j=5-field_length;
if(val<0) lcd_write('-');
for(i=j;i<5;i++)
{
lcd_write(48+str[i]);
}
}