#include "lcd_defines.h"
#include "types.h"
#define dW digitalWrite
#define dR digitalRead
void WriteLCD(u8 dat)
{
dW(LCD_D7,((dat>>7)&1));
dW(LCD_D6,((dat>>6)&1));
dW(LCD_D5,((dat>>5)&1));
dW(LCD_D4,((dat>>4)&1));
dW(LCD_EN,1); //high to...
delayMicroseconds(1);
dW(LCD_EN,0); //low pulse
delay(2); //atleast 2ms between consecutive writes
//for syn bt/w cpu & LCD
dW(LCD_D7,((dat>>3)&1));
dW(LCD_D6,((dat>>2)&1));
dW(LCD_D5,((dat>>1)&1));
dW(LCD_D4,((dat>>0)&1));
dW(LCD_EN,1); //high to...
delayMicroseconds(1);
dW(LCD_EN,0); //low pulse
delay(2); //atleast 2ms between consecutive writes
//for syn bt/w cpu & LCD
}
void CmdLCD(u8 cmd)
{
dW(LCD_RS,0);//select command register for writing to
WriteLCD(cmd);//write command register
}
void CharLCD(u8 ch)
{
dW(LCD_RS,1); //select data register for writing to
WriteLCD(ch); //write to data register then to DDRAM
//for display
}
void InitLCD(void)
{
pinMode(LCD_D4,OUTPUT);
pinMode(LCD_D5,OUTPUT);
pinMode(LCD_D6,OUTPUT);
pinMode(LCD_D7,OUTPUT);
pinMode(LCD_RS,OUTPUT);
pinMode(LCD_EN,OUTPUT);
delay(15);
delayMicroseconds(100);
CmdLCD(0x03);
delay(4);
delayMicroseconds(200);
CmdLCD(0x03);
delayMicroseconds(100);
CmdLCD(0x03);
CmdLCD(0x02);
CmdLCD(0x28);
CmdLCD(0x0e);
CmdLCD(0x01);
CmdLCD(0x06);
}
void StrLCD(char *ptr) { while(*ptr) CharLCD(*ptr++); }
void U32LCD(unsigned long n)
{
unsigned char a[10]={0};
signed long int i=0;
if(n==0)
CharLCD('0');
else
{
while(n>0)
{
a[i]=(n%10)+48;
n=n/10;
i++;
}
for(--i;i>=0;i--)
CharLCD(a[i]);
}
}
void S32LCD(signed long int n)
{
if(n<0)
CharLCD('-');
n=-n;
U32LCD(n);
}
void F32LCD(float f,unsigned int ndp)
{
unsigned int i,j;
if(f<0.0)
{
CharLCD('-');
f=-f;
}
i=f;
U32LCD(i);
CharLCD('.');
for(j=0;j<ndp;j++)
{
f=(f-i)*10;
i=f;
CharLCD(i+48);
}
}
void BuildCGRAM(unsigned char *p,unsigned char n)
{
unsigned char i;
//point cursor to CGRAM beginning
CmdLCD(GOTO_CGRAM_START);
for(i=0;i<n;i++)
{
//write cgram via data register
CharLCD(p[i]);
}
//point back cursor to DDRAM
CmdLCD(GOTO_LINE1_POS0);
}