久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4353|回復: 3
收起左側(cè)

LABVIEW基于單片機串口的溫度顯示DS8B20并用文本保存

[復制鏈接]
ID:210588 發(fā)表于 2020-4-28 11:00 | 顯示全部樓層 |閱讀模式
這個是LABVIEW界面,DS18B20的傳感器接收溫度,給單片機,單片機顯示并通過串口發(fā)送給LABVIEW,labview生成TXT文件,并保存歷史數(shù)據(jù)。壓縮包里的單片機程序。如果問題加群QQ:721277962(備注來自51黑)互相學習。單片機采用是51的單片機,數(shù)碼管顯示。使用的時候一定要連接串口。
11.png

單片機源程序如下:
  1. #include<reg51.h>  
  2. #include<intrins.h>

  3. sbit PS0=P2^4;//數(shù)碼管小數(shù)點后第1位   
  4. sbit PS1=P2^5;//數(shù)碼管個位   
  5. sbit PS2=P2^6;//數(shù)碼管十位           
  6. sbit PS3=P2^7;//數(shù)碼管百位
  7. sfr  P_data=0x80;//P0口為顯示數(shù)據(jù)輸出口
  8. sbit DQ=P3^6;//DS18B20數(shù)據(jù)接口

  9. void delay(unsigned int);//延時函數(shù)
  10. void DS18B20_init(void);   //DS18B20初始化
  11. unsigned int get_temper(void);    //讀取溫度程序
  12. void DS18B20_write(unsigned char in_data); //DS18B20寫數(shù)據(jù)函數(shù)
  13. unsigned char DS18B20_read(void);////讀取數(shù)據(jù)程序         
  14. unsigned int htd(unsigned int a); //進制轉(zhuǎn)換函數(shù)
  15. void display(unsigned int a);//顯示函數(shù)

  16. float temp;//溫度寄存器
  17. bit DS18B20; //        18B20存在標志,1---存在 0---不存在
  18.    
  19. unsigned char tab[10]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};//字段轉(zhuǎn)換表
  20.    
  21. void main(void)
  22.     {        
  23.             unsigned int a,temp;                                                         
  24.         TMOD=0x20;           //定時器1--方式2
  25.         //PCON=0x80;           //電源控制   19200
  26.         TL1=0xfd;            
  27.         TH1=0xfd;            //11.0592MHZ晶振,波特率為9600
  28.         SCON=0x50;           //方式1
  29.         TR1=1;               //啟動定時
  30.                         
  31.                 temp=get_temper();//這段程序用于避開剛上電時顯示85的問題
  32.                 for(a=0;a<200;a++)
  33.                 delay(500);

  34.                 while(1)
  35.                 {
  36.                     temp=get_temper();//測量溫度
  37.                     for(a=0;a<100;a++)//顯示,兼有延時的作用
  38.                             display(htd(temp));
  39.                         SBUF=(unsigned char)(temp>>8);                //將溫度發(fā)送給PC   
  40.             while(TI!=1);
  41.                         TI=0;                        
  42.                         SBUF=(unsigned char)temp;
  43.             while(TI!=1);
  44.                         TI=0;
  45.                 }
  46.     }

  47. /****************************DS18B20讀取溫度函數(shù)**************************/
  48. /*函數(shù)原型:void get_temper(void)
  49. /*函數(shù)功能:DS18B20讀取溫度
  50. /*輸入?yún)?shù):無
  51. /*輸出參數(shù):無
  52. /*調(diào)用模塊:
  53. /**********************************************************************/
  54. unsigned int get_temper(void)
  55.         {        
  56.             unsigned char k,T_sign,T_L,T_H;
  57.                 DS18B20_init();   //DS18B20初始化
  58.             if(DS18B20)    //判斷DS1820是否存在?若DS18B20不存在則返回
  59.                 {
  60.             DS18B20_write(0xcc);    // 跳過ROM匹配
  61.             DS18B20_write(0x44);  //發(fā)出溫度轉(zhuǎn)換命令
  62.                     DS18B20_init();   //DS18B20初始化
  63.                 if(DS18B20)    //判斷DS1820是否存在?若DS18B20不存在則返回
  64.                     {
  65.                 DS18B20_write(0xcc);//跳過ROM匹配
  66.                 DS18B20_write(0xbe);//發(fā)出讀溫度命令
  67.                                 T_L=DS18B20_read();//數(shù)據(jù)讀出
  68.                                 T_H=DS18B20_read();
  69.                                 k=T_H&0xf8;  
  70.                 if(k==0xf8)
  71.                     T_sign=1;   //溫度是負數(shù)
  72.                 else
  73.                     T_sign=0;  //溫度是正數(shù)
  74.                 T_H=T_H&0x07;
  75.                 temp=(T_H*256+T_L)*10*0.0625;  //溫度轉(zhuǎn)換常數(shù) 乘以10 是因為要保留1位小數(shù)
  76.                                 return (temp);
  77.             }
  78.         }

  79.         
  80.         }

  81. /****************************DS18B20寫數(shù)據(jù)函數(shù)**************************/
  82. /*函數(shù)原型:void DS18B20_write(uchar in_data)
  83. /*函數(shù)功能:DS18B20寫數(shù)據(jù)
  84. /*輸入?yún)?shù):要發(fā)送寫入的數(shù)據(jù)
  85. /*輸出參數(shù):無
  86. /*調(diào)用模塊:_cror_()
  87. /**********************************************************************/
  88. void DS18B20_write(unsigned char in_data) //寫DS18B20的子程序(有具體的時序要求)
  89.     {  
  90.         unsigned char i,out_data,k;
  91.         out_data=in_data;
  92.         for(i=1;i<9;i++)  //串行發(fā)送數(shù)據(jù)
  93.         {
  94.             DQ=0;
  95.                 DQ=1;
  96.                 _nop_();
  97.             _nop_();
  98.             k=out_data&0x01;
  99.                 if(k==0x01)  //判斷數(shù)據(jù)  寫1
  100.                 {
  101.                     DQ=1;
  102.             }
  103.                 else   //寫0
  104.             {
  105.                     DQ=0;
  106.                 }
  107.                 delay(4); //延時62us
  108.                 DQ=1;
  109.             out_data=_cror_(out_data,1);  //循環(huán)左移1位
  110.         }
  111.     }

  112. /**************************DS18B20讀函數(shù)**************************/
  113. /*函數(shù)原型:void DS18B20_read()
  114. /*函數(shù)功能:DS18B20讀數(shù)據(jù)
  115. /*輸入?yún)?shù):無
  116. /*輸出參數(shù):讀到的一字節(jié)內(nèi)容
  117. /*調(diào)用模塊:delay()
  118. /******************************************************************/
  119. unsigned char DS18B20_read()
  120.     {
  121.         unsigned char i,in_data,k;
  122.         in_data=0;
  123.         for(i=1;i<9;i++)  //串行發(fā)送數(shù)據(jù)
  124.         {
  125.             DQ=0;
  126.                 DQ=1;
  127.                 _nop_();
  128.                 _nop_();
  129.             k=DQ; //讀DQ端
  130.                 if(k==1)  //讀到的數(shù)據(jù)是1
  131.                 {
  132.                     in_data=in_data|0x01;
  133.                 }
  134.                 else
  135.                 {
  136.                     in_data=in_data|0x00;
  137.                 }
  138.                 delay(3);  //延時51us
  139.                 DQ=1;
  140.                 in_data=_cror_(in_data,1); //循環(huán)右移1位
  141.         }
  142.         return(in_data);
  143.     }

  144. /**************************DS18B20初始化函數(shù)**************************/
  145. /*函數(shù)原型:void DS18B20_init(void)
  146. /*函數(shù)功能:DS18B20初始化
  147. /*輸入?yún)?shù):無
  148. /*輸出參數(shù):無
  149. /*調(diào)用模塊:delay()
  150. /******************************************************************/  
  151. void DS18B20_init(void)
  152.     {
  153.             unsigned char a;
  154.               DQ=1;//主機發(fā)出復位低脈沖
  155.                 DQ=0;
  156.                 delay(44);        //延時540US
  157.                 DQ=1;
  158.                 for(a=0;a<0x36&&DQ==1;a++)
  159.                 {
  160.                     a++;
  161.                     a--;        //等待DS18B20回應
  162.                 }
  163.                 if(DQ)
  164.                         DS18B20=0;  //18B20不存在
  165.                 else
  166.                 {  
  167.                         DS18B20=1;  // 18B20存在
  168.                         delay(120); //復位成功!延時240US
  169.                 }
  170.     }
  171.          

  172. /**************************數(shù)碼管顯示函數(shù)**************************/
  173. /*函數(shù)原型:void display(void)
  174. /*函數(shù)功能:數(shù)碼管顯示
  175. /*輸入?yún)?shù):無
  176. /*輸出參數(shù):無
  177. /*調(diào)用模塊:delay()
  178. /******************************************************************/
  179. void display(unsigned int a)
  180.     {        
  181.         P_data=tab[a&0x0f];//顯示小數(shù)點后第1位
  182.         PS0=0;                 
  183.         PS1=1;
  184.         PS2=1;
  185.         PS3=1;
  186.         delay(200);
  187.         P_data=tab[(a>>4)&0x0f]|0x01; //顯示個位
  188.         PS0=1;                 
  189.         PS1=0;
  190.         delay(200);        
  191.         P_data=tab[(a>>8)&0x0f];//顯示十位
  192.         PS1=1;
  193.         PS2=0;
  194.         delay(200);
  195.         P_data=tab[(a>>12)&0x0f];//顯示百位
  196.         PS2=1;         
  197.         PS3=0;
  198.         delay(200);
  199.         PS3=1;
  200.         P_data=0xff;//恢復數(shù)據(jù)口
  201.     }


  202. /**************************十六進制轉(zhuǎn)十進制函數(shù)**************************/
  203. /*函數(shù)原型:uint htd(uint a)
  204. /*函數(shù)功能:十六進制轉(zhuǎn)十進制
  205. /*輸入?yún)?shù):要轉(zhuǎn)換的數(shù)據(jù)
  206. /*輸出參數(shù):轉(zhuǎn)換后的數(shù)據(jù)
  207. /*調(diào)用模塊:無
  208. /******************************************************************/
  209. unsigned int htd(unsigned int a)
  210.     {
  211.             unsigned int b,c;
  212.                 b=a%10;
  213.                 c=b;
  214.                 a=a/10;
  215.                 b=a%10;
  216.                 c=c+(b<<4);
  217.                 a=a/10;
  218.                 b=a%10;
  219.                 c=c+(b<<8);
  220.                 a=a/10;
  221.                 b=a%10;
  222.                 c=c+(b<<12);
  223.             return c;
  224.     }


  225. /*******************************延時函數(shù)*********************************/
  226. /*函數(shù)原型:delay(unsigned int delay_time)
  227. /*函數(shù)功能:延時函數(shù)
  228. /*輸入?yún)?shù):delay_time (輸入要延時的時間)
  229. /*輸出參數(shù):無
  230. /*調(diào)用模塊:無
  231. /**********************************************************************/
  232. void delay(unsigned int delay_time)   //延時子程序
  233. {for(;delay_time>0;delay_time--)
  234. {}
  235.   }
復制代碼
回復

使用道具 舉報

ID:110875 發(fā)表于 2020-9-12 23:36 | 顯示全部樓層
可惜沒有附件?
回復

使用道具 舉報

ID:816849 發(fā)表于 2020-9-18 20:47 | 顯示全部樓層
沒有看到附件,也想學習
回復

使用道具 舉報

ID:27536 發(fā)表于 2020-10-29 10:59 | 顯示全部樓層
對新手來說,有參考意義
回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久久院品网 | 欧美性网 | 性在线| 精品1区| 国产成人在线视频 | 久久专区 | 91一区二区三区 | 久久久久久久91 | 久久精品国产免费一区二区三区 | 中文久久| 成人免费黄视频 | 男女免费视频网站 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 成人二区| 国产精品毛片无码 | 少妇久久久| 久久美女视频 | 国产大学生情侣呻吟视频 | 日本黄色免费大片 | 亚洲国产成人精品女人久久久 | 看一级黄色毛片 | 亚洲v日韩v综合v精品v | 久久久久国产一级毛片高清网站 | 国产精品久久久久久高潮 | 国产丝袜一区二区三区免费视频 | 亚洲人成人一区二区在线观看 | 国产精品久久久久久久久久久久冷 | 日本精品视频 | 成人在线一区二区三区 | 日本视频免费观看 | 一区二区三区四区在线播放 | 青青草综合网 | 久久久亚洲精品视频 | 九九亚洲| 中文在线a在线 | 亚洲精品视频在线 | 久久午夜精品福利一区二区 | 久久国产一区二区三区 | 色视频网站| 欧美做暖暖视频 | 国产不卡一 |