LCD1602显示汉字字符串程序

2024-12-27 22:24:48
推荐回答(1个)
回答1:

#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,"$$$$$$$$$$ ");
}
}