typedef struct {
unsigned un:16;
unsigned keybrdIn:4;
unsigned keybrdSel:4;
unsigned RS:1;
//unsigned RW:1;
unsigned E:1;
unsigned un1:2;
unsigned LcdData:4;
}PORT;
#define Ioset1 (*(PORT *)0xE0028014)
#define Ioclr1 (*(PORT *)0xE002801C)
#define Iodir1 (*(PORT *)0xE0028018)
#define Iopin1 (*(PORT *)0xE0028010)
void delay()
{
int val=500,cnt=500;
while(cnt--)
{
while(val--);
val=100;
}
}
void delay_ms(unsigned int dtime)
{
long int val=1000;
while(dtime--)
{
while(val--);
val=1000;
}
}
void CMD(int lcd)
{
lcd=lcd>>4;
Ioclr1.LcdData=0xf;
Ioclr1.RS=1;
// Ioclr1.RW=1;
Ioset1.LcdData=lcd;
Ioset1.E=1;
delay();
Ioclr1.E=1;
}
void dat(int lcd)
{
lcd=lcd>>4;
Ioclr1.LcdData=0xf;
Ioset1.RS=1;
// Ioclr1.RW=1;
Ioset1.LcdData=lcd;
Ioset1.E=1;
delay();
Ioclr1.E=1;
}
void lcdchar(char te)
{
dat(te & 0xf0);
dat((te<<4) & 0xf0);
}
void lcdnum(double vl)
{
int j=0,k,tmp;
char buff[10]={0,0,0,0,0,0,0,0,0,0};
tmp=j=(int)vl; //11.256
k=0;
while(j)
{
k++;
buff[k]=(j%10);
j/=10;
}
while(k>=1)
{
lcdchar(buff[k]+'0');
k--;
}
lcdchar('.');
vl=((vl-tmp)*1000);
j=(int)vl;
buff[0]=0;
buff[1]=0;
buff[2]=0;
buff[3]=0;
buff[4]=0;
buff[5]=0;
k=0;
while(j)
{
k++;
buff[k]=(j%10);
j/=10;
}
k=3;
while(k>=1)
{
lcdchar(buff[k]+'0');
k--;
}
}
void lcddat(const char *ptr1)
{
while(*ptr1 != '\0')
lcdchar(*(ptr1++));
}
void lcdcmd(char tt)
{
CMD(tt & 0xf0);
CMD((tt<<4) & 0xf0);
}
void lcdinit()
{
Iodir1.RS=1;
Iodir1.E=1;
Iodir1.LcdData=0xf;
//IOCLR1=0xff000000;
CMD(0X30);
// delay();
CMD(0X30);
// delay();
CMD(0X30);
// delay();
CMD(0X20);
// delay();
lcdcmd(0X28);
// delay();
lcdcmd(0X0c);
// delay();
lcdcmd(0X01);
// delay();
lcdcmd(0X06);
//delay();
}