热释电人体感应红外报警器设计制作报告_毕业论文 联系客服

发布时间 : 星期六 文章热释电人体感应红外报警器设计制作报告_毕业论文更新完毕开始阅读222285e3a1116c175f0e7cd184254b35effd1a37

专业方向综合设计报告

附件二:仿真图

附件三:程序源代码

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int

#define key_io P1 uchar key_can;

// 红外热释电平时为0 有输出为1

sbit beep = P2^3; sbit red = P2^2;

//蜂鸣器定义

//红色发光二极管定义

//无符号整型 宏定义 变量范围0~65535

sbit green = P2^1; //绿色发光二极管定义 sbit yellow = P2^0; //黄色发光二极管定义 sbit hw = P1^3; //红外热释传感器定义

21

专业方向综合设计报告

bit flag_300ms = 0;

/****************独立按键处理函数************************/ void key() {

static uchar key_new = 0,key_old = 0,key_value = 0; if(key_new == 0) { } else { }

key_can = 20;

if((key_new == 0) && (key_old == 1)) {

switch(key_io & 0x07)

22

//按键松开

if((key_io & 0x07) == 0x07) { }

key_value = 0; key_new = 1;

//按键松开后进入等待按键状态

key_value ++; key_value = 0; else

if(key_value >= 5) //按键松开松手检测

if((key_io & 0x07) != 0x07) //按键按下 { }

key_value = 0; key_new = 0;

//按键松开后进入等待松开按键状态

key_value ++; key_value =0; else

if(key_value >= 5) //按键按下消抖

专业方向综合设计报告

{

case 0x06: key_can = 1; break; case 0x05: key_can = 2; break; case 0x03: key_can = 3; break;

//得到按键值 //得到按键值 //得到按键值

}

}

}

key_old = key_new;

/*************定时器0初始化程序***************/ void time_init() { }

uchar flag_alarm ; //报警标志位 uchar flag_bufang ; //布防标志位 uchar flag_bufang_en ; //布防标志位使能 uint flag_value; //用做定时器的变量

/******************红外报警处理**********************/ void hongwai_dis() {

EA = 1; ET0 = 1; TR0 = 1;

//开总中断 //开定时器0中断 //允许定时器0定时

TMOD = 0X01; //定时器0工作方式1

if(flag_alarm == 1) //报警 { } {

green = ~green; //绿灯闪

23

red = ~red; beep = ~beep;

//红灯报警 //蜂鸣器报警

if(flag_bufang_en == 1) //准备开始布防

专业方向综合设计报告

}

}

if(flag_bufang == 1) //确认布防 { }

green = 0; //如果延时布防成功 绿灯长亮 if(hw == 1) //红外有输出 { }

flag_alarm = 1;

/******************对应不同按键处理**********************/ void key_with() { }

24

if(key_can == 1) //按键紧急报警 { }

if(key_can == 2) //布防按键 { }

if(key_can == 3) //取消报警 把变量清零 { }

flag_alarm = 0; flag_bufang = 0; flag_bufang_en = 0; flag_value = 0; P2 = 0xff;

flag_bufang_en = 1;

flag_alarm = 1; //报警标志位 ;