找回密码
 立即注册
查看: 350|回复: 1

Ai8051U 与 LabVIEW 上位机实现 DHT11 数据采集

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:559
  • 最近打卡:2025-06-17 16:01:39
已绑定手机
已实名认证

46

主题

162

回帖

666

积分

高级会员

积分
666
发表于 2025-1-8 13:20:50 | 显示全部楼层 |阅读模式


Ai8051U 与 LabVIEW 上位机实现 DHT11 数据采集
本项目基于 Ai8051U 单片机设计,LabVIEW 上位机通过串口发送指令,单片机获取 DHT11 传感器采集环境温湿度数据,并反馈给上位机,完成数据的采集、显示和保存等。


介绍
本节给出项目所需的硬件和软件资料。


硬件
主控:Ai8051U-34K64 芯片


Board.jpg
软件
1.Keil C51



代码
  1. #include <AI8051U.h>
  2. #include <intrins.h>
  3. #include <stdio.h>
  4. #include "Config.h"
  5. #include "Delay.h"
  6. #include "DHT11.h"
  7. #include "UART.h"
  8. #define Temperature_COMMAND 0x10
  9. #define Humidity_COMMAND 0x11
  10. //u8 comdata[3]={0};
  11. void SendData();
  12. void receive_data(void);      //接收串口数据
  13. void test_do_data(void);      //测试串口数据是否正确,并更新数据
  14. /*-------------------- main ---------------------*/
  15. void main(void)
  16. {
  17.   P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
  18.         GPIO_Init();
  19.         UartInit();
  20.         ES = 1;
  21.         EA = 1;
  22.         
  23.         while(1)
  24.   {
  25.                 if(recv_flag==1)
  26.                 {
  27.                         recv_flag = 0;
  28.                         //DHT_Collect(); // 获取温湿度数据
  29.                         //printf("Temperature = %u.%uC\r\n",Temperature[0],Temperature[1]);//
  30.                         //printf("Humidity = %u.%u%%RH\r\n",Humidity[0],Humidity[1]);//
  31.                         receive_data();
  32.                         test_do_data();
  33.                 }
  34.   }
  35. }
  36. /*----------- Send temperature ----------------*/
  37. void SendTempData()
  38. {
  39.   u16 shi,ge,xiaoshu;
  40.         DHT_Collect();
  41.   shi = Temperature[0]/10 + '0';
  42.   ge = Temperature[0]%10 + '0';
  43.   xiaoshu = Temperature[1] + '0';
  44.   UartSend(shi);
  45.   UartSend(ge);
  46.   UartSend('.');
  47.   UartSend(xiaoshu);
  48.         UartSendStr("\r\n");
  49. }
  50. /*----------- Send humidity ----------------*/
  51. void SendHumiData()
  52. {
  53.   u16 shi,ge,xiaoshu;
  54.         DHT_Collect();
  55.   shi = Humidity[0]/10 + '0';
  56.   ge = Humidity[0]%10 + '0';
  57.   xiaoshu = Humidity[1] + '0';
  58.   UartSend(shi);
  59.   UartSend(ge);
  60.   UartSend('.');
  61.   UartSend(xiaoshu);
  62.         UartSendStr("\r\n");
  63. }
  64. /*--------------------- 数据接收与测试 ----------------------------*/
  65. void receive_data(void)      
  66. {
  67.   u16 i ;
  68.   for(i=0;i<3;i++)
  69.   {
  70.     comdata[i] = buffer; // 将缓冲的数据赋值给数组
  71.     delay_ms(2); // 延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失
  72.   }
  73. }
  74. void test_do_data(void) // 测试并执行命令
  75. {
  76.   if(comdata[0] == 0x55) //0x55和0xAA均为判断是否为有效命令
  77.   {
  78.     if(comdata[1] == 0xAA)
  79.     {
  80.       switch(comdata[2])
  81.       {
  82.                                 case Temperature_COMMAND:
  83.                                         SendTempData();
  84.                                 break;
  85.                                 case Humidity_COMMAND:
  86.                                         SendHumiData();
  87.                                 break;
  88.       }
  89.     }
  90.   }
  91. }
复制代码

完整工程见文末附件。


效果


串口助手
DHT11_UART.gif


LabVIEW 程序面板
DHT11_LabVIEW.gif


总结

本文介绍了使用 Ai8051U 单片机结合 LabVIEW 上位机,实现采集环境温湿度的项目设计,为相关行业在环境温湿度的自动化监测等需求方面提供了参考。




DHT11_LabVIEW.zip

42.32 KB, 下载次数: 24

MCU开发者和爱好者
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:555
  • 最近打卡:2025-06-16 20:07:38

21

主题

564

回帖

2866

积分

金牌会员

积分
2866
发表于 2025-1-8 15:18:42 | 显示全部楼层
搞得不错,
回复

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 18:59 , Processed in 0.126530 second(s), 55 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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