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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

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

DS18B20測(cè)試程序

[復(fù)制鏈接]
ID:93384 發(fā)表于 2015-11-8 22:08 | 顯示全部樓層 |閱讀模式
  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è)置全局變量,專門用于嚴(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讀書據(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寫入一個(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)寫時(shí)序      
  74.                      DQ=dat&0x01;   //利用與運(yùn)算取出要寫的某位二進(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è)寫時(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);    //寫顯示地址,將在第1行第1列開(kāi)始顯示
  96.                                i = 0;                //從第一個(gè)字符開(kāi)始顯示
  97.                                      while(Temp!= '\0')  //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫
  98.                                      {                                                      
  99.                                                write_data(Temp);   //將字符常量寫入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);        //寫顯示地址,將在第1行第9列開(kāi)始顯示            
  111.           write_data('.');      //將小數(shù)點(diǎn)的字符常量寫入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);        //寫顯示地址,將在第1行第10列開(kāi)始顯示
  121.                                i = 0;                    //從第一個(gè)字符開(kāi)始顯示
  122.                                      while(Cent!= '\0')     //只要沒(méi)有寫到結(jié)束標(biāo)志,就繼續(xù)寫
  123.                                       {                                             
  124.                                      write_data(Cent);     //將字符常量寫入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);      //寫顯示地址,將在第1行第6列開(kāi)始顯示
  140. /*write_data(digit[j]);    //將百位數(shù)字的字符常量寫入LCD         */
  141.    write_data(digit[k]);    //將十位數(shù)字的字符常量寫入LCD
  142.          write_data(digit[l]);    //將個(gè)位數(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列開(kāi)始顯示
  151.          write_data(digit[x]);     //將小數(shù)部分的第一位數(shù)字字符常量寫入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ù)制代碼


評(píng)分

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

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

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

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区中文字幕乱码 | 亚洲欧美视频一区 | 亚洲人成一区二区三区性色 | 91精品国产麻豆 | 国产在线观看一区二区三区 | 99r在线 | 成人精品鲁一区一区二区 | 日本久久久久久久久 | 在线播放国产一区二区三区 | 国产69精品久久久久777 | 亚洲欧美在线观看 | 在线a视频网站 | 国产精品免费一区二区三区 | 日韩在线播放一区 | 欧美一级三级 | 久久久久久影院 | 午夜影视 | 欧产日产国产精品国产 | 日本在线看片 | 欧美在线观看一区 | 一级黄色毛片免费 | 欧美激情视频网站 | 性色在线 | www.奇米| 欧美精品在线一区二区三区 | 91网在线观看 | 91成人在线视频 | 欧美日韩精品一区二区三区四区 | 国产一区二区三区在线免费观看 | 国产激情免费视频 | 国产美女黄色片 | 亚洲综合电影 | aaaaaa大片免费看最大的 | av在线播放免费 | 欧美日韩中文国产一区发布 | 国产羞羞视频在线观看 | 亚洲成人一区 | 欧美一区二区三区精品 | 97视频在线免费 | 天天干天天操天天爽 | 久久新|