190|2

9

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

AT32VH407获取温湿度传感器并显示 [复制链接]

 

屏幕使用0.96寸OLED屏幕,PIN61连接到I2C0_SCL,PIN62连接到I2C_SDA

温湿度传感器使用DHT11,DATA线连接到PIN_59,并添加上拉电阻

 

oled屏幕驱动程序由 TL-LED 提供(帖子附件下载),原帖地址【AG32VH407开发板】硬件i2c方式驱动oled显示屏 - 国产芯片交流 - 电子工程世界-论坛

温湿度传感器部分源码

  • #include "board.h"
  • #include "gpio.h"
  • #include "timer/mtimer.h"
  • #include "dh11/dh11.h"
  • #include "oled/oled.h"
  • char Humidity[2]; // 储存湿度数据
  • char Temperature[2]; // 储存温度度数据
  • void DH11_set_heigh(void)
  • {
  • GPIO_SetValue(DH11_GPIO, DH11_GPIO_BITS, 1);
  • }
  • void DH11_set_low(void)
  • {
  • GPIO_SetValue(DH11_GPIO, DH11_GPIO_BITS, 0);
  • }
  • uint8_t DH11_get_value(void)
  • {
  • GPIO_GetValue(DH11_GPIO, DH11_GPIO_BITS);
  • }
  • /*
  • 主机(单片机)发送起始信号:
  • 1.主机先拉高data。
  • 2.拉低data延迟18ms。
  • 3.拉高data并延迟等待(通过此操作将单片机引脚设置为输入)。
  • */
  • void DHT11_start()
  • {
  • DH11_set_heigh;
  • mstimer_delay_us(2);
  • DH11_set_low;
  • mstimer_delay_ms(25); // 拉低延时18ms以上
  • DH11_set_heigh;
  • mstimer_delay_us(30); // 拉高 延时 20~40us,取中间值 30us
  • }
  • /*------------------------------------------------
  • 接收八位二进制
  • ------------------------------------------------*/
  • unsigned char DHT11_rec_byte() // 接收一个字节
  • {
  • unsigned char i, dat = 0;
  • for (i = 0; i < 8; i++) // 从高到低依次接收8位数据
  • {
  • while (DH11_get_value == 0)
  • ; // 等待进入低电平
  • while (DH11_get_value() == 1)
  • ; // 等待50us低电平过去
  • mstimer_delay_us(60); // 延时60us,如果还为高则数据为1,否则为0
  • dat <<= 1; // 移位(低位补零)使正确接收8位数据,数据为0时直接移位
  • if (DH11_get_value() == 1) // 数据为1时,使dat加1来接收数据1
  • dat += 1;
  • while (DH11_get_value == 0)
  • ; // 等待数据线拉低
  • }
  • return dat;
  • }

主程序

  • int main(void)
  • {
  • // This will init clock and uart on the board
  • board_init();
  • // The default isr table is plic_isr. The default entries in the table are peripheral name based like CAN0_isr() or
  • // GPIO0_isr(), and can be re-assigned.
  • plic_isr[BUT_GPIO_IRQ] = Button_isr;
  • // Any interrupt priority needs to be greater than MIN_IRQ_PRIORITY to be effective
  • INT_SetIRQThreshold(MIN_IRQ_PRIORITY);
  • // Enable interrupt from BUT_GPIO
  • INT_EnableIRQ(BUT_GPIO_IRQ, PLIC_MAX_PRIORITY);
  • init_mtimer(1);
  • init_oled();
  • oled_Temperature_init();
  • mstimer_delay_ms(100);
  • while (true)
  • {
  • /* code */
  • DHT11_receive();
  • mstimer_delay_ms(1000);
  • }
  • }

运行示例

  

 

oled.rar

6.33 KB, 下载次数: 1

OLED驱动函数

timer.rar

580 Bytes, 下载次数: 1

延时函数

最新回复

这个温湿度传感器相当不准啊,体积却很大   详情 回复 发表于 昨天 16:47
点赞 关注
 
 

回复
举报

7548

帖子

2

TA的资源

版主

沙发
 

我看开发板上的芯片不是AT的呀。

 
 
 

回复

26

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

这个温湿度传感器相当不准啊,体积却很大

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

猜你喜欢
随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
【干货上新】电源解决方案和技术第二趴 | DigiKey 应用探索站
当月好物、电源技术资源、特色活动、DigiKey在线实用工具,干货多多~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 13

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表