12864纸张
# include & ltintrins.h & gt
# include & ltstdio.h & gt
#定义uchar无符号字符
# define first _ add r0//定义字符/汉字的显示起始位置。
sbit lcd_rs=p2^2;
sbit lcd_rw=p2^3;
sbit lcd_e=p2^4;
sbit pcb=p2^5;
uchar i,j;
无效延迟(毫秒)
{
当(毫秒)
{
for(j = 0;j & lt120;j++);
}
}
位lcd_busy()
{位结果;
LCD _ RS = 0;
LCD _ RW = 1;
LCD _ E = 1;
结果=(位)(P0 & amp0x 80);
LCD _ E = 0;
返回结果;
}
无效lcd_wcmd(uchar cmd)
{
while(LCD _ busy());
LCD _ RS = 0;
LCD _ RW = 0;
P0 = cmd
LCD _ E = 1;
LCD _ E = 0;
}
void lcd_wdata(uchar dat)
{
while(LCD _ busy());
LCD _ RS = 1;
LCD _ RW = 0;
P0 = dat
LCD _ E = 1;
LCD _ E = 0;
}
void lcd_initial()
{
LCD _ wcmd(0x 30);
延时(1);
LCD _ wcmd(0x0C);//打开显示器,关闭光标,不眨眼。
延时(1);
LCD _ wcmd(0x 06);//指定写入或读取数据时光标移动的方向。
延时(1);
LCD _ wcmd(0x 01);
延时(10);//这里的延迟要长一些,否则会影响后面的操作。
}
/* -清除屏幕的命令*/
void Clr_Screen()
{
//考虑到0x34的外观。
LCD _ wcmd(0x 01);
延时(100);
}
void _ FU(uchar代码*s)
{
while(*s!=0)
{ LCD _ wdata(* s);
s++;
延时(10);
}
}
空虚感1()
{
LCD _ wcmd(0x 30);
延迟(300);
LCD _ wcmd(0x 80+first _ Addr);
zi _ FU(" 2065 438+03 03 26 ");
延迟(300);
LCD _ wcmd(0x 90+first _ Addr);
Zi_FU("电气08-17 ");
延迟(300);
LCD _ wcmd(0x 88+first _ Addr);
子_符(“讷气”);
延迟(300);
LCD _ wcmd(0x 98+first _ Addr);
延迟(500);
zi _ FU(" 2065 438+02 . 5 . 30 ");
}
void main()
{
PCB = 1;
while(1)
{
LCD _ initial();
延时(1000);
clr _ Screen();
感觉1();
延时(3000);
for(I = 8;我& gt0;我-)
{
LCD _ wcmd(0x 18);//一两行切换三四行,液晶分两个半屏。
延时(1000);
}
clr _ Screen();
感觉1();
LCD _ wcmd(0x 34);
LCD _ wcmd(0x 04);
延时(3000);
LCD _ wcmd(0x 04);//恢复正常
延时(3000);
LCD _ wcmd(0x 34);
LCD _ wcmd(0x 03);//允许输入滚动地址。
for(I = 0x 40;我& lt0x7fi++)
{
lcd_wcmd(一);//垂直滚动屏幕内容。
延迟(600);//上调屏幕延迟
}
}
}