找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 559|回复: 0
打印 上一主题 下一主题
收起左侧

基于STM32CUBEMX+DHT11+LCD1602温湿度远程监测系统Proteus仿真

[复制链接]
跳转到指定楼层
楼主
        项目基于STM32CUBEMX配置环境,结合PROTEUS仿真软件,实现了STM32F103C8T6实时读取DHT11温湿度数据,在串口终端显示并且在LCD1602液晶屏上进行显示。        对项目的操作步骤进行了详细记录,见附件《Proteus  stm32f103C8T6_dht11_lcd1602_hal 过程文档》,完整的工程代码见附件压缩包。

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. /* USER CODE BEGIN PV */
  2. uint8_t DHT11Flag = 1;        // DHT11Flag==0表示DHT11存在
  3. uint8_t TempData;//温度数据
  4. uint8_t HumiData;//湿度数据

  5. // 定义全局字符串变量
  6. const char g_send_str[] = "Demo Data Acquisition!\r\n";
  7. const char g_exist_str[] = "DHT11 exist!\r\n";
  8. const char g_no_exist_str[] = "DHT11 not exist!\r\n";

  9. char TempStr[16]; // 用于存储温度的字符串形式
  10. char HumiStr[16]; // 用于存储湿度的字符串形式

  11. uint8_t uart_buf[64]; // 扩大缓冲区预留余量
  12. uint16_t buf_len;
  13. /* USER CODE END PV */

  14. /* Private function prototypes -----------------------------------------------*/
  15. void SystemClock_Config(void);
  16. /* USER CODE BEGIN PFP */

  17. /* USER CODE END PFP */

  18. /* Private user code ---------------------------------------------------------*/
  19. /* USER CODE BEGIN 0 */

  20. /* USER CODE END 0 */

  21. /**
  22.   * @brief  The application entry point.
  23.   * @retval int
  24.   */
  25. int main(void)
  26. {

  27.   /* USER CODE BEGIN 1 */

  28.   /* USER CODE END 1 */

  29.   /* MCU Configuration--------------------------------------------------------*/

  30.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  31.   HAL_Init();

  32.   /* USER CODE BEGIN Init */

  33.   /* USER CODE END Init */

  34.   /* Configure the system clock */
  35.   SystemClock_Config();

  36.   /* USER CODE BEGIN SysInit */

  37.   /* USER CODE END SysInit */

  38.   /* Initialize all configured peripherals */
  39.   MX_GPIO_Init();
  40.   MX_USART1_UART_Init();
  41.   MX_TIM1_Init();
  42.   /* USER CODE BEGIN 2 */
  43.         HAL_UART_Transmit(&huart1,(uint8_t *)&"Demo Data Acquisition!\r\n",25,10);
  44.                              //串口1输出打印字符串,25个字符长度,超时时间10ms
  45.                                                                                          
  46.         LCD_Init();
  47.         LCD_Puts(0,0,"DHT11 Data Acquisition!");
  48.         HAL_Delay(500);
  49.         LCD_Clear();

  50.         if(DHT11Flag==1) //先获得DHT11传感器响应
  51.         {
  52.                 DHT11_Rst();
  53.                 DHT11Flag = DHT11_Check();
  54.                 if(DHT11Flag ==0)
  55.                         HAL_UART_Transmit(&huart1, (uint8_t *)g_exist_str, strlen(g_exist_str), 10);
  56.                 else
  57.                         HAL_UART_Transmit(&huart1, (uint8_t *)g_no_exist_str, strlen(g_no_exist_str), 10);
  58.         }
  59.         HAL_Delay(500);

  60. /* USER CODE END 2 */                                                                                 
  61.   /* USER CODE END 2 */

  62.   /* Infinite loop */
  63.   /* USER CODE BEGIN WHILE */
  64.   while (1)
  65.   {
  66.                
  67.                 if(DHT11Flag ==0)
  68.                 {
  69.                         if(DHT11_Read_Data(&TempData,&HumiData)==0)//正常读取DHT11
  70.                         {
  71.                                 //用len=nsprintf格式化(第二个参数64是缓冲区最大长度,避免溢出)
  72.                                 buf_len = snprintf((char*)uart_buf, sizeof(uart_buf), "Temperature:%d,Humidity:%d\r\n", TempData, HumiData);
  73.                                 //发送(仅发送实际格式化后的长度,而非整个缓冲区)
  74.                                 HAL_UART_Transmit(&huart1, uart_buf, buf_len, HAL_MAX_DELAY);
  75.                                
  76.                                 sprintf(TempStr, "Temperature %d", TempData); // 构造温度字符串
  77.                                 sprintf(HumiStr, "Humidity %d", HumiData); // 构造湿度字符串
  78.                                 LCD_Puts(0,0,TempStr);
  79.                                 LCD_Puts(0,1,HumiStr);
  80.                         }
  81.                 }
  82.                 HAL_Delay(1000);
  83.     /* USER CODE END WHILE */

  84.     /* USER CODE BEGIN 3 */
  85.   }
  86.   /* USER CODE END 3 */
  87. }
复制代码


Proteus stm32f103C8T6_dht11_lcd1602_hal.7z

384.34 KB, 下载次数: 0, 下载积分: 黑币 -5

Proteus stm32f103C8T6_dht11_lcd1602_hal 过程文档.pdf

3.44 MB, 下载次数: 0, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表