標題:
基于51單片機的熱釋電紅外檢測報警器程序
[打印本頁]
作者:
qween
時間:
2020-12-6 12:20
標題:
基于51單片機的熱釋電紅外檢測報警器程序
兩種模式:一種緊急報警模式,另一種布防報警模式。
三個LED指示燈:紅色為報警指示燈(檢測到有人報警時閃亮)、綠色為布防指示燈(等待布防時1s一閃、進入布防狀態(tài)時常亮)、黃色為傳感器信號指示燈(有信號就亮,否則滅)。
按下布防鍵,系統(tǒng)計時20秒進入布防狀態(tài)(此時綠色的led燈閃爍),20秒后系統(tǒng)進入布防狀態(tài)(此時綠色的led亮長亮),此時當有人靠近時,黃色信號燈亮,紅外熱釋電傳感器將信號輸送給單片機,單片機接收到信號蜂鳴器響,紅色led燈亮,實現(xiàn)聲光報警。
當遇到特殊情況時,按下按鍵1(緊急報警鍵),系統(tǒng)馬上報警。
紅外熱釋電傳感器感應人體,當感應到人輸出高電平,沒感應到人輸出低電平。
四個按鍵:按鍵1緊急報警按鍵、按鍵2布防按鍵、按鍵3撤防按鍵、單獨的是復位按鍵
單片機源程序如下:
#include <reg52.h> //調(diào)用單片機頭文件
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
// 紅外熱釋電傳感器 平時為0 有輸出為1
sbit beep = P2^5; //蜂鳴器定義
sbit red = P0^1; //紅色發(fā)光二極管定義
sbit green = P0^4; //綠色發(fā)光二極管定義
sbit yellow = P0^7; //黃色發(fā)光二極管定義
sbit hw = P0^0; //紅外熱釋傳感器定義
bit flag_500ms = 0;
uchar flag_alarm ; //報警標志位
uchar flag_bufang ; //布防標志位
uchar flag_bufang_en ; //布防標志位使能
uint flag_value; //用做定時器的變量
/***********************1ms延時函數(shù)*****************************/
void delay_1ms(uint q)
{
uint i,j;
for(i=0;i<q;i++)
for(j=0;j<120;j++);
}
/********************獨立按鍵程序*****************/
uchar key_can; //按鍵值
void key() //獨立按鍵程序
{
static uchar key_new;
key_can = 20; //按鍵值還原
P1 |= 0xff;
if((P1 & 0xff) != 0xff) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P1 & 0xff) != 0xff) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0;
switch(P1 & 0xff)
{
case 0xfb: key_can = 1; break; //得到按鍵值
case 0xf7: key_can = 2; break; //得到按鍵值
case 0x7f: key_can = 3; break; //得到按鍵值
}
}
}
else //按鍵松開
key_new = 1;
}
/******************對應不同按鍵處理**********************/
void key_with()
{
if(key_can == 1) //按鍵緊急報警
{
flag_alarm = 1; //報警標志位 ;
}
if(key_can == 2) //布防按鍵
{
flag_bufang_en = 1;
}
if(key_can == 3) //取消報警 把變量清零
{
flag_alarm = 0;
flag_bufang = 0;
flag_bufang_en = 0;
flag_value = 0;
beep = 1;
red = 1; //關閉紅燈
green = 1; //關閉綠燈
yellow = 1; //關閉黃燈
}
}
/*************定時器0初始化程序***************/
void time_init()
{
EA = 1; //開總中斷
TMOD = 0X01; //定時器0工作方式1
ET0 = 1; //開定時器0中斷
TR0 = 1; //允許定時器0定時
}
/******************紅外報警處理**********************/
void hongwai_dis()
{
if(flag_bufang_en == 1) //準備開始布防
{
green = ~green; //綠燈閃
}
if(flag_bufang == 1) //確認布防
{
green = 0; //如果延時布防成功 綠燈長亮
if(hw == 1) //紅外有輸出
{
flag_alarm = 1;
}
}
if(flag_alarm == 1) //報警
{
red = ~red; //紅燈報警
beep = ~beep; //蜂鳴器報警
}
}
復制代碼
作者:
1905260157
時間:
2022-6-19 09:56
那四個按鍵接哪,程序里沒有分配引腳
作者:
heicad
時間:
2022-6-19 13:13
1905260157 發(fā)表于 2022-6-19 09:56
那四個按鍵接哪,程序里沒有分配引腳
看這3行就明白了
case 0xfb: key_can = 1; break; //得到按鍵值
case 0xf7: key_can = 2; break; //得到按鍵值
case 0x7f: key_can = 3; break; //得到按鍵值
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1