标题:
单片机报警器
[打印本页]
作者:
baozi1997
时间:
2018-6-21 16:34
标题:
单片机报警器
图片1.png
(284.33 KB, 下载次数: 18)
下载附件
2018-6-21 16:46 上传
#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--);
} }
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1