基于单片机的温湿度监控报警系统设计
参考文献
[1] 姜志海, 黄玉清,刘连鑫. 单片机原理及应用[M]. 电子工业出版社,2009.
[2] 郭天祥. 51单片机C语言教程[M]. 电子工业出版社.2009.
[3] 张毅刚, 彭喜元, 彭宇. 单片机原理及应用[M]. 高等教育出版社.2010. [4] 杨素行. 模拟电子技术基础简明教程[M]. 高等教育出版社.2006. [5] 李维提, 郭强. 液晶显示应用技术[M]. 电子工业出版社.2003. [6] 刘湘涛. 单片机原理与应用[M]. 电子工业出版社.2006.
[7] 何立民. 单片机高级教程[M]. 北京航空航天大学出版社.2004.
[8] 周润景, 徐宏伟, 丁莉. 单片机电路设计分析与制作[M]. 机械工业出版社. 2010.
[9] 李全利. 单片机原理及应用技术[M]. 高等教育出版社, 2004.
[10] 李秀霞. 郑春厚. Protel DXP 2004电路设计与仿真教程[M]. 北京
航空航天大学出版社.2008. [11] 余家春. Protel99Se电路设计实用教程[M]. 中国铁道出版社, 2002. [12] 郭强. 液晶显示应用技术[M]. 电子工业出版社. 2000.
[13] 王建校. 51系列单片机及C51程序设计[M]. 科学出版社. 2002. [14] 马忠梅. 单片机的C语言应用程序设计[M]. 北京航空航天大学出
版社.1998.
- 24 -
基于单片机的温湿度监控报警系统设计
附件1 系统程序
A1.1 主程序
//实现功能,设定温度上限和湿度上限,超过上限值时报警。报警现象,对应二极管亮,蜂鸣器响// #include
#include \ //定义变量 sbit Led_qushi=P1^6; //潮湿报警灯 sbit Led_jiangwen=P1^5; //超温报警灯 sbit Key_TH1 = P1^2; //温度最高值设置按键 sbit Key_TH2 = P3^3; //温度最高值设置按键 sbit Key_HH1 = P3^4; //湿度最高值设置按键 sbit Key_HH2 = P3^5; //湿度最高值设置按键
sbit beep=P2^0; //蜂鸣器
volatile bit FlagStartRH = 0; //开始温湿度转换标志 volatile bit FlagKeyPress = 0; //有键按下
extern U8 U8FLAG,k; //定义温湿度传感器用外部变量 extern U8 U8count,U8temp;
extern U8 U8T_data_H,U8T_data_L,U8RH_data_H,U8RH_data_L,
U8checkdata;
extern U8 U8T_data_H_temp,U8T_data_L_temp,U8RH_data_H_temp,
U8RH_data_L_temp,U8checkdata_temp; extern U8 U8comdata; extern U8 count, count_r; U16 temp;
S16 temperature, humidity; S16 idata TH, HH;
//温度上限和湿度上限
- 25 -
基于单片机的温湿度监控报警系统设计
char * pSave;
U8 keyvalue, keyTH1, keyTH2, keyHH1, keyHH2; U16 RHCounter;
void Data_Init() //数据初始化 { RHCounter = 0; keyvalue = 0;
Led_qushi = 1; Led_jiangwen = 1; TH = 40; HH = 85; keyTH1 = 1; keyTH2 = 1; keyHH1 = 1; keyHH2 = 1; beep=1; }
void Timer0_Init() //定时器0初始化 { ET0 = 1; //允许定时器0中断 TMOD = 1; //定时器工作方式选择 TL0 = 0x06; //定时器赋予低位初值 TH0 = 0xf8; //定时器赋予高位初值 TR0 = 1; } //启动定时器 void Timer0_ISR (void) interrupt 1 using 0 //定时器0中断 { TL0 = 0x06; //定时器赋予低位初值 TH0 = 0xf8; //定时器赋予高位初值 RHCounter ++; //每2秒钟启动一次温湿度转换 if (RHCounter >= 1000) { FlagStartRH = 1; RHCounter = 0; } }
void Save_Setting() //存入设定值、
{ pSave = (char *)&TH; //地址低位对应低8位,高位对应高8位 wrteeprom(0, *pSave); //存温度上限值TH低8位 DELAY(500); //延时 pSave ++;
wrteeprom(1, *pSave); //存温度上限值TH高8位 DELAY(500);
pSave = (char *)&HH; wrteeprom(2, *pSave);
//存湿度上限值RH低8位
- 26 -
基于单片机的温湿度监控报警系统设计
DELAY(500); pSave ++;
wrteeprom(3, *pSave); DELAY(500); }
//存湿度上限值RH高8位
void Load_Setting() //载入设定值、 { pSave = (char *)&TH; *pSave++ = rdeeprom(0); *pSave = rdeeprom(1); pSave = (char *)&HH; *pSave++ = rdeeprom(2);
*pSave = rdeeprom(3);
if ((TH>99)||(TH<0)) TH = 40; if ((HH>99)||(HH<0)) HH = 85; } void KeyProcess(uint num) { switch (num) { case 1: if (TH<99) TH++; L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH+48);
break; case 2:
if (TH>1) TH--;
L1602_char(1, 15, TH/10+48); L1602_char(1, 16, TH+48); break; case 3:
if (HH<99) HH++;
L1602_char(2, 15, HH/10+48); L1602_char(2, 16, HH+48); break; case 4:
if (HH>1) HH--;
L1602_char(2, 15, HH/10+48);
- 27 -
相关推荐: