
基于STM32的DHT11温湿度采集Proteus 8.9仿真(仿真图+程序)
今天咱们来折腾一个基于STM32的温湿度采集仿真。这玩意儿用Proteus 8.9搭的硬件环境,代码用
Keil5写的C语言程序,重点解决DHT11传感器数据读取和双屏显示的问题。
先看硬件连接(直接在Proteus里拖元件就行):
- STM32F103C8核心板
- DHT11接PA1引脚
- 16x2 LCD接PB12-PB15(四线模式节省IO)
- Virtual Terminal接USART1用来显示串口数据
重点在DHT11的驱动代码。这个传感器对时序要求贼严格,建议用寄存器直接操作GPIO。上段关键代
码:
```c
//DHT11启动信号
void DHT11_Start(void){
GPIOA->CRL &= 0xFF0FFFFF; //PA1推挽输出
GPIOA->ODR &= ~(1<<1); //拉低18ms
delay_ms(18);
GPIOA->ODR |= (1<<1); //拉高20-40us
delay_us(30);
GPIOA->CRL |= 0x00800000; //切换为浮空输入
}
```
这段代码有几个坑要注意:
1. 拉低时间必须≥18ms(实测16ms会读取失败)
2. 切换输入模式前要确保总线释放
3. 接收数据时用while循环等待电平变化要加超时退出
数据解析部分用状态机更靠谱,不过新手可以直接用延时实现:
```c
//读取一个字节
uint8_t DHT11_ReadByte(){