定时中断30秒倒计时程序
#include <reg52.h>
char shuju[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0--9
char a=3,b=0,i=0;
/********* 延时子程序 *********/
void delay(unsigned int x)
{
while(x--);
}
/********* 初始化程序 *********/
void init()
{
P0=0;
TMOD=0x01; //定时器T0工作方式1
TH0=0x3c;
TL0=0xb0; //装入初值50ms
ET0=1; //允许定时器T0中断
EA=1; //开总中断
TR0=1; //启动定时器
}
/********* 显示子程序 *********/
void Display()
{
P2=0x00|0x80; //位选十位CS_Y0
P0=shuju[a]; //扫描
delay(1000);
P2=0x01|0x80; //位选个位CS_Y1
P0=shuju[b];
delay(1000);
}
/********* 主程序 *********/
void main()
{
init();
while(1) //wait interrupt
{
Display();
}
}
/********* 中断子程序 *********/
void sinterrupt(void) interrupt 1 //定时器T0中断
{
if(++i==20) //1 menitus come
{i=0;
if(a==0&&b==0){a=3,b=0;}
else if(b==0){a--;b=9;} //这个句子放上面显示30--1,放在下面显示29--0
else b--;
}
TH0=0x3c;
TL0=0xb0;
}