单片机89c52完美的液晶秒表程序
不用定时器主程序简单易懂
主程序如下后附演示图
单片机源程序如下:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define datetemp P2
sbit rs=P1^5 ;
sbit rw=P1^6;
sbit en=P1^7;
sbit bf=P2^7;
uchar code table[]="0123456789-" ;
void delay(uint z)
{
uint x;
for(x=z;x>0;x--) ;
}
bit panmang()
{
uchar bumang;
rs=0;rw=1;en=1;
delay(1);
bumang=bf;
en=0;
return bumang;
}
void writeml(uchar ml)
{
while(panmang());
rs=0;rw=0;en=1;
datetemp=ml;
delay(1);
en=0;
}
void writesj(uchar sj)
{
while(panmang());
rs=1;rw=0;en=1;
datetemp=sj;
delay(1);
en=0;
}
void writezfsj(uchar dz,uchar hang,uchar *zfsj)
{
if(hang==0)
{writeml(0x80+dz);}
else
{ writeml(0xc0+dz); }
while(*zfsj)
{ writesj(*zfsj);
zfsj++; }
}
void writezf(uchar dz,uchar hang,uchar zf)
{
if(hang==0)
{writeml(0x80+dz);}
else
writeml(0xc0+dz);
writesj(zf);}
void qingping()
{
writeml(0x01);
delay(500);
}
void init()
{
writeml(0x38);
delay(500);
writeml(0x38);
delay(500);
writeml(0x38);
writeml(0x08);
writeml(0x01);
writeml(0x06);
delay(500);
writeml(0x0c);
}
void main()
{
init();
qingping();
while(1)
{
uchar i,j,m;
for(m=0;m<60;m++)
{
for(j=0;j<60;j++)
{
for(i=0;i<100;i++)
{
writezf(2,1,table[m/10]);
writezf(3,1,table[m%10]);
writezfsj(4,1,"-");
writezf(5,1,table[j/10]);
writezf(6,1,table[j%10]);
writezfsj(7,1,"-");
writezf(8,1,table[i/10]);
writezf(9,1,table[i%10]);
delay(300);
}}}}}
|