当前位置:   article > 正文

MSP430 G2553 F5529 单片机 IIC OLED显示 DHT11 温湿度 串口发送 室内温湿度检测仪_5529 iic读取数据

5529 iic读取数据

DHT11原理

DHT11原理:https://blog.csdn.net/x1131230123/article/details/103665953

MSP430 G2553

在这里插入图片描述
部分c代码:
这段代码是一个嵌入式系统程序,采用C语言编写。它的作用是通过DHT11传感器获取温湿度数据,并将数据显示在OLED屏幕上。

下面是对代码的详细解释:

int main(void):定义了main函数,是程序的入口。

unsigned char dis[10];:定义了一个长度为10的无符号字符数组dis,用于存储要显示的字符串。

WDTCTL = WDTPW + WDTHOLD;:停止看门狗定时器,防止系统复位。

if (CALBC1_8MHZ == 0xFF):检查校准常量是否被擦除。

while (1);:如果校准常量被擦除,则进入死循环,陷入无限等待状态。

DCOCTL = 0;:选择最低的DCOx和MODx设置,即最低频率设置。

BCSCTL1 = CALBC1_8MHZ;:设置系统时钟频率为8MHz。

DCOCTL = CALDCO_8MHZ;:设置DCO步进和调制。

OLED_Init();:执行OLED初始化操作,准备显示数据。

OLED_ShowString(0, 0, “dht11:”);:在OLED屏幕的第一行显示"dht11:"。

while (1):进入一个无限循环,用于不断读取并显示温湿度数据。

if (start_DHT11()):如果启动DHT11传感器成功。

dis[0] = DHT11T_Data_H % 100 / 10 + ‘0’;:将温度数据的十位数转换为字符并存储在dis数组的第一个位置。

dis[1] = DHT11T_Data_H % 10 + ‘0’;:将温度数据的个位数转换为字符并存储在dis数组的第二个位置。

dis[2] = ‘C’;:存储字符’C’,表示摄氏度单位。

dis[3] = ’ ';:存储一个空格字符。

dis[4] = DHT11RH_Data_H % 100 / 10 + ‘0’;:将湿度数据的十位数转换为字符并存储在dis数组的第四个位置。

dis[5] = DHT11RH_Data_H % 10 + ‘0’;:将湿度数据的个位数转换为字符并存储在dis数组的第五个位置。

dis[6] = ‘%’;:存储字符’%',表示湿度的百分比符号。

dis[7] = 0;:在dis数组的末尾加上字符串结束符。

OLED_ShowString(0, 2, dis);:在OLED屏幕的第三行显示dis数组中的数据。

delay_ms(2000);:延时2秒,使程序每2秒读取一次温湿度数据。

以上就是这段代码的解释,它的功能是通过DHT11传感器获取温湿度数据,并将数据显示在OLED屏幕上。

int main(void)
{
    unsigned char dis[10];

    WDTCTL = WDTPW + WDTHOLD; /* Stop WDT */

    if (CALBC1_8MHZ == 0xFF) /* If calibration constant erased */
    {
        while (1)
            ; /* do not load, trap CPU!! */
    }
    DCOCTL = 0; /* Select lowest DCOx and MODx settings */
    BCSCTL1 = CALBC1_8MHZ; /* Set range */
    DCOCTL = CALDCO_8MHZ; /* Set DCO step + modulation * / */

    OLED_Init(); /* OLED初始化 */

    OLED_ShowString(0, 0, "dht11:");

    while (1)
    {
        if (start_DHT11())
        {
            dis[0] = DHT11T_Data_H % 100 / 10 + '0';
            dis[1] = DHT11T_Data_H % 10 + '0';
            dis[2] = 'C';
            dis[3] = ' ';
            dis[4] = DHT11RH_Data_H % 100 / 10 + '0';
            dis[5] = DHT11RH_Data_H % 10 + '0';
            dis[6] = '%';
            dis[7] = 0;
            OLED_ShowString(0, 2, dis);

            delay_ms(2000);
        }

    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39

源码:dt3.8tupian.net/2/28880a17b9990.pg3

MSP430 F5529

在这里插入图片描述
串口端:
在这里插入图片描述
部分c代码:

这段代码是一个包含了温湿度传感器DHT11的微控制器程序。主要功能是读取并显示DHT11传感器测量到的温度和湿度数据。

首先,代码初始化了系统时钟和外设。然后进入一个循环中,不断读取DHT11传感器的数据,并将数据显示在OLED屏幕上。

在循环中,通过调用start_DHT11函数启动DHT11传感器的测量过程。如果测量成功,将测量到的温度和湿度数据存储在dis数组中,并通过OLED_ShowString函数在OLED屏幕上显示出来。

同时,通过Print_Str函数将温湿度数据打印到串口上。

最后,通过delay_ms函数延时2秒,然后再进行下一次的测量和显示。

需要注意的是,该代码在运行之前需要先调用OLED_Init函数进行OLED屏幕的初始化操作。


int main(void)
{
    unsigned char dis[10];

    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

    UCSCTL3 = SELREF_2;                       // Set DCO FLL reference = REFO
    UCSCTL4 |= SELA_2;                        // Set ACLK = REFO
    UCSCTL0 = 0x0000;                         // Set lowest possible DCOx, MODx

    // Loop until XT1,XT2 & DCO stabilizes - In this case only DCO has to stabilize
    do
    {
        UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
        // Clear XT2,XT1,DCO fault flags
        SFRIFG1 &= ~OFIFG;                      // Clear fault flags
    }
    while (SFRIFG1 & OFIFG);                   // Test oscillator fault flag

    __bis_SR_register(SCG0);                  // Disable the FLL control loop
    UCSCTL1 = DCORSEL_5;                     // Select DCO range 16MHz operation
    UCSCTL2 |= 249;                           // Set DCO Multiplier for 8MHz
                                              // (N + 1) * FLLRef = Fdco
                                              // (249 + 1) * 32768 = 8MHz
    __bic_SR_register(SCG0);                  // Enable the FLL control loop

    // Worst-case settling time for the DCO when the DCO range bits have been
    // changed is n x 32 x 32 x f_MCLK / f_FLL_reference. See UCS chapter in 5xx
    // UG for optimization.
    // 32 x 32 x 8 MHz / 32,768 Hz = 250000 = MCLK cycles for DCO to settle
    __delay_cycles(250000);

    P4SEL |= BIT4 + BIT5;                       // P3.3,4 = USCI_A0 TXD/RXD
    UCA1CTL1 |= UCSWRST;                      // **Put state machine in reset**
    UCA1CTL1 |= UCSSEL_2;                     // SMCLK
    UCA1BR0 = 104;
    UCA1BR1 = 0;
    UCA1MCTL |= UCBRF_3 + UCBRS_0 + UCOS16;
    UCA1CTL1 &= ~UCSWRST;                   // **Initialize USCI state machine**
    //UCA1IE |= UCRXIE;                         // Enable USCI_A0 RX interrupt


    OLED_Init(); /* OLED初始化 */
    OLED_ShowString(0, 0, "dht11:");

    while (1)
    {
        if (start_DHT11())
        {
            dis[0] = DHT11T_Data_H % 100 / 10 + '0';
            dis[1] = DHT11T_Data_H % 10 + '0';
            dis[2] = 'C';
            dis[3] = ' ';
            dis[4] = DHT11RH_Data_H % 100 / 10 + '0';
            dis[5] = DHT11RH_Data_H % 10 + '0';
            dis[6] = '%';
            dis[7] = 0;
            OLED_ShowString(0, 2, dis);

            Print_Str("DHT11温湿度:\r\n");
            Print_Str(dis);
            Print_Str("\r\n");

            delay_ms(2000);
        }

    }
}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71

源码:dt1.8tupian.net/2/28880a16b9990.pg3

帮助、问询

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/606447
推荐阅读
相关标签
  

闽ICP备14008679号