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

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

QQ登錄

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

搜索
查看: 8407|回復(fù): 8
打印 上一主題 下一主題
收起左側(cè)

基于51單片機(jī)控制的DS18B20數(shù)字溫度系統(tǒng)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:527981 發(fā)表于 2020-12-31 22:07 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本文主要介紹了一個(gè)基于 AT89C51單片機(jī)的測(cè)溫系統(tǒng),詳細(xì)描述了利用數(shù)字溫度傳感器 DS18B20 開(kāi)發(fā)測(cè)溫系統(tǒng)的過(guò)程。對(duì)采集的信息都希望用最直接的方式顯示出來(lái),但是傳感器所采集的信息是模擬的信號(hào),并且信號(hào)是非常微小的,需要用放大器進(jìn)行放大。模擬信號(hào)不能直接用數(shù)字儀器直接顯示,通過(guò)模數(shù)轉(zhuǎn)換之后就可以將模擬量轉(zhuǎn)變成數(shù)字量,在通過(guò)數(shù)碼管進(jìn)行顯示。有些可以直接與單片機(jī)鏈接。數(shù)碼管有共陽(yáng)極與共陰極兩類(lèi),本次設(shè)計(jì)采用的是共陰極的七段數(shù)碼管。
  設(shè)計(jì)要求:利用數(shù)字溫度傳感器 DS18B20 與單片機(jī)結(jié)合來(lái)測(cè)量溫度。利用數(shù)字 溫度傳感器 DS18B20 測(cè)量溫度信號(hào),計(jì)算后在 LED 數(shù)碼管上顯示 相應(yīng)的溫度值。其溫度測(cè)量范圍為−55℃~125℃,精確到 0.5℃;實(shí) 現(xiàn)超限報(bào)警
  DS18B20 數(shù)字溫度計(jì)是 DALLAS 公司生產(chǎn)的 1-Wire ,即單總線器件,具有線路簡(jiǎn)單、體積小的特點(diǎn)。因此用它來(lái)組成一個(gè)測(cè)溫系統(tǒng),線路簡(jiǎn)單,在一根通信線上,可以掛很多這樣的數(shù)字溫度計(jì),十分方便。 DS18B20 是美國(guó)DALLAS 公司新推出的一種可組網(wǎng)數(shù)字式溫度傳感器,與 DS1820 相似,DS18B20 也能夠直接讀取被測(cè)物體的溫度值。但是與 DS1820 相比, DS18B20 的功能更強(qiáng)大些。它體積小,電壓適用范圍寬( 3--5V ),用戶還可以通過(guò)編程實(shí)現(xiàn) 9--12 位的溫度讀數(shù),即具有可調(diào)的溫度分辨率,因此它的實(shí)用性和可靠性比同類(lèi)產(chǎn)品更高。
總原理圖

程序部分c
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. sbit DQ=P1^7;           //定義DS18B20的接受端口
  4. sbit p0_7=P0^7;
  5. sbit p3_0=P3^0;                //以下五個(gè)端口為按鈕
  6. sbit p3_1=P3^1;
  7. sbit p3_2=P3^2;
  8. sbit p3_3=P3^3;
  9. sbit p3_4=P3^4;
  10. sbit p1_0=P1^0;
  11. #define uchar unsigned char
  12. #define uint  unsigned int         
  13. void yanshi(int );                            //普通延時(shí)函數(shù)
  14. void jinyan(int );                          //  精確延時(shí)
  15. void yan_us        (uchar);                   // us級(jí)延時(shí)
  16. bit chushi(void);                           // DS18B20通信初始化
  17. void xie(uchar );                           //  向DS18B20寫(xiě)數(shù)據(jù)
  18. uint du(void);                                   //  讀取DS18B20的數(shù)據(jù)
  19. float chuli(uint);                           // 處理DS18B20返回的數(shù)據(jù)
  20. void xianshi(float);                  //  數(shù)碼管顯示函數(shù)
  21. uchar biao[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39,0x71};//        數(shù)碼管0-9 的顯示數(shù)據(jù)
  22. bit huan=1;

  23. void main(void){
  24.         uint ab=0;
  25.         float ac=0;
  26.         char shang=50;
  27.         char xia  =10;
  28.         int bian=0;
  29.     DQ=1;
  30.         p3_0=1;
  31.         p3_1=1;
  32.         p3_2=1;
  33.         p3_3=1;
  34.         p3_4=1;
  35.         TMOD=0x01;
  36.         EA=0;
  37.         ET0=0;
  38. while(1){
  39.         if((ab==1)&&chushi()){                //         向DS18B20發(fā)送轉(zhuǎn)換溫度指令
  40.          yan_us(100);
  41.          xie(0xcc);
  42.          xie(0x44);
  43.         }
  44.         if((DQ==1)&&(ab==500)&&chushi()){         //接受DS18B20的數(shù)據(jù)
  45.          yan_us(100);
  46.          xie(0xcc);
  47.          xie(0xbe);
  48.          ac=chuli(du());
  49.          ab=0;
  50.         }
  51.         ab++;
  52.         xianshi(ac);                                         //         顯示DS18B20的溫度數(shù)據(jù)
  53.         if(p3_4==0){                                         //         切換溫度顯示方式C  F
  54.                 huan=~huan;
  55.                 while(!p3_4);
  56.         }                                                                 
  57.         if(p3_0==0){                                                //調(diào)整上限增加
  58.          bian=0;
  59.          while(!p3_0){
  60.           if(bian==200){
  61.           shang++;
  62.           bian=0;
  63.           }
  64.           bian++;
  65.           xianshi(shang);
  66.          }
  67.         }
  68.         if(p3_1==0){                                 //                調(diào)整上限減少
  69.          bian=0;
  70.          while(!p3_1){
  71.           if(bian==200){
  72.           shang--;
  73.           bian=0;
  74.           }
  75.           bian++;
  76.           xianshi(shang);
  77.          }
  78.         }
  79.         if(p3_2==0){                                //          調(diào)整下限增加
  80.          bian=0;
  81.          while(!p3_2){
  82.           if(bian==200){
  83.           xia++;
  84.           bian=0;
  85.           }
  86.           bian++;
  87.           xianshi(xia);
  88.          }
  89.         }
  90.         if(p3_3==0){                                 //           調(diào)整下限減少
  91.          bian=0;
  92.          while(!p3_3){
  93.           if(bian==200){
  94.           xia--;
  95.           bian=0;
  96.           }
  97.           bian++;
  98.           xianshi(xia);
  99.          }
  100.         }
  101.         if(ac<xia||ac>shang)                   // 判斷溫度示數(shù)是否超上下限
  102.                 p1_0=1;
  103.         else
  104.                 p1_0=0;
  105. }

  106. }

  107. void yanshi(int a){
  108. int b;
  109. while(a--){
  110. for(b=0;b<110;b++);
  111. }

  112. }

  113. void jinyan(int a){
  114. TH0=(65536-a)/256;
  115. TL0=(65536-a)%256;
  116. TR0=1;
  117. while(!TF0);
  118. TF0=0;
  119. TR0=0;
  120. }

  121. void yan_us(uchar a){
  122. while(a--);
  123. }

  124. bit chushi(void){
  125. uchar a=0;
  126. DQ=0;
  127. yan_us(100);
  128. DQ=1;
  129. while(DQ){
  130. if(a==200)
  131. return 0;
  132. a++;
  133. }
  134. a=0;
  135. while(!DQ){
  136. if(DQ==250)
  137. return 0;
  138. a++;
  139. }
  140. return 1;
  141. }

  142. void xie(uchar a){
  143. char b;
  144. bit c;
  145. for(b=0;b<8;b++){
  146. c=a&0x01;
  147. if(c){
  148. DQ=0;
  149. _nop_();
  150. _nop_();
  151. DQ=1;
  152. yan_us(13);
  153. }
  154. else  {
  155. DQ=0;
  156. yan_us(13);
  157. DQ=1;
  158. }
  159. a=a>>1;
  160. }
  161. }

  162. uint du(void){
  163. uint a=0,b=0;
  164. bit c=0;
  165. char d;
  166. for(d=0;d<16;d++){
  167. DQ=0;
  168. _nop_();
  169. _nop_();
  170. DQ=1;
  171. _nop_();
  172. _nop_();
  173. _nop_();
  174. c=DQ;
  175. b=c;
  176. b=b<<d;
  177. a=a|b;
  178. b=0;
  179. yan_us(9);
  180. }
  181. DQ=0;
  182. yanshi(2);
  183. DQ=1;
  184. return a;
  185. }
  186. float chuli(uint a){
  187. float b;
  188. if(a>=32768){
  189. a=~a;
  190. a++;
  191. b=(float)a;
  192. b=b/(-16);
  193. }
  194. else  {
  195. b=(float)a;
  196. b=b/16;
  197. }
  198. return b;
  199. }
  200. void xianshi(float a){
  201. uint b,c;
  202. if(!huan)
  203.         a=32+a*1.8;
  204. if(a<0){
  205.         a=a*(-1);
  206.         b=(uint)a;
  207.         a=(a-b)*10;
  208.         c=(uint)a;
  209.         P2=0x00;
  210.         P0=0x40;
  211.         P0=0x00;
  212. }
  213. else{
  214.         b=(uint)a;
  215.         a=(a-b)*10;
  216.         c=(uint)a;
  217. }
  218. P2=0x01;
  219. P0=biao[b/100];
  220. P0=0x00;
  221. P2=0x02;
  222. P0=biao[(b/10)%10];
  223. P0=0x00;
  224. P2=0x03;
  225. P0=biao[b%10];
  226. p0_7=1;
  227. P0=0x00;
  228. P2=0x04;
  229. P0=biao[c];
  230. P0=0x00;
  231. P2=0x05;
  232. if(huan)
  233.         P0=biao[10];
  234. else
  235.         P0=biao[11];
  236. P0=0x00;
  237. }
復(fù)制代碼



仿真結(jié)果




溫控仿真2.png (105.59 KB, 下載次數(shù): 164)

溫控仿真2.png

51hei.png (3.28 KB, 下載次數(shù): 171)

51hei.png

51溫控系統(tǒng).rar

26.09 KB, 下載次數(shù): 102, 下載積分: 黑幣 -5

51基于DS18B20的溫控

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 贊一個(gè)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏11 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:390416 發(fā)表于 2021-1-1 09:55 | 只看該作者
這是我分享到51hei的DS18B20資料包 包含時(shí)序圖。 http://www.zg4o1577.cn/bbs/dpj-200465-1.html
回復(fù)

使用道具 舉報(bào)

板凳
ID:872200 發(fā)表于 2021-1-2 20:53 | 只看該作者
四位數(shù)碼管顯示的,需要對(duì)代碼進(jìn)行哪些修改?
回復(fù)

使用道具 舉報(bào)

地板
ID:527981 發(fā)表于 2021-1-29 22:14 | 只看該作者
zhaozhulei 發(fā)表于 2021-1-2 20:53
四位數(shù)碼管顯示的,需要對(duì)代碼進(jìn)行哪些修改?

一位用作正負(fù),剩下的用于溫度就行了
回復(fù)

使用道具 舉報(bào)

5#
ID:736988 發(fā)表于 2021-3-15 22:17 | 只看該作者
這個(gè)代碼不行呀,樓主
回復(fù)

使用道具 舉報(bào)

6#
ID:894438 發(fā)表于 2021-3-20 22:31 來(lái)自手機(jī) | 只看該作者
為啥我一打開(kāi)isis他就顯示什么新設(shè)計(jì),然后里面什么也沒(méi)有啊
回復(fù)

使用道具 舉報(bào)

7#
ID:894438 發(fā)表于 2021-3-20 22:45 來(lái)自手機(jī) | 只看該作者
為啥我也不行啊,是不是我的仿真軟件有問(wèn)題啊
回復(fù)

使用道具 舉報(bào)

8#
ID:859816 發(fā)表于 2021-4-1 20:15 | 只看該作者
這個(gè)里面沒(méi)有hex文件啊
回復(fù)

使用道具 舉報(bào)

9#
ID:887933 發(fā)表于 2021-4-19 09:11 | 只看該作者
王家光軍 發(fā)表于 2021-3-20 22:31
為啥我一打開(kāi)isis他就顯示什么新設(shè)計(jì),然后里面什么也沒(méi)有啊

你需要下載protues 8的版本
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 在线播放国产视频 | 精品亚洲第一 | 久久久欧洲 | 欧美久久影院 | 九九九视频| 韩国久久精品 | 黄色毛片在线看 | 国产精品亚洲综合 | 中文字幕在线网 | 青青草视频网 | 福利精品| 国产精品成人69xxx免费视频 | 国产美女黄色片 | 亚洲电影免费 | 色综合99 | 亚洲美乳中文字幕 | 黄色网址av | 成人午夜电影在线观看 | 亚洲美女一区 | 午夜寂寞福利视频 | 全免一级毛片 | 国产亚洲精品美女久久久久久久久久 | 欧美精品在线一区 | 性视频一区 | 日本视频中文字幕 | 欧洲一区视频 | 成人免费视频网站在线看 | 欧美日韩精品久久久免费观看 | 亚洲欧美中文日韩在线v日本 | 日韩免 | 超碰在线国产 | 免费一二区| 国产精品一二三区 | 日韩精品视频在线 | 亚洲欧美精品一区 | 国产精品久久久久婷婷二区次 | 欧美日韩久久精品 | 久久av综合 | 国产精品久久久久久久久久久久久久 | 国产成人免费视频网站高清观看视频 | 欧美一级黄色免费看 |