標題:
單片機紅外熱釋電人體感應報警器Proteus仿真程序
[打印本頁]
作者:
heilongbao
時間:
2021-12-12 14:37
標題:
單片機紅外熱釋電人體感應報警器Proteus仿真程序
本設計系統(tǒng)是紅外熱釋電人體感應報警器,當按下布防鍵30秒鐘后系統(tǒng)會進入布防狀態(tài),只要一有人進入傳感器的范圍系統(tǒng)會馬上報警蜂鳴器會叫、紅色發(fā)光二極管會閃爍。
報警方式:
紅色發(fā)光二極管閃爍,蜂鳴器報警。
操作說明:
1.緊急報警鍵:按下緊急報警鍵,系統(tǒng)會馬上報警。
2.布防鍵:按下布防鍵綠色發(fā)光二極管會閃爍,說明系統(tǒng)準備開始布防,30秒鐘后綠色發(fā)光二管會長亮,說明系統(tǒng)進入布防狀態(tài)了,只要一有人進入傳感器的范圍內系統(tǒng)馬上就會報警。
3.取消鍵:按下取消鍵可取消當前報警。
4.紅色發(fā)光二極管:當有報警時此發(fā)光二極管長亮,否則熄滅。
5.綠色發(fā)光二極管:用做布防狀態(tài)指示燈。
6.黃色發(fā)光二極管:用做傳感器指示,當傳感器有信號輸出,此燈會亮,否則熄滅。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真圖.jpg
(258.27 KB, 下載次數(shù): 114)
下載附件
2021-12-13 01:40 上傳
51hei.gif
(61.91 KB, 下載次數(shù): 100)
下載附件
2021-12-13 01:40 上傳
單片機源程序如下:
#include <reg52.h> //調用單片機頭文件
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
//紅外熱釋電傳感器 平時為0 有輸出為1
sbit beep = P2^3; //蜂鳴器定義
sbit red = P2^2; //紅色發(fā)光二極管定義
sbit green = P2^1; //綠色發(fā)光二極管定義
sbit yellow = P2^0; //黃色發(fā)光二極管定義
sbit hw = P1^3; //紅外熱釋傳感器定義
bit flag_300ms = 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 |= 0x07;
if((P1 & 0x07) != 0x07) //按鍵按下
{
delay_1ms(1); //按鍵消抖動
if(((P1 & 0x07) != 0x07) && (key_new == 1))
{ //確認是按鍵按下
key_new = 0;
switch(P1 & 0x07)
{
case 0x06: key_can = 1; break; //得到按鍵值
case 0x05: key_can = 2; break; //得到按鍵值
case 0x03: 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; //蜂鳴器報警
}
}
/******************主程序**********************/
void main()
{
time_init(); //定時器初始化程序
beep = 0; //開機叫一聲
delay_1ms(200);
P0 = P1 = P2 = P3 = 0xff; //初始化單片機IO口為高電平
while(1)
{
key();
yellow = ~hw; //紅外熱釋電指示燈 有輸出就亮黃燈
if(key_can < 10)
{
key_with(); //按鍵設置函數(shù)
}
if(flag_300ms == 1)
{
flag_300ms = 0;
hongwai_dis(); //紅外報警函數(shù)
}
}
}
/*************定時器0中斷服務程序***************/
void time0_int() interrupt 1
{
static uint value;
TH0 = 0x3c;
TL0 = 0xb0; // 50ms
value ++;
if(value % 6 == 0)
{
flag_300ms = 1;
}
if(flag_bufang_en == 1)
{
flag_value ++; // 400 * 50ms = 20000ms = 20秒
if(flag_value >= 400) //20秒
{
flag_bufang = 1;
flag_bufang_en = 0;
flag_value = 0;
}
}
}
復制代碼
內含代碼及代碼,仿真
紅外熱釋電.zip
(203.9 KB, 下載次數(shù): 139)
2021-12-12 14:37 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
@zdd1998
時間:
2022-11-15 14:53
左下角藍色的箭頭是什么呀?
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1