LabVIEW读取和显示温度曲线 51单片机做下位机

运行VI程序。
(1)启动采样。通道号设置为1,采样间隔设置为1-255范围的数,命令类型设置为0,单击下发命令。下位机收到命令后,启动采样定时器,以设置的采样间隔读取AIN1通道,并上报。
(2)设置采样间隔。通道号设置为1,采样间隔设置为1-255范围的数,命令类型设置为2,单击下发命令。观察收到数据的频率,验证采样间隔是否改变。
(3)停止采样。通道号设置为1,采样间隔设置为1-255范围的任意数,命令类型设置为1,单击下发命令。
下位机上报数据为通道号+A/D转换值,所以截取字符串函数每次取一个字符,通道号对应偏移量为0的字符,A/D转换值为偏移量为1的字符。对于通道为1时,A/D转换值为NTC热敏电阻的电压,需要转换为电阻,最终转换为温度,并用数值显示控件和波形图表显示出来

51单片机部分代码:完整代码见附件

#include<reg52.h>
#include "pcf8591.h"
#define uchar unsigned char

#define COMMAND_ACTIVE  0     //开始采样命令
#define COMMAND_DEACTIVE   1         //停止采样命令
#define COMMAND_CONFIG 2         //配置采样间隔
#define TL0_X (65536-50000)%256    //T0定时50ms
#define TH0_X (65536-50000)/256
uchar interval = 1; //采样间隔,单位:s,默认为1,范围:1~255
uchar is_enable = 0; //通道使能标志:1-使能 0-禁止
sbit led_uart_rx = P1^7; //串口RX指示灯,收到字节数据取反
sbit led_uart_tx = P1^6; //串口TXD发送指示灯,发送2个字节取反
sbit led_ad_is_working  = P1^5; //AD0使能指示
void init_timer0(); //初始化T0
void init_uart();   //初始化串口
void send_ad_data(uchar channel, uchar *pData); //通过串口发送采样数据 
void uart_sendonechar(unsigned char c);         //串口发送一个字节数据函数声明
void delayms(unsigned int n);            //ms级延时函数声明
void main()
{
        uchar channel_tick = 0;
        uchar nTick = 0; //中断计数
        uchar nChannel = 1;  //通道号 通道号: 0-光敏电阻   1-热敏电阻NTC  2-分压电阻W5 3-分压电阻W6 
        uchar start = 0;     //启动转换标志,1-启动,0-禁止
        uchar ADtemp; //采样数据
        init_uart();  //初始化串口
        init_timer0(); //初始化T0,但不启动

         while(1)
        {

                 while(TF0==0);
                 TF0 = 0; 
                 TL0 = TL0_X; //赋初值
                 TH0 = TH0_X;  
             nTick = nTick + 1; //中断次数+1
                  if(nTick==20) //1s定时到
                  {
                     nTick = 0; //清零
                     if(is_enable == 1) //如果使能,则判断采样间隔是否到,到则启动一次采样
                         {
                             channel_tick = channel_tick + 1;
                                 if(interval == channel_tick)
                                    {
                                          start = 1; //启动一次采样
                                          channel_tick =0; //清零计数
                                        }
                         }
                
             if(start == 1) //启动采样
                 {
                    start = 0; //清零采样启动标志
                        ADtemp = ReadADC(1);      //读取采样数据
                        send_ad_data(1,&ADtemp);  //发送采样数据
                        led_uart_tx = ~led_uart_tx; //串口发送指示灯亮
                        delayms(1); //延时1ms  ADC一次转换时间为90us,必须等待转换完成,在读取
                                    //单片机机器周期为1us@12MHz,速度比ADC块,必须等待
暂无优惠

已有0人支付

1,本站所有资源来源于用户上传和网络搜集,如有侵权请邮件联系站长删除。
2,分享目的仅供大家个人的学习用途,请不要用于商业用途。
3,如果你也有好的源码或者教程,可以投稿到本站,采纳后有积分奖励。
4,本站提供的各类资源均不保证其可用性及完整性,也没有任何技术服务。
5,如有链接无法下载、失效、过期,请联系管理员处理。
6,本站资源部分需要积分只是赞助,仅用于本站服务器和日常运营所需,不提供任何技术支持。
快捷联系方式 Email:admin@lzbk.com QQ:361113272
蓝知博库 » LabVIEW读取和显示温度曲线 51单片机做下位机

提供最优质的资源集合

立即查看 了解详情