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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3749|回復(fù): 2
收起左側(cè)

DS18B20測試程序

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


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的積分獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:1 發(fā)表于 2015-11-8 22:38 | 顯示全部樓層
#include "DS18B20.h"
#include "lcd1602.h"
#include "ds1302.h"

樓主可以上傳壓縮包分享一下 這個3個頭文件嗎
回復(fù)

使用道具 舉報

ID:261088 發(fā)表于 2017-12-13 16:19 | 顯示全部樓層
程序不完整吧?連主程序main()都找不到
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 中文字幕日韩欧美一区二区三区 | 国产精品www | 日韩在线视频一区 | www.99re5.com | 99视频在线免费观看 | 91精品国产91久久综合桃花 | 五月槐花香 | 久久99视频免费观看 | 美女久久 | 久久久国产精品一区 | 国产精品中文字幕在线播放 | 国产91丝袜在线播放 | 色爱综合网 | 久久久久国产 | 97av视频| 国产二区精品视频 | 欧美日韩高清一区 | 99国产精品久久久久老师 | 99在线观看视频 | 日韩精品中文字幕在线 | 亚洲成av片人久久久 | 国产99精品 | 国产大片一区 | 色一级| 九九热在线视频 | 免费在线观看黄网站 | 99国产精品久久久久久久 | 国产福利免费视频 | 亚洲黄色一区二区三区 | 国产精品一区二区三区在线 | 欧美日在线 | 国产亚洲精品综合一区 | 午夜寂寞网站 | 99精品国产一区二区青青牛奶 | 免费毛片网 | 成人欧美一区二区三区黑人孕妇 | 国产欧美一区二区三区久久 | 国产精品视频 | 99re在线播放 | 国产精品永久免费视频 | 久久电影一区 |