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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)在數(shù)字多用表中的應(yīng)用設(shè)計(jì)

          單片機(jī)在數(shù)字多用表中的應(yīng)用設(shè)計(jì)

          作者: 時(shí)間:2012-04-08 來(lái)源:網(wǎng)絡(luò) 收藏

          介紹Dallas公司的兩線溫度傳感器/實(shí)時(shí)時(shí)鐘芯片DS1629的特點(diǎn)和結(jié)構(gòu)原理,詳細(xì)討論了DS1629在溫度表/計(jì)時(shí)器中的,并指出了在實(shí)際中應(yīng)注意的問(wèn)題。
            關(guān)鍵詞:DS1629;兩線總線;表;

          本文引用地址:http://www.ex-cimer.com/article/171682.htm
          Design of Digital Multifunctional Meter Based on Microcontrolle r
          LI Guohou, YANG Qingjie, CHEN Yanfeng
          (Henan Institute of Science and Technology, Xinxiang 453003, China)
            Key words: DS1629; twowire bus; digital multifunctional meter; microcontroller
          1DS1629的結(jié)構(gòu)特性與工作原理
            DS1629是專為溫度的化測(cè)量而的一種芯片,同時(shí)還兼有實(shí)時(shí)時(shí)鐘/日歷的功能。DS1629的寬電源范圍和極小的功耗非常適合于電池供電的環(huán)境。其時(shí)鐘功能可以是12小時(shí)或者24小時(shí)的模式,且在12小時(shí)的模式下帶有AM/PM指示。當(dāng)溫度達(dá)到或超過(guò)程序設(shè)定的上限TH或者時(shí)間到達(dá)程序設(shè)定的時(shí)刻時(shí),芯片就產(chǎn)生漏極開(kāi)路的報(bào)警輸出。
            DS1629由數(shù)字溫度傳感器、實(shí)時(shí)時(shí)鐘、兩線串行接口、數(shù)據(jù)寄存器、溫度和時(shí)鐘報(bào)警比較器及時(shí)鐘分頻器和緩沖器6個(gè)部分組成。
            由制造商標(biāo)定的溫度傳感器無(wú)需外部器件。芯片一上電就開(kāi)始進(jìn)行溫度轉(zhuǎn)換,并隨后連續(xù)進(jìn)行轉(zhuǎn)換。主機(jī)(通常為)可以周期性地讀取溫度寄存器中最新轉(zhuǎn)換的溫度值,并且由于轉(zhuǎn)換是在“后臺(tái)”進(jìn)行的,讀數(shù)據(jù)并不影響轉(zhuǎn)換的過(guò)程。主機(jī)可以修改芯片的配置,如上電后并不立即開(kāi)始轉(zhuǎn)換和連續(xù)轉(zhuǎn)換模式,這樣對(duì)于要求省電的場(chǎng)合很有益處。實(shí)時(shí)時(shí)鐘/日歷提供秒、分、時(shí)、星期、日期、月、年的BCD數(shù)值,這需要內(nèi)部的振蕩器/分頻器和外部的32.768kHz的晶振。不足31天的月份則在月底自動(dòng)調(diào)整,閏年的補(bǔ)償直到2100年。實(shí)時(shí)時(shí)鐘可以通過(guò)清除時(shí)鐘寄存器中的控制位而關(guān)閉。通過(guò)讀/寫(xiě)時(shí)鐘寄存器或者時(shí)鐘報(bào)警寄存器可以關(guān)閉時(shí)鐘報(bào)警輸出。
            二進(jìn)制數(shù)據(jù)的讀/寫(xiě)通過(guò)兩線總線進(jìn)行,高位在前,每個(gè)寄存器的訪問(wèn)都采用8位的命令協(xié)議。芯片各個(gè)引腳的功能如表1所示。
          2.1硬件設(shè)計(jì)
            從前面的討論可以看出,DS1629兼有數(shù)字溫度傳感器和實(shí)時(shí)時(shí)鐘/日歷的功能,工作電壓為2.2~5.5V,因而可將其與結(jié)合起來(lái)設(shè)計(jì)出帶有數(shù)字鐘功能的數(shù)字溫度表。單片機(jī)采用AT89C2051,封裝為20DIP,工作電壓范圍是2.7~5.5V。顯示部分采用6位數(shù)碼管來(lái)顯示時(shí)間、日期或溫度等數(shù)據(jù)。為了簡(jiǎn)化電路,減少芯片,降低功耗,顯示部分采用動(dòng)態(tài)循環(huán)掃描的方式,由一片4~7段譯碼器CD4543驅(qū)動(dòng)。CD4543的工作電壓為3~18V,整個(gè)電路采用兩節(jié)干電池供電,系統(tǒng)的硬件構(gòu)成如圖1所示。圖中,DS1629的SCL與SDA端分別接單片機(jī)的P3.0和P3.1,R1和C1構(gòu)成上電自動(dòng)復(fù)位電路,P3.2~P3.4接 3個(gè)按鍵,C2、C3及6MHz晶振構(gòu)成振蕩電路,P3.5、P3.7、P1.0~P1.3分別接6位數(shù)碼管的公共端(圖中3個(gè)數(shù)碼管LED2~LED4沒(méi)有畫(huà)出)作為位選信號(hào),P1.4~P1.7接CD4543的BCD碼輸入端,6個(gè)數(shù)碼管的數(shù)據(jù)輸入端a~g都并接到CD4543的數(shù)據(jù)輸出端a~g。
            數(shù)字表的功能包括溫度的測(cè)量顯示和時(shí)鐘兩個(gè)方面,因而在軟件設(shè)計(jì)中應(yīng)同時(shí)考慮。溫度表和時(shí)鐘功能由按鍵S3選擇,上電后的默認(rèn)狀態(tài)為自動(dòng)顯示測(cè)量的溫度,按一下S3則切換到時(shí)間顯示,再按一下又返回到溫度顯示。默認(rèn)狀態(tài)下按鍵S2為秒表功能鍵,按1次開(kāi)始計(jì)時(shí),按兩次停止計(jì)時(shí),按3次則清0,再按則返回到初始狀態(tài)。默認(rèn)狀態(tài)下按鍵S1為調(diào)整時(shí)間的功能鍵,按1次S1設(shè)定小時(shí),此時(shí)S2為加1鍵,按1次小時(shí)加1,S3為減1鍵,按1次小時(shí)減1;按2次S1設(shè)定分鐘,此時(shí)S2、S3的作用同前;按3次S1則返回到初始狀態(tài)。根據(jù)這些功能,軟件設(shè)計(jì)由初始化、功能鍵處理、時(shí)間顯示、溫度測(cè)量及顯示等幾個(gè)部分組成。初始化部分完成單片機(jī)中斷、定時(shí)器、片內(nèi)存儲(chǔ)單元和DS1629的初始配置;功能鍵處理部分則進(jìn)行鍵盤(pán)的掃描及相應(yīng)的處理;時(shí)間及溫度顯示則是讀取DS1629的時(shí)間和溫度參數(shù),進(jìn)行轉(zhuǎn)換后送出顯示。下面給出單片機(jī)對(duì)DS1629操作的程序段,假定單片機(jī)的P3.1接SDA,P3.0接SCL,設(shè)定DS1629的工作模式為單次轉(zhuǎn)換模式,禁止時(shí)鐘輸出,對(duì)溫度及時(shí)鐘均為高電平報(bào)警,則相應(yīng)的程序段如下:
            
            從前面的討論可以看出,DS1629給基于單片機(jī)的數(shù)字化溫度的測(cè)量與控制帶來(lái)了極大的方便,使得系統(tǒng)的設(shè)計(jì)大為簡(jiǎn)化,具有很高的實(shí)用價(jià)值。


          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();