lijinlei 发表于 2025-1-8 13:20:50

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



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

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

硬件
主控:Ai8051U-34K64 芯片
开发板:Ai8051U多功能学习板
软件
1.Keil C51
2.AIapp-ISP-V6.95E
3.NI LabVIEW 2024 x64
代码
#include <AI8051U.h>
#include <intrins.h>
#include <stdio.h>
#include "Config.h"
#include "Delay.h"
#include "DHT11.h"
#include "UART.h"

#define Temperature_COMMAND 0x10
#define Humidity_COMMAND 0x11
//u8 comdata={0};

void SendData();
void receive_data(void);      //接收串口数据
void test_do_data(void);      //测试串口数据是否正确,并更新数据
/*-------------------- main ---------------------*/
void main(void)
{
P_SW2 |= 0x80; //扩展寄存器(XFR)访问使能
      GPIO_Init();
      UartInit();
      ES = 1;
      EA = 1;
      
      while(1)
{
                if(recv_flag==1)
                {
                        recv_flag = 0;
                        //DHT_Collect(); // 获取温湿度数据
                        //printf("Temperature = %u.%uC\r\n",Temperature,Temperature);//
                        //printf("Humidity = %u.%u%%RH\r\n",Humidity,Humidity);//
                        receive_data();
                        test_do_data();
                }
}
}

/*----------- Send temperature ----------------*/
void SendTempData()
{
u16 shi,ge,xiaoshu;
      DHT_Collect();
shi = Temperature/10 + '0';
ge = Temperature%10 + '0';
xiaoshu = Temperature + '0';
UartSend(shi);
UartSend(ge);
UartSend('.');
UartSend(xiaoshu);
      UartSendStr("\r\n");
}

/*----------- Send humidity ----------------*/
void SendHumiData()
{
u16 shi,ge,xiaoshu;
      DHT_Collect();
shi = Humidity/10 + '0';
ge = Humidity%10 + '0';
xiaoshu = Humidity + '0';
UartSend(shi);
UartSend(ge);
UartSend('.');
UartSend(xiaoshu);
      UartSendStr("\r\n");
}

/*--------------------- 数据接收与测试 ----------------------------*/
void receive_data(void)      
{
u16 i ;
for(i=0;i<3;i++)
{
    comdata = buffer; // 将缓冲的数据赋值给数组
    delay_ms(2); // 延时一会,让串口缓存准备好下一个字节,不延时可能会导致数据丢失
}
}

void test_do_data(void) // 测试并执行命令
{
if(comdata == 0x55) //0x55和0xAA均为判断是否为有效命令
{
    if(comdata == 0xAA)
    {
      switch(comdata)
      {
                              case Temperature_COMMAND:
                                        SendTempData();
                              break;
                              case Humidity_COMMAND:
                                        SendHumiData();
                              break;
      }
    }
}
}
完整工程见文末附件。

效果


串口助手

LabVIEW 程序面板

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



wangxiangtan 发表于 2025-1-8 15:18:42

搞得不错,
页: [1]
查看完整版本: Ai8051U 与 LabVIEW 上位机实现 DHT11 数据采集