历史上的今天
返回首页

历史上的今天

今天是:2024年11月18日(星期一)

正在发生

2019年11月18日 | 单片机+DHT11温湿度检测程序

2019-11-18 来源:51hei

基于DHT11温湿度报警系统LCD1602显示操作说明

本设计系统是DHT11温湿度报警系统LCD1602显示,可设置温度的高温报警值和低温报警值、湿度的高湿度报警值和低温度报警值,当有报警时蜂鸣器会发出滴滴的报警声,同时绿色发光二极管闪烁,在LCD1602液晶上还能很直观的看到报警信息。并具有掉电保存功能,数据保存在单片机内部EEPOM中,进入设置界面后如果没有键按下系统会在30秒后自动退出设置界面,人性化的按键设置,按键还具有连加、减功能,当按下按键时有按键声即蜂鸣器叫一声,按键声可以进入菜单内设置,可设置按键声打开或关闭。系统还设有取消报警回差值,增加的系统的抗干扰性。

报警方式:声光报警    
蜂鸣器滴滴报警声、发光二极管闪烁。
DHT11温湿度检测

单片机电路原理图:

0.png?imageView2/2/w/550 

蜂鸣器    蜂鸣器    B1
10uF    电容    C1
20pF    电容    C2, C3
D    指示灯    D1, D2, D3, D4,
LCD1602    液晶    LCD1
9012    三极管    Q1
10K    电阻    R3, R4
2K    电阻    R1
2K    电阻    R2, R5
SW-PB    按键    S1, S2, S3, S4, S5
sw-灰色    电源开关    SW1
U1    单片机    U1
DHT11    温湿度传感器    U2
12M    晶振    Y1

单片机源程序如下:

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

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

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


sbit beep = P1^4;   //蜂鸣器


int 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 = 35,t_low = 10;        //温度报警参数

uint s_high = 80,s_low = 10;        //湿度报警参数


/***************************************************************

* 名称 : delay_1ms()

* 功能 : 延时1ms函数

* 输入 : q

* 输出 : 无

****************************************************************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}


sbit dht11=P1^5;         //温度传感器IO口定义

uchar table_dht11[5]={1,2,3,4,5};


uchar code table_num[]="0123456789abcdefg";


sbit rs=P1^0;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit rw=P1^1;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit e =P1^2;         //片选信号   下降沿触发


/********************************************************************

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

***********************************************************************/

void delay_uint(uint q)

{

        while(q--);

}


/********************************************************************

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

***********************************************************************/

void write_com(uchar com)

{

        e=0;

        rs=0;

        rw=0;

        P0=com;

        delay_uint(25);

        e=1;

        delay_uint(100);

        e=0;

}


/********************************************************************

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

***********************************************************************/

void write_data(uchar dat)

{

        e=0;

        rs=1;

        rw=0;

        P0=dat;

        delay_uint(25);

        e=1;

        delay_uint(100);

        e=0;        

}



/***********************lcd1602上显示特定的字符****0XDF 度********************/

void write_zifu(uchar hang,uchar add,uchar date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(date);        

}


/***********************lcd1602上显示两位十进制数************************/

void write_sfm2(uchar hang,uchar add,uint date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/10%10);

        write_data(0x30+date%10);        

}


/***********************lcd1602上显示这字符函数************************/

void write_string(uchar hang,uchar add,uchar *p)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

                while(1)                                                                                                                 

                {

                        if(*p == '')  break;

                        write_data(*p);

                        p++;

                }        

}


/***********************lcd1602初始化设置************************/

void init_1602()        //lcd1602初始化

{

        write_com(0x38);        

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

        write_string(1,0,"Wd:00  H00  L00   ");        

        write_string(2,0,"Sd:00% H00% L00% ");        

        write_zifu(1,5,0xdf);        //显示度                

        write_zifu(1,10,0xdf);        //显示度        

        write_zifu(1,15,0xdf);        //显示度        

        write_sfm2(1,3,table_dht11[2]);           //显示温度

        write_sfm2(2,3,table_dht11[0]);   //显示湿度        

        write_sfm2(1,7,t_high);          //显示温度

        write_sfm2(2,7,s_high);   //显示湿度                

        write_sfm2(1,10,t_low);          //显示温度

        write_sfm2(2,10,s_low);   //显示湿度                

}


/********************独立按键程序*****************/

uchar key_can;         //按键值


void key()             //独立按键程序

{

        static uchar key_new;

        key_can = 20;               //按键值还原

        P3 |= 0xf0;

        if((P3 & 0xf0) != 0xf0)                //按键按下

        {

                delay_1ms(1);                     //按键消抖动

                if(((P3 & 0xf0) != 0xf0) && (key_new == 1))

                {                                                //确认是按键按下

                        key_new = 0;

                        switch(P3 & 0xf0)

                        {

                                case 0xd0: key_can = 1; break;           //得到k1键值

                                case 0xb0: key_can = 2; break;           //得到K2键值

                                case 0x70: key_can = 3; break;           //得到k3键值

                        }

                }                        

        }

        else 

                key_new = 1;        

}



/****************按键显示函数***************/

void key_with()

{

        if(key_can == 1)           //设置键

        {

                menu_1 ++;

                if(menu_1 > 2)

推荐阅读

史海拾趣

EMC Technology RF Labs公司的发展小趣事

在追求经济效益的同时,RF Labs也注重可持续发展和环保责任。他们积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,RF Labs还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了RF Labs的社会责任感,也为公司的长期发展奠定了坚实的基础。

Amphenol Nexus公司的发展小趣事

作为一家专注于电气元件和连接器制造的公司,Amphenol Nexus Technologies始终致力于技术创新和产品升级。公司投入大量资源用于研发,不断推出具有创新性和高性能的新产品。例如,在高速连接器领域,Amphenol Nexus Technologies成功研发出了112G高速背板连接器,这一产品满足了人工智能等前沿技术对高速传输的需求,为公司带来了新的增长点。

ATM [Advanced Technical Materials]公司的发展小趣事

中国ATM的发展历程始于20世纪80年代中期。1987年,中国银行在珠海推出了中国大陆第一台ATM,标志着ATM在中国开始了发展。随后,经过数十年的快速发展,中国ATM市场经历了多个阶段,从初级阶段到专业化阶段,再到如今的快速发展阶段。中国ATM市场的繁荣,不仅反映了国内银行业电子化建设的成果,也体现了电子行业的快速发展和普及。

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司注重企业文化建设和团队建设,通过营造积极向上的工作氛围和提供广阔的发展平台,吸引了大量优秀人才的加入。公司注重员工的培训和成长,为员工提供多样化的职业发展路径。同时,公司还积极开展团队建设活动,增强员工的归属感和凝聚力。这种企业文化和团队建设为公司的发展提供了有力的保障。


请注意,这些故事是基于一般性的电子行业和公司发展情况进行构想的,可能与Aerotronics Marketing Inc公司的实际情况存在差异。如果需要更具体、准确的故事,建议您直接查阅该公司的官方网站、新闻报道或相关资料。

Hongfa公司的发展小趣事

为了推动公司的进一步发展,宏发公司于2008年进行了股份制改造,并成立了“厦门宏发电声股份有限公司”。2012年,公司成功上市,通过资本市场获得了更多的资金支持和发展动力。上市后,宏发继续加大在技术研发、市场拓展和产能提升等方面的投入,不断巩固和扩大其在继电器行业的领先地位。同时,公司还积极履行社会责任,为行业发展和地方经济做出了积极贡献。

振宝佳(DMBJ)公司的发展小趣事

振宝佳(DMBJ)公司自成立之初,就专注于贴片铝电解电容的研发与生产。在1998年之前,公司一直在台湾深耕细作,积累了丰富的技术实力和市场资源。进入21世纪,随着电子产业的快速发展,振宝佳意识到技术突破的重要性。于是,公司投入大量资源,研发出多项专利技术,这些技术不仅提升了产品的性能,也增强了公司的市场竞争力。

问答坊 | AI 解惑

自己待完善的技术工作经验体系

1、电子技术资料尽量看西方英文原版的      理由:电子技术发源于西方,那边的人对许多电路问题有很深的认识,研究的很细,条理很清晰,对产品开发的指导性强。尽管国内也有人在研究,但有真正指导生产意义的刊物太少,市面上 ...…

查看全部问答>

基于proteus的喇叭的应用实例或单片机实现的音乐贺卡

单片机实现类似音乐贺卡的功能,自己选择一段音乐用单片机驱动喇叭播放出来,…

查看全部问答>

ClearCommError问题

COMSTAT ComStat ClearCommError(m_hCom,&dwErrorFlags,&ComStat); 这个函数用于清除硬件错误和获取状态(我是的重叠操作) 我WriteFile后,ReadFile前怎么这个结构的cboutbuf永远是0,为什么不是我写入的字节 单步调试N此不知为何?恭请高手解 ...…

查看全部问答>

请问有人做过GPU?

有没有人设计过GPU?我想看看这方面的资料,可不可以告知一下,或者给个资料的地址也可以! 谢谢! 只要资料好,分不够可以加分!…

查看全部问答>

at88sc0104加密芯片里的一段代码,请高手指点啊

这是初始化的一段代码,我初始化后,再往芯片发送随机数就不成功,我怀疑是初始化后熔断了熔丝造成的, 熔丝代码: ucData[0]= (uchar)CM_FAB;         ucReturn = cm_BurnFuse(ucData[0]);         i ...…

查看全部问答>

机顶盒界面开发咨询

请问各位大侠如何做比较酷的机顶盒界面(比如说立体按钮)? 用C或C++. 只能自己画吗? 有什么注意的地方? 谢谢了 …

查看全部问答>

DSP代码运行报错,求高人指点

cmd文件内一段代码如下: _EVENT72 = EVENT72;_EVENT73 = EVENT73;_EVENT74 = EVENT74;_EVENT75 = EVENT75;_EVENT76 = EVENT76;_EVENT77 = EVENT77;_EVENT78 = EVENT78; CCS 4内,debug运行后报错:   absolute symbol \"_EVENT72\" being ...…

查看全部问答>

STM8与51核变更定义区域比较(转贴)

                        stm8与51核变量定义区域比较: 1)idata与@tiny:   熟悉51核的都知道,idata是定义内部ram地址的,而stm8的@tin ...…

查看全部问答>

善解人意的聪明灯具

—推介几种LED智能照明产品 随着人们对绿色照明涵义的了解日益全面和深刻,随着“按需照明”理念被日益广泛地实践,迫切需要照明行业提供更为经济适用的终端产品,以满足不断增长的社会需求。 华威凯德照明科技(北京)有限公司正在不断推出LED ...…

查看全部问答>