历史上的今天

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

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

发布者:数字思维 来源: 51hei关键字:单片机  DHT11  温湿度检测 手机看文章 扫描二维码
随时随地手机看文章

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

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

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

单片机电路原理图:

0.png 

蜂鸣器    蜂鸣器    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)

[1] [2] [3]
关键字:单片机  DHT11  温湿度检测 引用地址:单片机+DHT11温湿度检测程序

上一篇:单片机LCD12864无限扩展多级菜单源码
下一篇:带详细注释的51单片机CS1237电子秤源程序

推荐阅读

  “警察叔叔,这个机器人好可爱啊,它叫什么名字?”“它叫安安警官,正在协助我们执勤。”广州海珠警方在广州塔景区启用的-2000警用机器人上岗执勤,不少市民群众前来围观。   这位名为“安安警官”的警用机器人高1.6米,重80公斤,白胖圆润,可爱呆萌,身上贴有“警察”“POLICE”等警方标识。   “安安警官”的投入使用,是广州海珠警方坚...
一、ID获取34 设备电子签名电子签名存储在 Flash 区。可以使用 JTAG/SWD 或 CPU 对其进行读取。它包含出厂前编程 的标识数据,这些标识数据允许用户固件或其它外部设备将其接口与 STM32F4xx 微控制器 的特性自动匹配。34.1 唯一设备 ID 寄存器(96 位)唯一设备标识符最适合:● 用作序列号(例如 USB 字符串序列号或其它终端应用程序)...
据彭博社报道,三星电子正向下一代芯片业务投入1160亿美元,其中包括晶圆代工,押注其最终可以在两年后缩小与台积电的差距。 该韩国巨头将在2022年大规模生产3nm芯片,其晶圆代工部门一位高管在上月的一次仅受邀活动上告诉与会者。这一目标此前尚未公布,这意味着,它有望开始生产业内最先进的半导体。三星已经与主要合作伙伴一起开发初始设计工具,代工设...
精密数据采集(DAQ)系统在工业应用中深受欢迎。一些DAQ应用中需要低功耗和超低噪声。一个例子是地震传感器相关应用,从地震数据中可以提取大量信息,这些信息可用于广泛的应用,例如结构健康监测、地球物理研究、石油勘探甚至工业和家庭安全1。DAQ信号链要求地震检波器是将地振动信号转换成电信号的机电转换装置,适用于高分辨率地震勘探。它们沿着阵列被植...

史海拾趣

问答坊 | AI 解惑

PLC晶体管输出和继电器输出的区别zz

1.负载电压、电流类型不同负载类型:晶体管只能带直流负载,而继电器带交、直流负载均可。电流:晶体管电流0.2A-0.3A,继电器2A。电压:晶体管可接直流24V(一般最大在直流30V左右,继电器可以接直流24V或交流220V。2.负载能力不同晶体管带负载的能 ...…

查看全部问答∨

有用过Android的朋友吗,该怎么学

如题。Android挺火的,不知道如何入手。请教了…

查看全部问答∨

wince iimage encoder

有哪位大侠实现过wince iimage组件的encoder 目前小弟困在IImageEncoder::GetEncodeSink( IImageSink** sink) 的实现上, 小弟是先CreateNewBitmap 一个bitmap然后queryinterface 得到imagesink, 但是不知道CreateNewBitmap 中的 width, & ...…

查看全部问答∨

找朋友一起开发

本人目前做数字电视软件,不过看今后3G发展不错,想写一个嵌入式浏览器,它的特点是易移植,速度快,内存小。之前我的工作做过一点,主要要支持html4.0,js 1.5, css2等,可以分步骤开发。主要现在一个人太慢,并且时间还很有限。目前考虑开源或者 ...…

查看全部问答∨

北京微芯力科-大量ST-STM32现货到仓

北京微芯力科技术有限公司欢迎来电咨询:010-51581828010-51581825QQ:709357905EMAIL:casperwei@yeah.net…

查看全部问答∨

STM8S的硬SPI通不过

选择HSI做为主时钟,16MHz void CLK_Init(void) {     CLK_DeInit();     CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); } //SPI初始化 void SPI_MyInit(void) {     SPI_DeInit();     ...…

查看全部问答∨

求xilinx高手指点

 刚开始学xilinx,现在有很大问题解决不了,求高手指点,能不能留个QQ,在论坛里交流不方便,贴图很麻烦。QQ:707587938谢谢 …

查看全部问答∨

LaunchPadFirmwareUpdater2.0

------------------------------------------------------------------------------- Readme file for LaunchPadFirmwareUpdater2.0.exe LaunchPadFirmwareUpdater2.0.exe is a GUI based utility to update the emulator firmware of Texas Ins ...…

查看全部问答∨

《LDMOS晶体管耐用性和可靠性》

耐用性是射频应用领域中最重要的一项可靠性参数。恩智浦的第6代LDMOS晶体管几乎达到了无法损坏的地步。在名为《LDMOS晶体管耐用性和可靠性》的技术文章中,恩智浦的技术专家详细介绍了具体技术细节,查阅全文请点击链接并下载:http://www.nxp.com/ ...…

查看全部问答∨

为什么我这个板子一接485电源电压就会不稳定呢,只有3V,求大侠们帮忙

这个板子,也不知道是电源部分还是,485部分有问题,只要一连接485电源电压就出现不稳定,万用表量一下电源电压只剩3V,求解…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
  • ARM裸机篇--按键中断
    先看看GPOI的输入实验:按键电路图:GPF1管教的功能:EINT1要使用GPF1作为EINT1的功能时,只要将GPFCON的3:2位配置成10就可以了!GPF1先配 ...
  • 网上下的--ARM入门笔记
    简单的介绍打今天起菜鸟的ARM笔记算是开张了,也算给我的这些笔记找个存的地方。为什么要发布出来?也许是大家感兴趣的,其实这些笔记之所 ...
  • 学习ARM开发(23)
    三个任务准备与运行结果下来看看创建任务和任运的栈空间怎么样的,以及运行输出。Made in china by UCSDN(caijunsheng)Lichee 1 0 0 ...
  • 学习ARM开发(22)
    关闭中断与打开中断中断是一种高效的对话机制,但有时并不想程序运行的过程中中断运行,比如正在打印东西,但程序突然中断了,又让另外一个 ...
  • 学习ARM开发(21)
    先要声明任务指针,因为后面需要使用。 任务指针 volatile TASK_TCB* volatile g_pCurrentTask = NULL;volatile TASK_TCB* vol ...
  • 学习ARM开发(20)
  • 学习ARM开发(19)
  • 学习ARM开发(14)
  • 学习ARM开发(15)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved