你的程序中有錯誤。定時器TR沒有設成1,導致定時器不工作,沒法計時。程序修改如下:
/*采用普中科技ES-V2.0開發板作為實驗硬件*/
#include<reg52.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit LSA=P2^0;
sbit LSB=P2^1;
sbit LSC=P2^2;
sbit LSD=P2^3;
sbit k1=P3^1;
sbit k2=P3^0;
u8 sec,min,hour;
u8 code shuzu[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77}; //共陽數碼管碼表,code表示保存到flash空間,節省rom
u8 code table[]={ // 共陰數碼管,筆段=0時,筆段點亮。0-0xC0
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90,0xff, 0xbf};
void delay(u16 i)
{
while(i--);
}
void Timer0Init()
{
TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
TH0=0X3c; //給定時器賦初值,定時50ms
TL0=0Xb0;
ET0=1;//打開定時器0中斷允許
EA=1;//打開總中斷
TR0=1;//關閉定時器
}
void keyscan()
{ u8 keymod=0;
if(k1==0)
{
delay(1000);
if(k1==0)
{
TR0=!TR0;
keymod=!keymod;
}
while(!k1);
}
if(keymod==0)
{
if(k2==0)
{
delay(1000);
if(k2==0)
{
sec=0,min=0,hour=0;
}
while(!k2);
}
}
}
void DigDisplay(u8 min,u8 sec)
{
u8 i;
for(i=0;i<4;i++)
{
switch(i) //位選,選擇點亮的數碼管,
{
// 共陰用
case(0):
LSA=0;LSB=1;LSC=1;LSD=1;P0=shuzu[min/10]; break;//顯示第0位
case(1):
LSA=1;LSB=0;LSC=1;LSD=1;P0=shuzu[min%10];break;//顯示第1位
case(2):
LSA=1;LSB=1;LSC=0;LSD=1;P0=shuzu[sec/10];break;//顯示第2位
case(3):
LSA=1;LSB=1;LSC=1;LSD=0;P0=shuzu[sec%10]; break;//顯示第3位
}
delay(100); //間隔一段時間掃描
// 共陰用
P0=0x00;//消隱筆段
}
}
void main()
{
Timer0Init();
while(1)
{
P1=sec;
DigDisplay(min,sec);
keyscan();
}
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0X3c; //給定時器賦初值,定時50ms
TL0=0Xb0;
i++;
if(i==20)
{
i=0;
sec++;
if(sec==60)
{
sec=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==99)
{
hour=0;
}
}
}
}
} |