#include <reg52.h>
#define u8 unsigned char
#define u16 unsigned int
#define Dla P1 //数码管段
u8 TIME=0; //=20,计时 1 s
u8 TIMES=0; //=1, 计时 1 s
u8 TIMEM=0; //=1, 计时 1 min
sbit Wla1 = P0^2; //数码管位
sbit Wla2 = P0^3; //数码管位
sbit Beep = P3^6; //Beep
sbit Din = P3^4; //Din
sbit Led = P3^5; //Led
u8 code table[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F 编码
void display(u8 time);//显示time
void Delayms(u8 ms); //延时ms毫秒
void TimerInit(void); //定时器初始化
void main()
{
TimerInit();
while(1)
{
if(Din)
{
TR0=1; //启动定时器0
Led=0;
Beep=0;
}
else
{
Led=1;
TR0=0; //关闭定时器0
Beep=1;
TIMES=0;
}
display(TIMES); //显示
}
}
void TimerInit(void)
{
TMOD=0x11; //GATE C/T M0 M1 GATE C/T M0 M1
TH0=(65536-50000)/256; //50MS初值
TL0=(65536-50000)%256; //50MS初值
EA=1;
ET0=1;
TR0=0;
}
void display(u8 time)
{
u8 shi=0,ge=0;
shi=time/10;
ge=time%10;
Wla2=1;
Dla=~table[shi];
Delayms(1);
Wla2=0;
Dla=0xFF;
Wla1=1;
Dla=~table[ge];
Delayms(1);
Wla1=0;
Dla=0xFF;
}
void Delayms(u8 ms)
{
u8 i=0;
for(i=0;i<ms;i++)
{
TH1=(65536-1000)/256; //1MS初值
TL1=(65536-1000)%256;
TR1=1;
while(!TF1);
TF1=0;
}
TR1=0;
}
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TIME++;
if(TIME==20)
{
TIME=0;
TIMES++;
if(TIMES==60)
{
TIMEM++;
if(TIMEM==60)
TIMEM=0;
}
}
}