打印
[其他]

HC32L136 demo板 之五、LCD+AM2302

[复制链接]
1373|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
       本次实验就是在上次HC32L136 demo板LCD的实验基础上增加了AM2302温、湿度检测模块,也算是对LCD模块及其它已学习知识进行的一次巩固学习。
一、实验资源
1、HC32L136 demo板;
2、keil 5.28.0.0;
3、HC32L136 SDK支持包;
4、AM2302温、湿度检测模块;
更多资讯请访问https://www.hdsc.com.cn/mcu.htm

二、相关资源简介
1、LCD模块。关于该模块的学习见:HC32L136 demo板 之四、LCD https://bbs.21ic.com/icview-2843444-1-1.html
2、AM2302温、湿度传感器。AM2302较之前大家广泛使用的DHT11温、湿度传感器而言无论是在精度及准确度上要好很多,当然价格也贵了一些。模块是自制的,比较简陋。

三、本次实验
1、硬件连接
       AM2302模块接在了HC32L136 demo板的PB08引脚上,离VCC、GND较近,方便连线;



2、程序实现。实验中LCD程序是在上次实验基础上进行了修改,主要是对显示内容进行了调整,AM2302驱动程序来源于网络,我这只是进行了简单的移植。
主要代码如下:
/*************************************************************************
函数功能: 一次完整的数据传输为40bit,高位先出
输入参数: AM2302
返 回 值: 0:读取出错;1:读取成功           
说    明:8bit湿度整数 + 8bit湿度小数 + 8bit温度整数 + 8bit温度小数 + 8bit校验和                                         
**************************************************************************/
uint8_t ReadAM2302(AM2302_TypeDef *AM2302)
{  
  uint8_t temp;
  uint16_t hum_temp,tem_temp;
         
        AM2302_OUT();                        //将AM2302端口设置为输出模式       
        AM2302_Port_L();        //将AM2302端口拉低       
        delay1ms(18);                        //延时18ms       
        AM2302_Port_H();         //将AM2302端口拉高,主机延时30us   
        delay10us(0);                        //延时30us
        delay10us(0);       
       
        AM2302_IPU();                                                                                                                //将AM2302端口设置为输入,判断AM2302响应信号*/           
        if(AM2302_Read_Pin == FALSE)                                                 //判断AM2302是否有低电平响应信号,如不响应则跳出,响应则向下运行*/   
        {   
    while(AM2302_Read_Pin == FALSE);                        //等待AM2302发出的80us低电平响应信号结束*/      
    while(AM2302_Read_Pin == TRUE);                                //等待AM2302发出的80us高电平标置信号结束*/
      
    AM2302->humH8bit = AM2302_ReadByte();        //接收AM2302返回的数据
    AM2302->humL8bit = AM2302_ReadByte();
    AM2302->temH8bit = AM2302_ReadByte();
    AM2302->temL8bit = AM2302_ReadByte();
    AM2302->check    = AM2302_ReadByte();
   
    AM2302_OUT();                                //读取AM2302返回的数据后将AM2302端口改为输出模式   
    AM2302_Port_H();                //将AM2302端口置高
      
    hum_temp = AM2302->humH8bit * 256 + AM2302->humL8bit;//处理湿度数据
    AM2302->hum = (float)hum_temp * 10; //数据扩大10倍,方便显示
               
    tem_temp = AM2302->temH8bit * 256 + AM2302->temL8bit;//处理温度数据
    AM2302->tem = (float)tem_temp * 10; //数据扩大10倍,方便显示   
      
    temp = AM2302->humH8bit + AM2302->humL8bit +
           AM2302->temH8bit + AM2302->temL8bit;//校验读取的数据
                                         
    if(AM2302->check == temp)
    {
      return TRUE;
    }
    else
      return FALSE;
        }       
        else
                return FALSE;
}
int32_t main(void)
{
        LCD_Config();
        AM2302_Init();

        //LCD_Display(3579);
        //LCD_FullDisp();                                                //全屏显示

        while(1)
        {
                if(ReadAM2302(&AM2302_DATA) == TRUE)
    {
                        DispHumi(AM2302_DATA.hum);//湿度
                        delay1ms(2000);
                        DispTemp(AM2302_DATA.tem);//温度
                        delay1ms(2000);
                }
                else
                        DispError();//错误
        }
}

四、实验结果
1、温度


2、湿度


3、传感器错误


五、总结
       通过这次实验对LCD模块有了更进一步的认识,接下来继续。

使用特权

评论回复
沙发
smartpower| | 2019-8-19 21:46 | 只看该作者

使用特权

评论回复
板凳
wiba| | 2019-9-9 16:24 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
地板
zljiu| | 2019-9-9 16:32 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
5
lisingch|  楼主 | 2019-9-9 16:42 | 只看该作者

使用特权

评论回复
6
lisingch|  楼主 | 2019-9-9 16:42 | 只看该作者
wiba 发表于 2019-9-9 16:24
非常感谢楼主分享

互相学习!

使用特权

评论回复
7
lisingch|  楼主 | 2019-9-9 16:43 | 只看该作者
zljiu 发表于 2019-9-9 16:32
非常感谢楼主分享

互相学习!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

14993

帖子

17

粉丝