#include
#define uchar unsigned char
#define uint unsigned int
uchar xpos ,ypos;
sbit key=P2^0;
sbit rs=P3^0;
sbit rw=P3^1;
sbit e=P3^2;
void nop(){}
void delay(uint z) //延时
{
uint x,y;
for(x=z;x>0;x--)
for(y=112;y>0;y--);
}
void check() //判忙
{
rs=0;
rw=1;
e=0;
P1=0xff;
e=1;
nop();
nop();
while(P1&0x80){}
}
void wrc(uchar com) //写指令
{
check();
rs=0;
rw=0;
e=1;
P1=com;
nop();
e=0;
nop();
}
void wrd(uchar date) //写数据
{
check();
rs=1;
rw=0;
e=1;
P1=date;
nop();
e=0;
nop();
}
void init() //初始化
{
wrc(0x38);
wrc(0x01);
wrc(0x0c);
wrc(0x06);
}
void lcdpos() //内部数据地址指针定位
{
xpos&=0x01;
ypos&=0x1f;
if(xpos==0x00)
wrc(ypos|0x80);
else
wrc((ypos+0x40)|0x80);
}
void lcdw(uchar x,uchar y,uchar *s) //在指定的坐标下写字符串
{ xpos=x;
for(ypos=y;ypos<20;ypos++)
{ lcdpos();
wrd(*s);
s++;
}
}
void main()
{
init();
cgram();
while(1)
{
lcdw(0,0,"########## ");
lcdw(1,1,"!!!!!!!!!! ");
lcdw(2,2,"&&&&&&&&&& ");
lcdw(3,3,"$$$$$$$$$$ ");
}
}