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

標(biāo)題: LABVIEW基于單片機(jī)串口的溫度顯示DS8B20并用文本保存 [打印本頁]

作者: lyh一點(diǎn)點(diǎn)    時(shí)間: 2020-4-28 11:00
標(biāo)題: LABVIEW基于單片機(jī)串口的溫度顯示DS8B20并用文本保存
這個(gè)是LABVIEW界面,DS18B20的傳感器接收溫度,給單片機(jī),單片機(jī)顯示并通過串口發(fā)送給LABVIEW,labview生成TXT文件,并保存歷史數(shù)據(jù)。壓縮包里的單片機(jī)程序。如果問題加群QQ:721277962(備注來自51黑)互相學(xué)習(xí)。單片機(jī)采用是51的單片機(jī),數(shù)碼管顯示。使用的時(shí)候一定要連接串口。


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

  3. sbit PS0=P2^4;//數(shù)碼管小數(shù)點(diǎn)后第1位   
  4. sbit PS1=P2^5;//數(shù)碼管個(gè)位   
  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í)函數(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); //進(jìn)制轉(zhuǎn)換函數(shù)
  15. void display(unsigned int a);//顯示函數(shù)

  16. float temp;//溫度寄存器
  17. bit DS18B20; //        18B20存在標(biāo)志,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;           //定時(shí)器1--方式2
  25.         //PCON=0x80;           //電源控制   19200
  26.         TL1=0xfd;            
  27.         TH1=0xfd;            //11.0592MHZ晶振,波特率為9600
  28.         SCON=0x50;           //方式1
  29.         TR1=1;               //啟動(dòng)定時(shí)
  30.                         
  31.                 temp=get_temper();//這段程序用于避開剛上電時(shí)顯示85的問題
  32.                 for(a=0;a<200;a++)
  33.                 delay(500);

  34.                 while(1)
  35.                 {
  36.                     temp=get_temper();//測(cè)量溫度
  37.                     for(a=0;a<100;a++)//顯示,兼有延時(shí)的作用
  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;   //溫度是負(fù)數(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 是因?yàn)橐A?位小數(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的子程序(有具體的時(shí)序要求)
  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); //延時(shí)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);  //延時(shí)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;//主機(jī)發(fā)出復(fù)位低脈沖
  155.                 DQ=0;
  156.                 delay(44);        //延時(shí)540US
  157.                 DQ=1;
  158.                 for(a=0;a<0x36&&DQ==1;a++)
  159.                 {
  160.                     a++;
  161.                     a--;        //等待DS18B20回應(yīng)
  162.                 }
  163.                 if(DQ)
  164.                         DS18B20=0;  //18B20不存在
  165.                 else
  166.                 {  
  167.                         DS18B20=1;  // 18B20存在
  168.                         delay(120); //復(fù)位成功!延時(shí)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ù)點(diǎn)后第1位
  182.         PS0=0;                 
  183.         PS1=1;
  184.         PS2=1;
  185.         PS3=1;
  186.         delay(200);
  187.         P_data=tab[(a>>4)&0x0f]|0x01; //顯示個(gè)位
  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;//恢復(fù)數(shù)據(jù)口
  201.     }


  202. /**************************十六進(jìn)制轉(zhuǎn)十進(jìn)制函數(shù)**************************/
  203. /*函數(shù)原型:uint htd(uint a)
  204. /*函數(shù)功能:十六進(jìn)制轉(zhuǎn)十進(jì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í)函數(shù)*********************************/
  226. /*函數(shù)原型:delay(unsigned int delay_time)
  227. /*函數(shù)功能:延時(shí)函數(shù)
  228. /*輸入?yún)?shù):delay_time (輸入要延時(shí)的時(shí)間)
  229. /*輸出參數(shù):無
  230. /*調(diào)用模塊:無
  231. /**********************************************************************/
  232. void delay(unsigned int delay_time)   //延時(shí)子程序
  233. {for(;delay_time>0;delay_time--)
  234. {}
  235.   }
復(fù)制代碼

作者: 13118302007    時(shí)間: 2020-9-12 23:36
可惜沒有附件?
作者: jerryzuohuang    時(shí)間: 2020-9-18 20:47
沒有看到附件,也想學(xué)習(xí)
作者: qhp777    時(shí)間: 2020-10-29 10:59
對(duì)新手來說,有參考意義




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 久久视频在线 | 日韩中文字幕在线播放 | 久久久久国产精品夜夜夜夜夜 | 涩久久| 亚洲欧美中文字幕 | 精品黑人一区二区三区国语馆 | 精品欧美一区二区三区久久久 | 成人做爰69片免费 | 亚洲欧美国产毛片在线 | 好色婷婷| 久久久久国产一区二区三区 | 成人激情视频网 | 久久精品视频网站 | 亚洲一区二区三区免费视频 | 在线网站免费观看18 | 日韩在线观看中文字幕 | 精品一区在线播放 | www.夜夜操| 久久免费观看视频 | 欧美特黄视频 | 国产综合第一页 | 日韩黄色一级 | 理论片中文字幕 | 一区在线观看 | 欧美中文字幕 | 亚洲成人免费网站 | 久在线视频| 一区二区视频在线播放 | 蜜桃成人在线 | 国产二区精品 | 中文字幕一区二区三区乱码 | 日本中文字幕一区 | 午夜成人在线视频 | 特黄aaaaaaaaa真人毛片 | 欧美又大又硬又粗bbbbb | 国产91热爆ts人妖系列 | 九色自拍| 国产主播99| 91在线视频免费 | 国产香蕉av| 欧美日韩精品一区二区 |