摘要:
定时中断30秒倒计时闹铃程序
#include <reg52.h>char shuju[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0--9char a=3,b=0,i=0;char flag;sbit f=P3^7;/********* 延时子程序 *********/
void delay(u
定时中断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;
char flag;
sbit f=P3^7;
/********* 延时子程序 *********/
void delay(unsigned int x)
{
while(x--);
}
void FMqdelay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t*5;i++)
for(j=0;j<255;j++);
}
/********* 初始化程序 *********/
void init()
{
flag=0;
P3=0;
P0=0;
TMOD=0x01; //定时器T0工作方式1
TH0=0x3c;
TL0=0xb0; //装入初值50ms
ET0=1; //允许定时器T0中断
EA=1; //开总中断
TR0=1; //启动定时器
}
/********* 蜂鸣器子程序 *********/
void fmqi()
{
P3=0;
while(1)
{
fmqdelay(50);
f=~f;
}
}
/********* 显示子程序 *********/
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();
if(flag==1)
fmqi();
}
}
/********* 中断子程序 *********/
void sinterrupt(void) interrupt 1 //定时器T0中断
{
if(++i==20) //1 menitus come
{i=0;
if(a==0&&b==0){EA=0;flag=1;}
else if(b==0){a--;b=9;} //这个句子放上面显示30--1,放在下面显示29--0
else b--;
}
TH0=0x3c;
TL0=0xb0;
}