logo资料库

基于51单片机温湿度检测仪设计.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
基于基于51单片机温湿度检测仪设计 单片机温湿度检测仪设计 1、设计需求及目标 、设计需求及目标 (1)以单片机为核心设计整个系统。 (2)实现传感器采集的温湿度数据传输到单片机中进行数据分析处理,并启动相应设备来调整实验室温湿度。 (3)使用Keil C编程实现相关逻辑控制。 (4) 电路原理图设计,protel印刷电路图设计。 2、设计思路及方案 、设计思路及方案 本文通过使用STC89C52单片机、DHT11传感器模块、1602液晶显示屏模块以及报警模块。DHT11数字温湿度传感器把采集到的温湿度数据传给单片机,经过单片机的处理后准确的显示到液 晶屏上,并对温湿度设置上下限, 超过设定范围则报警。硬件电路图: 3、部分代码 、部分代码 #include //调用单片机头文件 #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #include sbit beep = P1^4; //蜂鸣器IO口定义 uchar a_a; bit flag_300ms ; // 按键的IO变量的定义 uchar key_can; //按键值的变量 sbit wh_led = P2^2; //温度报警指示灯IO口定义 sbit wl_led = P2^3; //温度报警指示灯IO口定义 sbit sh_led = P2^1; //湿度报警指示灯IO口定义 sbit sl_led = P2^0; //湿度报警指示灯IO口定义 uchar flag_en = 1; uchar menu_1; //菜单设计的变量 uint t_high = 30,t_low = 10; //温度报警参数 uint s_high = 30,s_low = 10; //湿度报警参数 /*************************************************************** * 名称 : delay_1ms() * 功能 : 延时1ms函数 * 输入 : q * 输出 : 无 ****************************************************************/ void delay_1ms(uint q) { uint i,j; for(i=0;i
{ if(key_can == 2) { t_high ++ ; //设置高温值加1 if(t_high > 99) t_high = 99; } if(key_can == 3) { t_high -- ; //设置高温值减1 if(t_high = t_high) t_low = t_high - 1; } if(key_can == 3) //设置高温值减1 { t_low -- ; if(t_low 99) s_high = 99; } if(key_can == 3) { s_high -- ; //设置高湿值减1 if(s_high = s_high) s_low = s_high - 1; } if(key_can == 3) //设置低湿值减1 { s_low -- ; if(s_low <= 1) s_low = 1; } write_sfm2(2,13,s_low); //显示湿度 write_com(0x80+0x40+13); //将光标移动到秒个位 write_com(0x0f); //显示光标并且闪烁 } } /*****************读温湿度传感器程序****************/ void dst11() { uchar i,j; //读温湿度时不能打开中断 dht11 = 0; delay_1ms(5); dht11 = 1; delay_uint(4); //50us if(dht11 == 0) //判断是否响应 0 为响应 { while(dht11 == 0); while(dht11 == 1); //等待响应时间过完 for(i=0;i<5;i++) { for(j=0;j<8;j++) { table_dht11[i] <= t_high)) { value1 ++; //消除温度在边界时的干扰 if(value1 > 2) { wh_led = 0; //打开指示灯 } } else { value1 = 0; wh_led = 1; //关闭指示灯 } if((table_dht11[2] 2) { wl_led = 0; //打开指示灯 } } else { value2 = 0; wl_led = 1; //关闭指示灯 } if((table_dht11[0] >= s_high)) { value3 ++; //消除湿度在边界时的干扰 if(value3 > 2) { sh_led = 0; //打开指示灯 } }else { value3 = 0; sh_led = 1; //关闭指示灯 } if((table_dht11[0] 2) { sl_led = 0; //打开指示灯 } }else { value4 = 0; sl_led = 1; //关闭指示灯 } if((wh_led == 0) || (wl_led == 0) || (sh_led == 0) || (sl_led == 0)) { value ++; if(value >= 2)
if(flag_en == 1) beep = ~beep; //蜂鸣器报警 } else { beep = 1; value = 0; flag_en = 1; } } /******************主程序**********************/ void main() { beep = 0; //开机叫一声 delay_1ms(150); P0 = P1 = P2 = P3 = 0xff; time_init(); //定时器初始化 init_1602(); //lcd1602初始化 dst11(); //先读出温湿度的值 while(1) { if(flag_300ms == 1) { flag_300ms = 0; dst11(); //先读出温湿度的值 write_sfm2(2,3,table_dht11[0]); //显示湿度 write_sfm2(1,3,table_dht11[2]); //显示温度 clock_h_l(); //报警函数 } key(); if(key_can < 10) { key_with(); //设置报警温度 if(key_can == 3) { flag_en = 0; //手动取消报警 } } delay_1ms(1); } } /*************定时器0中断服务程序***************/ void time0_int() interrupt 1 { static uchar value; TH0 = 0x3c; TL0 = 0xb0; // 50ms value ++; if(value % 6 == 0) { flag_300ms = 1; //300ms value = 0; } } 完整资料: 完整资料: https://market.m.taobao.com/app/idleFish-F2e/widle-taobao-rax/page-detail? wh_weex=true&wx_navbar_transparent=true&id=614258905034&ut_sk=1.WUpxx7gpwUoDAMmnnrBIzAno_12431167_1585228024499.Copy.detail.614258905034.1828622527&forceFlush=1 作者:卡萨德上校
分享到:
收藏