|
|
项目基于STM32CUBEMX配置环境,结合PROTEUS仿真软件,实现了STM32F103C8T6实时读取DHT11温湿度数据,在串口终端显示并且在LCD1602液晶屏上进行显示。 对项目的操作步骤进行了详细记录,见附件《Proteus stm32f103C8T6_dht11_lcd1602_hal 过程文档》,完整的工程代码见附件压缩包。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:- /* USER CODE BEGIN PV */
- uint8_t DHT11Flag = 1; // DHT11Flag==0表示DHT11存在
- uint8_t TempData;//温度数据
- uint8_t HumiData;//湿度数据
- // 定义全局字符串变量
- const char g_send_str[] = "Demo Data Acquisition!\r\n";
- const char g_exist_str[] = "DHT11 exist!\r\n";
- const char g_no_exist_str[] = "DHT11 not exist!\r\n";
- char TempStr[16]; // 用于存储温度的字符串形式
- char HumiStr[16]; // 用于存储湿度的字符串形式
- uint8_t uart_buf[64]; // 扩大缓冲区预留余量
- uint16_t buf_len;
- /* USER CODE END PV */
- /* Private function prototypes -----------------------------------------------*/
- void SystemClock_Config(void);
- /* USER CODE BEGIN PFP */
- /* USER CODE END PFP */
- /* Private user code ---------------------------------------------------------*/
- /* USER CODE BEGIN 0 */
- /* USER CODE END 0 */
- /**
- * @brief The application entry point.
- * @retval int
- */
- int main(void)
- {
- /* USER CODE BEGIN 1 */
- /* USER CODE END 1 */
- /* MCU Configuration--------------------------------------------------------*/
- /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
- HAL_Init();
- /* USER CODE BEGIN Init */
- /* USER CODE END Init */
- /* Configure the system clock */
- SystemClock_Config();
- /* USER CODE BEGIN SysInit */
- /* USER CODE END SysInit */
- /* Initialize all configured peripherals */
- MX_GPIO_Init();
- MX_USART1_UART_Init();
- MX_TIM1_Init();
- /* USER CODE BEGIN 2 */
- HAL_UART_Transmit(&huart1,(uint8_t *)&"Demo Data Acquisition!\r\n",25,10);
- //串口1输出打印字符串,25个字符长度,超时时间10ms
-
- LCD_Init();
- LCD_Puts(0,0,"DHT11 Data Acquisition!");
- HAL_Delay(500);
- LCD_Clear();
- if(DHT11Flag==1) //先获得DHT11传感器响应
- {
- DHT11_Rst();
- DHT11Flag = DHT11_Check();
- if(DHT11Flag ==0)
- HAL_UART_Transmit(&huart1, (uint8_t *)g_exist_str, strlen(g_exist_str), 10);
- else
- HAL_UART_Transmit(&huart1, (uint8_t *)g_no_exist_str, strlen(g_no_exist_str), 10);
- }
- HAL_Delay(500);
- /* USER CODE END 2 */
- /* USER CODE END 2 */
- /* Infinite loop */
- /* USER CODE BEGIN WHILE */
- while (1)
- {
-
- if(DHT11Flag ==0)
- {
- if(DHT11_Read_Data(&TempData,&HumiData)==0)//正常读取DHT11
- {
- //用len=nsprintf格式化(第二个参数64是缓冲区最大长度,避免溢出)
- buf_len = snprintf((char*)uart_buf, sizeof(uart_buf), "Temperature:%d,Humidity:%d\r\n", TempData, HumiData);
- //发送(仅发送实际格式化后的长度,而非整个缓冲区)
- HAL_UART_Transmit(&huart1, uart_buf, buf_len, HAL_MAX_DELAY);
-
- sprintf(TempStr, "Temperature %d", TempData); // 构造温度字符串
- sprintf(HumiStr, "Humidity %d", HumiData); // 构造湿度字符串
- LCD_Puts(0,0,TempStr);
- LCD_Puts(0,1,HumiStr);
- }
- }
- HAL_Delay(1000);
- /* USER CODE END WHILE */
- /* USER CODE BEGIN 3 */
- }
- /* USER CODE END 3 */
- }
复制代码
|
评分
-
查看全部评分
|