参考文献
[1]胡萍.串口通信的红外报警器的研制[J].计算机与现代化,2010(10):15-16.
[2]唐德琴.电子温度测量仪器技术发展战略研究[J].电子科学技术,2009,27(1):1-8
[3]李行善.基于串口组件的体系结构[J].电子串口与仪器学报,2010(08):15-16.
[4]姜道连等.用于AT89C51设计红外报警器的设计与制作[J].国外电子元器件,2010(12):31-34.
[5]冯国进.嵌入式Linux驱动程序设计从入f-J至U精通D田.北京:清华大学出版社,2008
[6]蔡文斋. 专业级串口调试器设计. 现代电子技术, 2010. [7]熊如贵.串口通信感应装置[J].电子制作,2009(6):23-31.
[8] 时德钢等.基于串口通信的红外报警器的研究[J].计算机测量与控制,2009,10(7):480-482.
36
附件一:总体原理图设计
37
附件二:实物图
38
附件三:程序源代码
#include
#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535
#define key_io P1 uchar key_can;
// 红外热释电平时为0 有输出为1
sbit beep = P2^3; //蜂鸣器定义
sbit red = P2^2; //红色发光二极管定义 sbit green = P2^1; //绿色发光二极管定义 sbit yellow = P2^0; //黄色发光二极管定义 sbit hw = P1^3; //红外热释传感器定义 bit flag_300ms = 0;
/****************独立按键处理函数************************/ void key() { static uchar key_new = 0,key_old = 0,key_value = 0; if(key_new == 0) //按键松开 { if((key_io & 0x07) == 0x07) key_value ++; else key_value = 0; if(key_value >= 5) //按键松开松手检测 { key_value = 0; key_new = 1; //按键松开后进入等待按键状态 } } else { if((key_io & 0x07) != 0x07) //按键按下 key_value ++; else key_value =0; if(key_value >= 5) //按键按下消抖 {
39
key_value = 0; key_new = 0; //按键松开后进入等待松开按键状态 } } key_can = 20; if((key_new == 0) && (key_old == 1)) { switch(key_io & 0x07) { 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() { EA = 1; //开总中断 TMOD = 0X01; //定时器0工作方式1 ET0 = 1; //开定时器0中断 TR0 = 1; //允许定时器0定时 }
uchar flag_alarm ; //报警标志位 uchar flag_bufang ; //布防标志位 uchar flag_bufang_en ; //布防标志位使能 uint flag_value; //用做定时器的变量
/******************红外报警处理**********************/ void hongwai_dis() { if(flag_alarm == 1) //报警 { red = ~red; //红灯报警 beep = ~beep; //蜂鸣器报警 } if(flag_bufang_en == 1) //准备开始布防 { green = ~green; //绿灯闪 }
40