/*******************************************************
定时炸弹
9秒倒计时,至0时蜂鸣器响演示炸弹
Author:Vivien
*******************************************************/
#include <reg51.h>
#define DataPort P0 //数据端口
sbit Beep= P1^0; //蜂鸣器数据
unsigned char code Num[] = {0x90,0x80,0xf8,0x82,0x92,0x99,0xb0,0xa4,0xf9,0xc0};
//9-0的共阳极数码管16进制
void delay_1s()
{
unsigned char i;
TMOD = 0x01; //T0工作在定时方式,方式1
TH0 = 0x3c; //50ms的初值
TL0 = 0xb0;
TR0 = 1; //开T0
for(i = 0;i < 20;i++)
{
while(!TF0); //等待时间,原地踏步
TF0 = 0; //清除标志位
TH0 = 0xff; //重新赋初值
TL0 = 0xce;
}
}
void Delay_Second(unsigned char i)
{
while(--i)
{
delay_1s();
}
}
void DelayUs2x(unsigned char n) //t = 2 * n + 5 us
{
while(--n);
}
void DelayMs(unsigned int n) //t = n ms
{
while(n--)
{
DelayUs2x(245);
DelayUs2x(245);
}
}
void main() //实现计时9-0
{
unsigned int num = 0;
while(1)
{
DataPort = Num[num];
num++;
Delay_Second(15);
if(num == 9)
{
while(1)
{
DelayMs(1);//发出大约500HZ的方波,频率越大,声音越尖,蜂鸣器响的条件
Beep = !Beep;
DataPort = Num[9];
}
}
}
}