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

標(biāo)題: DS18B20測(cè)試程序 [打印本頁(yè)]

作者: maochunlei    時(shí)間: 2015-11-8 22:08
標(biāo)題: DS18B20測(cè)試程序
  1. #include<reg52.h>//52單片機(jī)頭文件,規(guī)定了52單片機(jī)的寄存器和IO口等
  2. #include<intrins.h>//_nop_空指令及左右循環(huán)移位子函數(shù)庫(kù)
  3. #include "DS18B20.h"
  4. #include "lcd1602.h"
  5. #include "ds1302.h"
  6. unsigned char code digit[10]={"0123456789"};     //定義字符數(shù)組顯示數(shù)字
  7. /************************************************************************
  8. 以下是DS18B20的操作程序
  9. ************************************************************************/
  10. sbit DQ=P3^5;
  11. unsigned char time;   //設(shè)置全局變量,專門(mén)用于嚴(yán)格延時(shí)
  12. /*****************************************************
  13. 函數(shù)功能:將DS18B20傳感器初始化,讀取應(yīng)答信號(hào)
  14. 出口參數(shù):flag
  15. ***************************************************/
  16. bit Init_DS18B20(void)     
  17. {
  18. bitflag;         //儲(chǔ)存DS18B20是否存在的標(biāo)志,flag=0,表示存在;flag=1,表示不存在
  19. DQ =1;           //先將數(shù)據(jù)線拉高
  20. for(time=0;time<2;time++) //略微延時(shí)約6微秒
  21.     ;
  22. DQ =0;           //再將數(shù)據(jù)線從高拉低,要求保持480~960us
  23. for(time=0;time<200;time++)  //略微延時(shí)約600微秒
  24.     ;         //以向DS18B20發(fā)出一持續(xù)480~960us的低電平復(fù)位脈沖
  25. DQ =1;           //釋放數(shù)據(jù)線(將數(shù)據(jù)線拉高)
  26. for(time=0;time<10;time++)
  27.     ;  //延時(shí)約30us(釋放總線后需等待15~60us讓DS18B20輸出存在脈沖)
  28. flag=DQ;          //讓單片機(jī)檢測(cè)是否輸出了存在脈沖(DQ=0表示存在)      
  29. for(time=0;time<200;time++)  //延時(shí)足夠長(zhǎng)時(shí)間,等待存在脈沖輸出完畢
  30.      ;
  31. return (flag);    //返回檢測(cè)成功標(biāo)志
  32. }
  33. /*****************************************************
  34. 函數(shù)功能:從DS18B20讀取一個(gè)字節(jié)數(shù)據(jù)
  35. 出口參數(shù):dat
  36. ***************************************************/
  37. unsigned char ReadOneChar(void)
  38. {
  39.                    unsignedchar i=0;   
  40.                    unsignedchar dat;  //儲(chǔ)存讀出的一個(gè)字節(jié)數(shù)據(jù)
  41.                    for(i=0;i<8;i++)
  42.                     {
  43.                      
  44.                       DQ =1;      // 先將數(shù)據(jù)線拉高
  45.                       _nop_();        //等待一個(gè)機(jī)器周期      
  46.                       DQ = 0;     //單片機(jī)從DS18B20讀書(shū)據(jù)時(shí),將數(shù)據(jù)線從高拉低即啟動(dòng)讀時(shí)序
  47.                             dat>>=1;
  48.                       _nop_();    //等待一個(gè)機(jī)器周期                     
  49.                       DQ = 1;    //將數(shù)據(jù)線"人為"拉高,為單片機(jī)檢測(cè)DS18B20的輸出電平作準(zhǔn)備
  50.                       for(time=0;time<2;time++)
  51.             ;      //延時(shí)約6us,使主機(jī)在15us內(nèi)采樣
  52.                       if(DQ==1)
  53.                          dat|=0x80;  //如果讀到的數(shù)據(jù)是1,則將1存入dat
  54.                             else                                 
  55.                                      dat|=0x00;//如果讀到的數(shù)據(jù)是0,則將0存入dat
  56.                         //將單片機(jī)檢測(cè)到的電平信號(hào)DQ存入r[i]
  57.                       for(time=0;time<8;time++)
  58.                               ;              //延時(shí)3us,兩個(gè)讀時(shí)序之間必須有大于1us的恢復(fù)期
  59.              }                           
  60.           return(dat);   //返回讀出的十進(jìn)制數(shù)據(jù)
  61. }
  62. /*****************************************************
  63. 函數(shù)功能:向DS18B20寫(xiě)入一個(gè)字節(jié)數(shù)據(jù)
  64. 入口參數(shù):dat
  65. ***************************************************/  
  66. WriteOneChar(unsigned char dat)
  67. {
  68.          unsignedchar i=0;
  69.          for(i=0; i<8; i++)
  70.                     {
  71.                      DQ =1;        // 先將數(shù)據(jù)線拉高
  72.                      _nop_();             //等待一個(gè)機(jī)器周期     
  73.                      DQ=0;         //將數(shù)據(jù)線從高拉低時(shí)即啟動(dòng)寫(xiě)時(shí)序      
  74.                      DQ=dat&0x01;   //利用與運(yùn)算取出要寫(xiě)的某位二進(jìn)制數(shù)據(jù),
  75.                        //并將其送到數(shù)據(jù)線上等待DS18B20采樣   
  76.                     for(time=0;time<10;time++)
  77.                         ;//延時(shí)約30us,DS18B20在拉低后的約15~60us期間從數(shù)據(jù)線上采樣
  78.                      DQ=1;          //釋放數(shù)據(jù)線                     
  79.                      for(time=0;time<1;time++)
  80.                               ;//延時(shí)3us,兩個(gè)寫(xiě)時(shí)序間至少需要1us的恢復(fù)期
  81.                      dat>>=1;       //將dat中的各二進(jìn)制位數(shù)據(jù)右移1位
  82.                     }
  83.            for(time=0;time<4;time++)
  84.                        ; //稍作延時(shí),給硬件一點(diǎn)反應(yīng)時(shí)間
  85. }
  86. /******************************************************************************
  87. 以下是與溫度有關(guān)的顯示設(shè)置
  88. ******************************************************************************/
  89. /*****************************************************
  90. 函數(shù)功能:顯示溫度符號(hào)
  91. ***************************************************/   
  92. /*void display_symbol(void)
  93. {
  94.             unsigned char i;
  95.                       write_com(0x80);    //寫(xiě)顯示地址,將在第1行第1列開(kāi)始顯示
  96.                                i = 0;                //從第一個(gè)字符開(kāi)始顯示
  97.                                      while(Temp!= '\0')  //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)
  98.                                      {                                                      
  99.                                                write_data(Temp);   //將字符常量寫(xiě)入LCD
  100.                                                i++;                 //指向下一個(gè)字符
  101.                                                delay1ms();        //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間
  102.                                      }        
  103. }
  104. */
  105. /*****************************************************
  106. 函數(shù)功能:顯示溫度的小數(shù)點(diǎn)
  107. ***************************************************/   
  108. void display_dot(void)
  109. {        
  110.          write_com(0x80+14);        //寫(xiě)顯示地址,將在第1行第9列開(kāi)始顯示            
  111.           write_data('.');      //將小數(shù)點(diǎn)的字符常量寫(xiě)入LCD
  112.           delay1ms();         //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間           
  113. }
  114. /*****************************************************
  115. 函數(shù)功能:顯示溫度的單位(C)
  116. ***************************************************/   
  117. /***void          display_cent(void)
  118. {
  119.           unsigned char i;   
  120.                      write_com(0x80+10);        //寫(xiě)顯示地址,將在第1行第10列開(kāi)始顯示
  121.                                i = 0;                    //從第一個(gè)字符開(kāi)始顯示
  122.                                      while(Cent!= '\0')     //只要沒(méi)有寫(xiě)到結(jié)束標(biāo)志,就繼續(xù)寫(xiě)
  123.                                       {                                             
  124.                                      write_data(Cent);     //將字符常量寫(xiě)入LCD
  125.                                                i++;                 //指向下一個(gè)字符
  126.                                                delay1ms();        //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間
  127.                                      }        
  128. } */
  129. /*****************************************************
  130. 函數(shù)功能:顯示溫度的整數(shù)部分
  131. 入口參數(shù):x
  132. ***************************************************/
  133. void display_temp1(unsigned char x)
  134. {
  135.    unsigned char k,l;       //j,k,l分別儲(chǔ)存溫度的百位、十位和個(gè)位
  136. /*j=x/100;                 //取百位   */
  137.          k=(x%100)/10;            //取十位
  138.          l=x%10;                  //取個(gè)位   */
  139.          write_com(0x80+12);      //寫(xiě)顯示地址,將在第1行第6列開(kāi)始顯示
  140. /*write_data(digit[j]);    //將百位數(shù)字的字符常量寫(xiě)入LCD         */
  141.    write_data(digit[k]);    //將十位數(shù)字的字符常量寫(xiě)入LCD
  142.          write_data(digit[l]);    //將個(gè)位數(shù)字的字符常量寫(xiě)入LCD        */
  143. }
  144. /*****************************************************
  145. 函數(shù)功能:顯示溫度的小數(shù)數(shù)部分
  146. 入口參數(shù):x
  147. ***************************************************/
  148. void display_temp2(unsigned char x)
  149. {
  150.         write_com(0x80+15);      //寫(xiě)顯示地址,將在第2行第11列開(kāi)始顯示
  151.          write_data(digit[x]);     //將小數(shù)部分的第一位數(shù)字字符常量寫(xiě)入LCD
  152.          delay1ms();          //延時(shí)1ms給硬件一點(diǎn)反應(yīng)時(shí)間
  153. }
  154. /*****************************************************
  155. 函數(shù)功能:做好讀溫度的準(zhǔn)備
  156. ***************************************************/
  157. void ReadyReadTemp(void)
  158. {
  159.        Init_DS18B20();     //將DS18B20初始化
  160.                    WriteOneChar(0xCC);// 跳過(guò)讀序號(hào)列號(hào)的操作
  161.                    WriteOneChar(0x44);// 啟動(dòng)溫度轉(zhuǎn)換           
  162.              for(time=0;time<100;time++)
  163.                      ;        //溫度轉(zhuǎn)換需要一點(diǎn)時(shí)間
  164.                    Init_DS18B20();     //將DS18B20初始化
  165.                    WriteOneChar(0xCC);//跳過(guò)讀序號(hào)列號(hào)的操作
  166.                    WriteOneChar(0xBE);//讀取溫度寄存器,前兩個(gè)分別是溫度的低位和高位     
  167. }
復(fù)制代碼



作者: admin    時(shí)間: 2015-11-8 22:38
#include "DS18B20.h"
#include "lcd1602.h"
#include "ds1302.h"

樓主可以上傳壓縮包分享一下 這個(gè)3個(gè)頭文件嗎

作者: magic_symphony    時(shí)間: 2017-12-13 16:19
程序不完整吧?連主程序main()都找不到




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产露脸国语对白在线 | 日日做夜夜爽毛片麻豆 | 影音先锋中文字幕在线观看 | 日韩在线一区二区三区 | 成人精品视频在线观看 | 91av在线视频观看 | 中文在线a在线 | 亚洲一区二区在线播放 | 久久久久亚洲 | 久久成人18免费网站 | 亚洲视频在线一区 | 午夜看电影在线观看 | 色婷婷av99xx | 国产精品一级在线观看 | 成人在线免费网站 | 欧美色综合一区二区三区 | 国产精品久久久久久久久久免费看 | 成年人在线播放 | 国产农村一级国产农村 | 欧洲精品久久久久毛片完整版 | 特黄色一级毛片 | 精品1区2区3区4区 | 日韩中文字幕第一页 | 亚洲永久入口 | 国产精品一区久久久 | 日韩精品一区二区三区中文在线 | 国产精品2| 337p日本欧洲亚洲大胆 | 美女福利网站 | 亚洲精品久久久蜜桃 | 成人h片在线观看 | 精品成人在线观看 | 午夜影院视频在线观看 | 在线观看成年人视频 | 亚洲一区中文字幕 | 成人国产精品视频 | 在线国产中文字幕 | 欧美综合一区 | 国产成人免费 | 欧美日韩黄色一级片 | 91精品国产一区二区三区蜜臀 |