单片机倒计时程序
单片机倒计时程序
主要功能:设定24小时内倒计时,最大24小时,最小1分钟,最后10秒钟蜂鸣器鸣响提示,倒计时结束后蜂鸣器连续鸣响30秒。
原理图:
C 程序:
#include "REG52.h"
#define uchar unsigned char
#define uint unsigned int
sbit beep = P3^4;
sbit KEY1 = P3^3;
sbit KEY2 = P3^2;
uchar num=0,flag=0,js=0;
uchar sec=0,mia=0,fen=30,shi=0,a=0,b=30;
uchar code table[]={0x05,0x7D,0x26,0x34,0x5C,0x94,0x84,0x3D,
0x04,0x14,0x0C,0xC4,0x87,0x64,0x86,0x8E};//共阳极数码管0——F sbit LED1 = P3^1;
sbit LED2 = P3^5;
sbit LED3 = P3^7;
sbit LED4 = P3^0;
/******************************************************************** * 名称 : Delay_1ms()
* 功能 : 延时子程序,延时时间为 1ms * x
* 输入 : x (延时一毫秒的个数)
* 输出 : 无
***********************************************************************/ void Delay(uchar i)
{
uchar d,c;
for(c=0;c
for(d=0;d
}
void xianshi(uchar a,b)
{
uchar j,k,w,s;
if (sec
else k=0;
if (flag == 1) {w=0;s=2;}
if (flag == 2) {w=2;s=4;}
if (flag == 0 || flag>2) { w=0;s=4;}
for(j=w;j
{
if(j==0)
{
if(a>9){P1 = table[a/10];}
else P1 = 0xFF;
LED1=0;LED2=1;LED3=1;LED4=1;
}
if(j==1)
{
P1 = table[a%10];
LED1=1;LED2=0;LED3=1;LED4=1;
}
if(j==2)
{
P1 = table[b/10]-k;
LED1=1;LED2=1;LED3=0;LED4=1;
}
if(j==3)
{
P1 = table[b%10]-k;
LED1=1;LED2=1;LED3=1;LED4=0;
}
Delay(5);
}
}
void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
}
void keyscan()
{
if(KEY1==0 || KEY2==0 )
{
Delay(1); //20毫秒软件防抖 if(KEY1==0 || KEY2==0 ) { if(KEY1 == 0) { flag++; if (flag==5) flag=3; while(!KEY1); } else if (KEY2==0) { if (flag==2) { fen++; if (fen==60) fen=0;b=fen; } if (flag==1) { shi++; if (shi==24) shi=0;a=shi; }
while(!KEY2);
}
}
}
}
void Beep(uint ci)
{
uint bp;
for (bp=0;bp
{
beep=0;
Delay(200);
beep =1;
Delay(200);
}
}
void main(void)
{
InitTimer0();
while(1)
{
keyscan();
xianshi(a,b);
if (flag == 3 )
{
TR0=1;
if (shi==0) {a=fen;b=mia;} else {a=shi;b=fen;}
if (sec==100)
{
if (mia == 0)
{
mia=60;
if (fen==0)
{
if (shi>0) {shi--;fen=60;}
else {TR0=0;Beep(200);shi=0;fen=31;mia=1;a=0;b=30;flag=4;} }
fen--;
}
mia--;
if (shi==0 & fen==0 & mia
}
}
}
}
void Timer0Interrupt(void) interrupt 1 //10ms
{
TH0 = 0x0D8;
TL0 = 0x0F0;
sec++;
}