|
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar num,num1=15;
uchar s1,s2;
uint t,frq;
sbit spk=P1^5;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,
0x71};
void delayms(uint xms) //延时函数
{
uint i,j;
for(i=xms;i>0;i--) //xms即计时多少毫秒
for(j=110;j>0;j--);
}
void display(uchar s1,uchar s2) //显示函数
{
s2=num1/10;
s1=num1%10;
P0=table[s2]; //s2段选
P2=0xfd; //s2位选
delayms(5); //延时5毫秒
P0=table[s1]; //s1段选
P2=0xfe; //s1位选
delayms(5); //延时5毫秒
}
void main()
{ TMOD=0x11;
TH0=(65536-45872)/256; //装初值
TL0=(65536-45872)%256;
TH0=0x00;
TL0=0x00;
EA=1; //开总中断
ET0=1;
ET1=1; //开定时器0中断
TR0=1;
//启动定时器0
while(1)
{
display(s1,s2);
if(num1==20)
{
TR1=1;
frq=0;
for(t=0;t<60;t++)
{
delayms(10);
}
frq=100;
for(t=0;t<60;t++)
{
delayms(10);
} //显示s1,s2,m1,m2,t1,t2
}
}
}
void T0_time() interrupt 1 //中断函数
{
TH0=(65536-45872)/256; //重装初值
TL0=(65536-45872)%256;
num++;
if(num==20) //到20次,1s已到
{ num=0;
num1--;
}
if(num1==0) //一分已到
{
num1=20;TR0=0;
}
}
void T1_time()interrupt 3
{
TH1=0xfe;
TL1=frq;
spk=~spk;
}
|
|