国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee

 找回密碼
 注冊
搜索

LabVIEW讀取和顯示溫度曲線 51單片機做下位機

[復制鏈接]
樓主
coolfire 發表于 2020-12-12 23:09:09 | 只看該作者 |只看大圖 |倒序瀏覽 |閱讀模式
運行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熱敏電阻的電壓,需要轉換為電阻,最終轉換為溫度,并用數值顯示控件和波形圖表顯示出來
LabVIEW讀取和顯示溫度曲線 51單片機做下位機 1.png LabVIEW讀取和顯示溫度曲線 51單片機做下位機 2.png

51單片機部分代碼:完整代碼見附件
  1. #include<reg52.h>
  2. #include "pcf8591.h"
  3. #define uchar unsigned char

  4. #define COMMAND_ACTIVE  0     //開始采樣命令
  5. #define COMMAND_DEACTIVE   1         //停止采樣命令
  6. #define COMMAND_CONFIG 2         //配置采樣間隔
  7. #define TL0_X (65536-50000)%256    //T0定時50ms
  8. #define TH0_X (65536-50000)/256
  9. uchar interval = 1; //采樣間隔,單位:s,默認為1,范圍:1~255
  10. uchar is_enable = 0; //通道使能標志:1-使能 0-禁止
  11. sbit led_uart_rx = P1^7; //串口RX指示燈,收到字節數據取反
  12. sbit led_uart_tx = P1^6; //串口TXD發送指示燈,發送2個字節取反
  13. sbit led_ad_is_working  = P1^5; //AD0使能指示
  14. void init_timer0(); //初始化T0
  15. void init_uart();   //初始化串口
  16. void send_ad_data(uchar channel, uchar *pData); //通過串口發送采樣數據
  17. void uart_sendonechar(unsigned char c);         //串口發送一個字節數據函數聲明
  18. void delayms(unsigned int n);            //ms級延時函數聲明
  19. void main()
  20. {
  21.         uchar channel_tick = 0;
  22.         uchar nTick = 0; //中斷計數
  23.         uchar nChannel = 1;  //通道號 通道號: 0-光敏電阻   1-熱敏電阻NTC  2-分壓電阻W5 3-分壓電阻W6
  24.         uchar start = 0;     //啟動轉換標志,1-啟動,0-禁止
  25.         uchar ADtemp; //采樣數據
  26.         init_uart();  //初始化串口
  27.         init_timer0(); //初始化T0,但不啟動

  28.          while(1)
  29.         {

  30.                  while(TF0==0);
  31.                  TF0 = 0;
  32.                  TL0 = TL0_X; //賦初值
  33.                  TH0 = TH0_X;  
  34.              nTick = nTick + 1; //中斷次數+1
  35.                   if(nTick==20) //1s定時到
  36.                   {
  37.                      nTick = 0; //清零
  38.                      if(is_enable == 1) //如果使能,則判斷采樣間隔是否到,到則啟動一次采樣
  39.                          {
  40.                              channel_tick = channel_tick + 1;
  41.                                  if(interval == channel_tick)
  42.                                     {
  43.                                           start = 1; //啟動一次采樣
  44.                                           channel_tick =0; //清零計數
  45.                                         }
  46.                          }
  47.                
  48.              if(start == 1) //啟動采樣
  49.                  {
  50.                     start = 0; //清零采樣啟動標志
  51.                         ADtemp = ReadADC(1);      //讀取采樣數據
  52.                         send_ad_data(1,&ADtemp);  //發送采樣數據
  53.                         led_uart_tx = ~led_uart_tx; //串口發送指示燈亮
  54.                         delayms(1); //延時1ms  ADC一次轉換時間為90us,必須等待轉換完成,在讀取
  55.                                     //單片機機器周期為1us@12MHz,速度比ADC塊,必須等待
復制代碼
51單片機程序uart-ADC.zip (50.13 KB, 售價: 2 E幣)

labview工程.zip (39.24 KB, 售價: 2 E幣)

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規則

手機版|小黑屋|ELEOK |網站地圖

GMT+8, 2026-5-26 02:12

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回復 返回頂部 返回列表