#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit dula=P3^6;
sbit wela=P3^7;
uchar code table[]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09};
uchar h,m,s,hs,hg,ms,mg,ss,sg;
uchar cout,temp;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init() //初始化程序
{
s=0;
m=0;
h=0;
//TH0=(65536-50000)/256;
// TL0=(65536-50000)%256;
}
void set()
{
P1=0xfe;
temp=temp&0xf0;
if(temp!=0xf0)
{
switch(temp)
{
case 0xe0:m++;break;
case 0xd0:m--;break;
case 0xb0:s++;break;
case 0x70:s--;break;
}
}
}
void display() //显示程序
{
sg=s%10;//给秒钟,分钟,时钟的个位与十位赋值
ss=s/10;
mg=m%10;
ms=m/10;
hg=h%10;
hs=h/10;
wela=1;//显示秒钟个位值
P2=0x80;
wela=0;
dula=1;
P2=table[sg];
dula=0;
delay(2);
wela=1;//显示秒钟十位的值
P2=0x40;
wela=0;
dula=1;
P2=table[ss];
dula=0;
delay(2);
/*wela=1;//两点
P2=0x20;
wela=0;
dula=1;
if(s/2==0)
P2=0x90;
else
P2=0xff;
dula=0;
delay(2);*/
wela=1;//分钟个位
P2=0x10;
wela=0;
dula=1;
P2=table[mg];
dula=0;
delay(2);
wela=1;//分钟十位
P2=0x08;
wela=0;
dula=1;
P2=table[ms];
dula=0;
delay(2);
/*P2=0x04;
wela=0;
dula=1;
if(s/2==0)
P2=0x90;
else
P2=0xff;
dula=0;
delay(2);*/
wela=1;//时钟个位
P2=0x02;
wela=0;
dula=1;
P2=table[hg];
dula=0;
delay(2);
wela=1;//时钟十位
P2=0x01;
wela=0;
dula=1;
P2=table[hs];
dula=0;
delay(2);
}
void main() //主程序
{
init();
EA=1;
ET0=1;
TR0=1;
while(1)
{
display();
set();
}
}
void timer0()interrupt 1 //中断程序
{
TH0=0x3c;
TL0=0xb0;
cout++;
if(cout==20)
{
cout=0;
s++;
if(s==60)
{
s=0;
m++;
if(m==60)
{
m=0;
h++;
if(h==24)
{
h=0;
}
}
}
}
}
这个程序的时钟跑的很快,为什么 |