- #include<reg51.h>
- //------两个常用的宏定义------//
- #define uchar unsigned char
- #define uint unsigned int
- void DelayMS(uint); // 延时函数的声明
- void Time0_Init(); // 定时器0初始化
- void K1_scan();
- void Display();
- sbit beep=P1^7; // 蜂鸣器发出声报警
- sbit led=P1^0; // 二极管发出光报警
- sbit K1=P3^7; // 报警装置触发按钮
- uint num1; // 十秒的计数变量
- uint num2; // 六秒的计数变量
- uchar flag; // 报警按键检测的标志位
- uchar code Ledchar[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
- uchar LedBuffer[4]={0x00,0x00,0x00,0x00};
- void main()
- {
- Time0_Init();
- led=1;
- beep=1;
- flag=0;
- while(1)
- {
- K1_scan(); //一直检测按键是否按下
- while(flag==1) //flag=1表示按下,执行相应功能
- {
- led=0; //开led
- beep=0; //开蜂鸣器
- flag=0;
- LedBuffer[0]=0x3f;
- LedBuffer[1]=0x79;
- LedBuffer[2]=0x3f;
- LedBuffer[3]=0x79; //清标志位
- }
- while(num1==100) //五秒延时到,关闭警报
- {
- led=1;
- beep=1;
- LedBuffer[0]=0x00;
- LedBuffer[1]=0x00;
- LedBuffer[2]=0x00;
- LedBuffer[3]=0x00;
- }
- while(num2>100 && num2<300 && flag==1) //关闭后十秒内有键按下则重开警报
- {
- led=0;
- beep=0;
- flag=0;
- LedBuffer[0]=0x3f;
- LedBuffer[1]=0x79;
- LedBuffer[2]=0x3f;
- LedBuffer[3]=0x79;
- }
- }
- }
- //------按键检测函数------//
- void K1_scan()
- {
- while(K1==0)
- {
- DelayMS(10);
- if(K1==1)
- break;
- while(K1==0);
- EA=1;
- flag=1;
- }
- }
- //------定时器0初始化------//
- void Time0_Init()
- {
- TMOD=0x01; //选择定时器0工作在定时方式1
- TH0=0x3c; //定时50ms,装初值
- TL0=0xb0;
- ET0=1; //开启定时中断
- EA=0; //关总中断
- TR0=1; //开启定时器T0
- }
- //------定时器0中断------//
- void Timer0() interrupt 1
- {
- TH0=0x3c; //重装初值
- TL0=0xb0;
- Display();
- num1++; //计时变量+1
- num2++; //
- }
- //------显示函数------//
- void Display()
- {
- P2=0xfe; P0=LedBuffer[3]; DelayMS(2);
- P2=0xfd; P0=LedBuffer[2]; DelayMS(2);
- P2=0xfb; P0=LedBuffer[1]; DelayMS(2);
- P2=0xf7; P0=LedBuffer[0]; DelayMS(2);
- }
- //------延时函数MS级------//
- void DelayMS(uint x)
- {
- uint i,j;
- for(i=x;i>0;i--)
- for(j=124;j>0;j--);
- } }
复制代码
|