<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于AT89C2051的數字溫度計設計

          基于AT89C2051的數字溫度計設計

          作者: 時間:2010-11-01 來源:網絡 收藏

          單片機控制已成為今天電子追-求的目標之一,本文將這種控制技術應用于溫度測量中。是美國Atmel公司生產的低電壓、高性能CMOS8位單片機,片內含有2 KB的反復擦寫的只讀程序存儲器和128 B的隨機存取數據存儲器(RAM)。美國DALLAS半導體公司生產的DSl-8B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能傳感器。是以DS18B20為檢測元件,由作為主控制器的,具有功耗低、結構簡單、讀數方便、測溫范圍廣、測溫準確的特點。

          1 電路構成及工作原理
          1.1 硬件

          構成的主要由三部分組成:DSl8B20溫度傳感器、單片機AT89C2051、由LED數碼管構成的顯示模塊。其系統(tǒng)原理框圖如圖1所示。DSl8B20作為單片機AT89C2051的外部信號源,把所采集到的溫度轉換為信號,通過I/O接口傳給2051,2051啟動ROM內的控制程序驅動LED數碼管,通過I/O接口和數據線(單片機和數碼管的接口)把數據傳送給數碼管,將采集到的溫度顯示出來。

          本文引用地址:http://www.ex-cimer.com/article/173166.htm


          1.2 總電路圖
          AT89C2051的溫度測量系統(tǒng)電路圖把溫度轉化成帶符號的信號(以十六位補碼形式,占兩個字節(jié)),若采用帶屏蔽的雙絞電纜線,連線的長度可以達到150 m,輸出腳I/0直接與單片機的P3.4相連,R1為上拉電阻,傳感器采用外部電源供電。AT89C2051是整個系統(tǒng)的核心部分,內含2 KB的FLASH ROM,用戶程序存放在這里。顯示器模塊由四位一體的共陽數碼管和四個9012組成。系統(tǒng)程序分傳感器控制程序和顯示器程序兩部分,傳感器控制程序是按照DSl8B20的通信協(xié)議編制。系統(tǒng)的工作是在程序控制下,完成對傳感器的讀寫和對溫度的顯示。
          產品的主要技術指標:測量范圍:-55~+125℃,測量精度:0.5℃;反應時間小于等于500 ms。

          2 軟件
          2.1 采集模塊

          該模塊選用單線溫度傳感器DSl8B20完成溫度采集。單片機AT89C51對DSl8B20訪問流程如下:先對DSl8B20初始化,再進行ROM操作命令,最后才能對存儲器操作。DSl8B20每一步操作都要遵循嚴格的工作時序和通信協(xié)議。根據DSl8B20的通訊協(xié)議,需經三個步驟:每一次讀寫之前都要對DSl8B20進行復位,復位成功后發(fā)送一條ROM指令(指令代碼CCH)并置標志位,根據標志位來判斷是否初始化成功,最后發(fā)送RAM指令(指令代碼44H)DSl8B20開始轉換,再讀出溫度轉換值(指令代碼BEH),讀取的溫度值高位字節(jié)送27H單元,低位字節(jié)送26H單元,再按照溫度值字節(jié)的表示格式及其符號位,經過簡單的變換即可得到實際溫度值。


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();