【CH579M-R1】+DHT22温湿度检测
<p>前面主要介绍了基于模拟信号的传感器使用,本次说一说数字式传感器的使用,作为数字式传感器它也有许多种,</p><p>如温湿度传感器、光强度传感器、气温气压传感器等。</p>
<p>DHT22是一种检测检测常规状态下温湿度的传感器,它采用单总线结构,因此十分节省系统资源。</p>
<p>DHT22的采集精度要高于DHT11,它的精度可达小数点后1位,而DHT11只能到整数位。</p>
<p>由于是采用单总线工作,这一条线既要能输出,又要能输入。</p>
<p>在这里,是使用PA12来与DHT22的DAT引脚相连。</p>
<p>使其输出高低电平和进行输入的语句如下:</p>
<p>#define DHT11_D0_H GPIOA_SetBits( GPIO_Pin_12 )</p>
<p>#define DHT11_D0_L GPIOA_ResetBits( GPIO_Pin_12 )</p>
<p>#define DHT11_D0_R GPIOA_ReadPortPin( GPIO_Pin_12 )</p>
<p>配置引脚为输入/输出功能的函数为:</p>
<pre>
<code class="language-cpp">void DHT11_IO_IN(void)
{
GPIOA_ModeCfg( GPIO_Pin_12, GPIO_ModeIN_PU );
}
void DHT11_IO_OUT(void)
{
GPIOA_ModeCfg( GPIO_Pin_12, GPIO_ModeOut_PP_5mA );
}</code></pre>
<p> </p>
<p>显示温湿度值的主程序为:</p>
<pre>
<code class="language-cpp">int main()
{
u8 senflag;
mDelaymS(100);
OLED_Init();
OLED_Clear();
OLED_ShowString(0,0,"CH579M TEST",16);
OLED_ShowString(0,2,"DHT22_OLED",16);
senflag=DHT11_Init();
if(senflag) OLED_ShowString(64,0,"NO SEN!",16);
else OLED_ShowString(64,0,"SEN OK!",16);
while(1)
{
if(!senflag)
{
OLED_ShowString(0,2,"T= . C ",16);
OLED_ShowString(64,2,"H= . %",16);
DHT11_Read_Data();
OLED_ShowNum(16,2,temperature/10,2,16);
OLED_ShowNum(40,2,(temperature%10),1,16);
OLED_ShowNum(80,2,humidity/10,2,16);
OLED_ShowNum(104,2,(humidity%10),1,16);
}
mDelaymS(1000);
}
}</code></pre>
<p> </p>
<p>经编译、下载,其运行效果如下图所示。</p>
<p></p>
<p>温湿度检测效果图</p>
给你点赞,谢谢分享 powerlove 发表于 2020-9-30 08:51
给你点赞,谢谢分享
<p>感谢支持!</p>
这个资料比较实用给你点赞,谢谢楼主无私的分享。。。。 powerlove 发表于 2020-10-2 21:40
这个资料比较实用给你点赞,谢谢楼主无私的分享。。。。
<p>有朋友真好!!!</p>
<p><a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html" target="_blank">沁恒CH579M-R1开发板测评</a></p>
<p>汇总贴:<a href="https://bbs.eeworld.com.cn/thread-1140005-1-1.html">https://bbs.eeworld.com.cn/thread-1140005-1-1.html</a></p>
<p>楼主能求下您的工程源码吗</p>
页:
[1]