#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define delayNOP() {_nop_();_nop_();_nop_();_nop_();}
//#define lcd_date P0
sbit lcd_rs=P3^5;
sbit lcd_rw=P3^6;
sbit lcd_en=P3^4;
sbit lcd_psb=P3^1;
sbit dula=P2^6;
sbit wela=P2^7;
uchar code dis1[]={"请输入密码"}; //显示四行
uchar code dis2[]={"111111"};
uchar code dis3[]={"1313"};
uchar code dis4[]={"1414"};
void lcd_pos(uchar x,uchar y); //地址
void delay(uint z)//z等于几就延时几ms
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
bit lcd_busy()
{
bit result;
lcd_rs=0;
lcd_rw=1;
lcd_en=1;
delayNOP();
result=(bit)(P0&0x80);
lcd_en=0;
return(result);
}
void lcd_wcmd(uchar cmd)
{
while(lcd_busy()); //忙状态检测
lcd_rs=0;
lcd_rw=0;
lcd_en=0;
_nop_(); //1us
_nop_();
P0=cmd;
delayNOP();//4us
lcd_en=1;
delayNOP();
lcd_en=0;
}
void lcd_wdat(uchar dat)
{
while(lcd_busy());
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=dat;
delayNOP();
lcd_en=1;
delayNOP();
lcd_en=0;
}
void lcd_init()
{
lcd_psb=1; //并行
lcd_wcmd(0x34);
delay(5);
lcd_wcmd(0x30);
delay(5);
lcd_wcmd(0x0c);
delay(5);
lcd_wcmd(0x01);
delay(5);
}
void lcd_pos(uchar x,uchar y)
{
uchar pos;
if(x==0) {x=0x80;}
if(x==1) {x=0x90;}
if(x==2) {x=0x88;}
if(x==3) {x=0x98;}
pos=x+y;
lcd_wcmd(pos);
}
void main()
{
uchar i;
delay(10);
wela=0;
dula=0;
lcd_init();
lcd_pos(0,0);
i=0;
while(dis1[i]!='\0') //不等于 '空'
{
lcd_wdat(dis1[i]);
i++;
}
lcd_pos(1,0);
i=0;
while(dis2[i]!='\0')
{
lcd_wdat(dis2[i]);
i++;
}
lcd_pos(2,0);
i=0;
while(dis3[i]!='\0')
{
lcd_wdat(dis3[i]);
i++;
}
lcd_pos(3,0);
i=0;
while(dis4[i]!='\0')
{
lcd_wdat(dis4[i]);
i++;
}
while(1);
}
|