|
这个需要到LCD显示,但是我在单片机板上显示成功,但是在仿真上无法显示,电路连接应该没有错
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define out P2
sbit LED =P1^4;
sbit key1=P3^2;
sbit key2=P3^3;
sbit key3=P3^4;
sbit key4=P3^5;
sbit lcdrs=P0^5;
sbit lcdrw=P0^6;
sbit lcden=P0^7;
void check_busy();
void write_cmd(uchar cmd);
void write_data(uchar dat);
void write_str(uchar *str);
void lcd_init();
void T0_init();//T0初始化
void display(uchar date);
void keyscan();
void delay(uint z);
uchar sec=0,count=0,flag=0,keyflag=0;
void main()
{ T0_init();
lcd_init();
write_cmd(0x82);
write_str("sec:");
while(1)
{ keyscan();
switch(keyflag)
{ case 1:TR0=1;LED=0;break;
case 2:TR0=0;LED=1;break;
}
display(sec);
}
}
void T0_init()
{ TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ET0=1;
EA=1;
}
void lcd_init()
{ write_cmd(0x38);
write_cmd(0x0c);
write_cmd(0x06);
write_cmd(0x01);
delay(1);
}
void write_cmd(uchar cmd)
{ check_busy();
lcdrs=0;
lcdrw=0;
lcden=0;
out=cmd;
lcden=1;
delay(1);
lcden=0;
delay(1);
}
void check_busy()
{ uchar dt;
do
{dt=0xff;
lcdrs=0;
lcdrw=1;
lcden=0;
lcden=1;
dt=out;
}while(dt&0x80);
lcden=0;
}
void write_data(uchar dat)
{ lcdrs=1;
lcdrw=0;
lcden=0;
out=dat;
lcden=1;
delay(1);
lcden=0;
delay(1);
}
void delay(uint z)
{ uint i,j;
for(j=z;j>0;j--)
for(i=110;i>0;i--);
}
void write_str(uchar *str)
{ while(*str!='\0')
{
write_data(*str++);
delay(5);
}
}
void T0_it()interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count>=20)
{ count=0;
sec++;
}
if(sec>=60)
{sec=0;flag=1; }
}
void display(uchar date)
{ write_cmd(0x88);
write_data(date/10+0x30);
write_cmd(0x89);
write_data(date%10+0x30);
}
void keyscan()
{ key1=1;
if(key1==0)
{ delay(10);
if(key1==0)
{ while(!key1);
keyflag=1;
}
}
key2=1;
if(key2==0)
{ delay(10);
if(key2==0)
{ while(!key2);
keyflag=2;
}
}
if(key3==0)
{sec++;
if(sec==60)sec=60;}
if(key4==0)
{sec--;
if(sec<=0)sec=0;}
}
|
|