我写的是一个1602液晶和单片机定时器配合的程序,就你秒表一样把计时的数在液晶上显示
#include<reg52.h>
#define ui unsigned int
#define uc unsigned char
sbit wela=P2^7;
sbit dula=P2^6;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uc t0,i,a;
uc code sz[]="0123456789"; void delay(ui z)
{
ui x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
} void write_ml(uc ml)
{
lcdrs=0;
P0=ml;
delay(5);
lcden=1;
delay(5);
lcden=0;
} void write_sj(uc sj)
{
lcdrs=1;
P0=sj;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
wela=0;
dula=0;
lcden=0;
write_ml(0x38);
write_ml(0x0c);
write_ml(0x04);
write_ml(0x01);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void t_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++; if(t0%100==0)
{
write_ml(0x80);
i++;
if(i==10)
i=0;
write_sj(sz[i]);
delay(5);
}
if(t0%10==0)
{
write_ml(0x80+1);
a++;
if(a==10)
a=0;
write_sj(sz[a]);
delay(5);
}
if(t0==1000)
t0=0;
} void main()
{
init();
while(1);
}
但开始计数没问题,计数到45后不是个位到9十位进1,个位到5就进1了,那里有问题
#include<reg52.h>
#define ui unsigned int
#define uc unsigned char
sbit wela=P2^7;
sbit dula=P2^6;
sbit lcden=P3^4;
sbit lcdrs=P3^5;
uc t0,i,a;
uc code sz[]="0123456789"; void delay(ui z)
{
ui x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
} void write_ml(uc ml)
{
lcdrs=0;
P0=ml;
delay(5);
lcden=1;
delay(5);
lcden=0;
} void write_sj(uc sj)
{
lcdrs=1;
P0=sj;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
void init()
{
wela=0;
dula=0;
lcden=0;
write_ml(0x38);
write_ml(0x0c);
write_ml(0x04);
write_ml(0x01);
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
void t_0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
t0++; if(t0%100==0)
{
write_ml(0x80);
i++;
if(i==10)
i=0;
write_sj(sz[i]);
delay(5);
}
if(t0%10==0)
{
write_ml(0x80+1);
a++;
if(a==10)
a=0;
write_sj(sz[a]);
delay(5);
}
if(t0==1000)
t0=0;
} void main()
{
init();
while(1);
}
但开始计数没问题,计数到45后不是个位到9十位进1,个位到5就进1了,那里有问题
