描述:
1、DHT11监测温室度,并显示到1602液晶上
2、通过串口打印(或通过蓝牙模块在手机上查看)
3、当温度大于24度时,开启继电器。小于时关闭继电器(继电器可连接风扇---假想O(∩_∩)O哈哈~)

1602引脚:
DHT11引脚:
继电器引脚:
- int main(void)
- {
-
- char msg[16];
-
- HAL_Init();
- SystemClock_Config();
- MX_GPIO_Init();
- MX_USART1_UART_Init();
-
- lcd_1602_init();
- show_line(0, 0, "loading...");
- while (1)
- {
- // 根据温度决定是否开启继电器
- if(datas[2] >= 24)
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_RESET);
- else
- HAL_GPIO_WritePin(GPIOB, GPIO_PIN_6, GPIO_PIN_SET);
- // 开启温湿度检测
- trig_dht();
- receive_data();
- memset(msg, 0, sizeof(msg));
- sprintf(msg, "Temp: %d.%d", datas[2], datas[3]);
- show_line(0, 0, msg);
- sprintf(msg, "Temp: %d.%d\r\n", datas[2], datas[3]);
- printf(msg);
-
- sprintf(msg, "Humi: %d.%d", datas[0], datas[1]);
- show_line(1, 0, msg);
- sprintf(msg, "Humi: %d.%d\r\n", datas[0], datas[1]);
- printf(msg);
- HAL_Delay(1000);
- }
- }
项目很简单,这里不过度解释。。。
void write_cmd(char cmd) {
RS_W_0();
RW_W_0();
EN_W_0();
WRITE_DATA(cmd);
delay_us(1); // 这里保持1us即可
EN_W_1();
delay_us(1000); // 这里时间要设置长些,否则不会显示,和51还有些不同
EN_W_0();
}