|
|
項目基于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 */
- }
復制代碼
|
評分
-
查看全部評分
|