DHT11原理:https://blog.csdn.net/x1131230123/article/details/103665953
部分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屏幕上。
cint 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);
}
}
}
源码:dt3.8tupian.net/2/28880a17b9990.pg3
串口端:
部分c代码:
这段代码是一个包含了温湿度传感器DHT11的微控制器程序。主要功能是读取并显示DHT11传感器测量到的温度和湿度数据。
首先,代码初始化了系统时钟和外设。然后进入一个循环中,不断读取DHT11传感器的数据,并将数据显示在OLED屏幕上。
在循环中,通过调用start_DHT11函数启动DHT11传感器的测量过程。如果测量成功,将测量到的温度和湿度数据存储在dis数组中,并通过OLED_ShowString函数在OLED屏幕上显示出来。
同时,通过Print_Str函数将温湿度数据打印到串口上。
最后,通过delay_ms函数延时2秒,然后再进行下一次的测量和显示。
需要注意的是,该代码在运行之前需要先调用OLED_Init函数进行OLED屏幕的初始化操作。
cint 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);
}
}
}
源码:dt1.8tupian.net/2/28880a16b9990.pg3
csharphttps://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!