MSP430F5529单片机DHT11温湿度检测仪,支持上限报警和单双击判定,配备OLED显示屏

文章目录

  • 功能
  • 接线示意图
  • 效果图
  • 原理
  • 帮助、问询
  • 功能

    硬件
    IIC OLED 0.96寸
    无源蜂鸣器 低电平触发
    DHT11 温湿度传感器
    板子上的2个按键
    板子上的2个灯

    功能:
    1 显示温湿度
    2 按键单击双击识别
    3 按键修改温湿度,双击选择某一个设置项目,单击进行加或者减
    4 温湿度任意一个数值大于设定值后蜂鸣器报警,P1.0小灯亮
    5 P4.7小灯一直闪烁 表示处于工作中

    接线示意图

    效果图

    原理

    部分代码:

    这段代码是一个温湿度报警仪系统的主程序,功能是通过连接DHT11温湿度传感器和OLED显示屏,实时监测环境的温度和湿度,并根据设定的温湿度上限进行报警。

    代码中首先包含了一些引用的头文件,然后定义了一些全局变量和宏定义。接下来是一些函数的声明。

    在main函数中,首先对时钟系统进行初始化,然后初始化OLED显示屏,显示初始界面。接着初始化LED灯和定时器,并开始主循环。

    主循环中,首先检查是否到达定时时间,并进行相应的处理。然后读取按键的值,如果有按键按下,则根据按键的值进行操作,并更新显示屏上的内容。最后通过延时等待一段时间后继续循环。

    其中,receive_init()函数用于初始化DHT11传感器,包括发出启动信号、接收温湿度数据并进行校验。receive()函数用于接收DHT11传感器发送的一个字节的数据。

    其他的函数包括一些初始化操作,例如初始化LED灯、1秒定时器、按键等,以及一些辅助函数用于处理数据和更新显示屏内容。

    总的来说,这段代码实现了一个简单的温湿度报警系统,通过DHT11传感器检测环境温湿度并根据设定的上限进行报警,同时通过OLED显示屏进行实时显示。

    /*
     * 主系统4MHZ smclk 1mhz aclk 32768HZ
     *
     * OLED  SCL--P3.0 SDA--P3.1 VCC--3.3V  GND--GND
     * beep DAT--P2.4 VCC--3.3V  GND--GND 无源 低电平触发
     * DHT11 DAT--P4.1  VCC--3.3 GND--GND
     * 注意 DHT11不是那种快速的传感器 是比较居家的那种
     *    读取DHT11的间隔时间要大于1s,不然这传感器工作不正常
     *    所以在程序里设定了2s钟 系统检测一次温湿度
     *    当程序下载后,需要断电系统重新上电,为了让DHT11重新上电工作。
     *
     *
     */
    #include <msp430.h>
    #include "OLED.h"
    #include "key.h"
    
    unsigned char warn_temp_h = 30, warn_humd_h = 50;
    unsigned char disp[16];
    char count = 0;
    unsigned char time, key, setting = 0;
    
    unsigned char over_flag = 0;
    
    #define CPU_F ( (double) 4000000)
    #define delay_us(x)   __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) ) /* 微秒延时程序 */
    #define delay_ms(x)   __delay_cycles( (long) (CPU_F * (double) x / 1000.0) )
    
    #define HIGH    P4OUT   |= BIT1
    #define LOW P4OUT   &= ~BIT1
    
    unsigned char temph, templ, humdh, humdl, check, cal;
    
    
    void main(void)
    {
        WDTCTL = WDTPW | WDTHOLD; /* Stop watchdog timer */
        CLOCK_INIT();
        OLED_Init(); /* OLED初始化 */
        oled_init_disp();
        init_led();
        init_1s_timer();
        oled_disp();
        init_key();
    
        _EINT();
        while (1)
        {
            if (over_flag)
            {
                _DINT();
                over_flag = 0;
                /* 如果读取到了 并且校验成功 */
                if (receive_init() == 1)
                {
                    oled_disp_dht11();
                    if ((humdh > warn_humd_h) || (temph > warn_temp_h))
                    {
                        P1OUT |= BIT0; /* 点亮 */
                        open_beep();
                    }
                    else
                    {
                        P1OUT &= ~BIT0; /* 熄灭 */
                        close_beep();
                    }
                }
                _EINT();
            }
            time++;
            if (time > 10)
            {
                time = 0;
                //p4.7
                P4OUT ^= BIT7;
            }
            delay_ms(10);
            key = get_key();
            if (key)
            {
                //显示按键
                count = 0;
                disp[count++] = key % 100 / 10 + '0';
                disp[count++] = key % 10 / 1 + '0';
                disp[count++] = 0;
                OLED_ShowString(0, 0, disp, 0);
    
                //处理按键
                do_key(key);
            }
        }
    }
    
    #pragma vector=TIMER1_A0_VECTOR
    __interrupt void TIMER1_A0()
    {
        over_flag = 1;
    }
    
    
    

    全部代码:dt2.8tupian.net/2/28880a20b16800.pg3

    帮助、问询

    https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
    

    作者:XD742971636

    物联沃分享整理
    物联沃-IOTWORD物联网 » MSP430F5529单片机DHT11温湿度检测仪,支持上限报警和单双击判定,配备OLED显示屏

    发表回复