历史上的今天
今天是:2024年12月07日(星期六)
2021年12月07日 | 基于51单片机DHT11的加湿器proteus仿真程序设计
2021-12-07 来源:eefocus
硬件设计
仿真图:由LCD1602作为显示器,温湿度采用DHT11,通过3个按键设置阈值,当温湿度超过上下限之后会触发分别的继电器;

程序设计
#include "common.h"
#include "lcd1602.h"
#include "dht.h"
extern unsigned char U8RH_data_H;
extern unsigned char U8T_data_H;
sbit key1 = P1^0;//设置键
sbit key2 = P1^1;//加键
sbit key3 = P1^2;//减键
sbit relay1 = P1^6;//加热继电器
sbit relay2 = P1^7;//降温继电器
sbit relay3 = P3^6;//加湿继电器
sbit relay4 = P3^7;//除湿继电器
sbit beep = P2^0;//蜂鸣器
unsigned char tl = 10,th = 35,hl = 15,hh = 70;//温湿度上下限初始值
unsigned char setn = 0;//设置标志
void display_alarm()//显示报警值
{
lcd_write_char(4,0,tl/10+0x30);
lcd_write_char(5,0,tl%10+0x30);
lcd_write_char(13,0,th/10+0x30);
lcd_write_char(14,0,th%10+0x30);
lcd_write_char(4,1,hl/10+0x30);
lcd_write_char(5,1,hl%10+0x30);
lcd_write_char(13,1,hh/10+0x30);
lcd_write_char(14,1,hh%10+0x30);
}
void keyscan()
{
if(key1 == 0)//设置键按下
{
delay_ms(10);
if(key1 == 0)
{
beep = 0;
delay_ms(100);
beep = 1;
while(key1 == 0);//等待按键松开
setn++;
if(setn > 4)//按下次数超过4次,退出设置
{
setn = 0;
lcd_write_com(0x0c);//关闭光标
lcd_write_str(0,0,"Tem: C Hum: %");
lcd_write_str(0,1," ");
}
if(setn == 1)//设置温度下限
{
lcd_write_str(0,0,"Tml: C Tmh: C");
lcd_write_str(0,1,"Hml: % Hmh: %");
display_alarm();
lcd_write_com(0x80+5);
lcd_write_com(0x0f);
}
if(setn == 2)//温度上限
{
lcd_write_com(0x80+14);
lcd_write_com(0x0f);
}
if(setn == 3)//湿度下限
{
lcd_write_com(0x80+0x40+5);
lcd_write_com(0x0f);
}
if(setn == 4)//湿度上限
{
lcd_write_com(0x80+0x40+14);
lcd_write_com(0x0f);
}
}
}
if(key2 == 0)//加键按下
{
delay_ms(10);
if(key2 == 0)
{
beep = 0;
delay_ms(100);
beep = 1;
while(key2 == 0);
if(setn == 1)
{
if(th - tl > 1)//上限必须大于下限,下限才能加
tl ++;
display_alarm();
lcd_write_com(0x80+5);
lcd_write_com(0x0f);
}
if(setn == 2)
{
if(th < 99)//最大到99
th++;
display_alarm();
lcd_write_com(0x80+14);
lcd_write_com(0x0f);
}
if(setn == 3)
{
if(hh - hl > 1)//上限必须大于下限,下限才能加
hl++;
display_alarm();
lcd_write_com(0x80+0x40+5);
lcd_write_com(0x0f);
}
if(setn == 4)
{
if(hh < 99)//最大到99
hh++;
display_alarm();
lcd_write_com(0x80+0x40+14);
lcd_write_com(0x0f);
}
}
}
if(key3 == 0)//减键按下
{
delay_ms(10);
if(key3 == 0 )
{
beep = 0;
delay_ms(100);
beep = 1;
while(key3 == 0);
if(setn == 1)
{
if(tl > 0)//最小到0
tl --;
display_alarm();
lcd_write_com(0x80+5);
lcd_write_com(0x0f);
}
if(setn == 2)
{
if(th - tl > 1)//上限必须大于下限,上限才能减
th--;
display_alarm();
lcd_write_com(0x80+14);
lcd_write_com(0x0f);
}
if(setn == 3)
{
if(hl > 0)
hl--;
display_alarm();
lcd_write_com(0x80+0x40+5);
lcd_write_com(0x0f);
}
if(setn == 4)
{
if(hh - hl > 1)//上限必须大于下限,上限才能减
hh--;
display_alarm();
lcd_write_com(0x80+0x40+14);
lcd_write_com(0x0f);
}
}
}
}
文件仅供参考:
链接:https://pan.baidu.com/s/1ZMBRq-beQdIIprV4pZcopA
提取码:e2xw
史海拾趣
|
监视系统的设计者和厂商一直希望微控制器能够为日常监视应用提供不断增加的通用功能,包括满足用电计量、汽车监控、数据搜集和传感器调节等方面的要求。maxq3120 就是为了满足这些要求而开发的低功耗、高速微控制器。它的主要技术规范如下。 ...… 查看全部问答> |
|
宗旨:培养EE友们动手实践能力、提高和RF应用、MCU编程开发能力等。 项目:智能家庭遥控器 主芯片:SI4020/SI4021 遥控距离:>15米。 电池规格:3节干电池供电。 电池使用寿命:半年以上。 成本控制:接收器+发送器共不超过60 RMB(DIY10套, ...… 查看全部问答> |
|
平台: windows mobile 6.5 platform builder for wimdows mobile 5.0 pxa310 board 问题:现在想把三个文件打包到FLASH.bin中,但是一直不成功,我是在release目录下用ultra edit32编辑platform.bib在FILES下添加如下内容: sdio-g-cdc-ndis- ...… 查看全部问答> |
|
我要做的课题是设计一个基于AM79C976芯片的网卡 可是不知道该往网卡里的EEPROM里写些什么东西 也不知道怎么写 谁能教教我 我用的EEPROM是93LC66B 还有一个问题 是关于EEPROM和寄存器映射的 是不是加电以后EEPROM的信息就会自动读到芯片内相应的寄 ...… 查看全部问答> |
|
XP Embedded是微软Windows Embedded产品线中非常重要的一环,不过比起大名鼎鼎的Windows Embedded CE,XPe显得过于低调了。在接下来的一段时间里,我希望能够用六篇的篇幅来描述一下XPe的整个开发过程。这个系列文章主要是针对有Windows编程经验, ...… 查看全部问答> |
|
module signalcreat(clk,out); input clk; reg[5:0] data; reg a; output out; reg out; initial &nbs ...… 查看全部问答> |
|
有些不是0xFFFFFFFF,这次买了20片,有10多片是 0xFFFFFFFF的,怎么回事呢? 买到假货了 ? 还是程序的问题,? 代码很简单,芯片型号是 STM32F103C6T6 u32 DevID[3]; DevID[0] = *(vu32*)(0x1ffff7e8); & ...… 查看全部问答> |
|
ucosii在中断里推出时任务切换时,为什么使用OSIntCtxSw() 下载 (139.84 KB) 2011-1-4 15:24 下载 (73.55 KB) 2011-1-4 15:24 但这两个函数没区别啊?… 查看全部问答> |




