版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 本科畢業(yè)論文(設(shè)計(jì))</p><p> 論文題目:恒溫水箱及其收費(fèi)系統(tǒng)設(shè)計(jì)</p><p> (英文) Design of constant temperature water tank and charge system</p><p> 所在學(xué)院 </p><p
2、> 專業(yè)班級(jí) 電氣工程及其自動(dòng)化 </p><p> 學(xué)生姓名 學(xué)號(hào) </p><p> 指導(dǎo)教師 職稱 </p><p> 完成日期 年 月 日</p><p><b> 摘 要<
3、;/b></p><p> 隨著現(xiàn)代工業(yè)的飛速發(fā)展,溫度控制已成為工業(yè)控制中必不可少的一部分。智能控制系統(tǒng)理論的快速發(fā)展及廣泛應(yīng)用,使恒溫控制的智能溫控的實(shí)現(xiàn)成為可能。以51單片機(jī)為控制核心,由DS18B20承擔(dān)測溫以及數(shù)模轉(zhuǎn)換任務(wù),單片機(jī)的輸出量通過繼電器控制恒溫控制設(shè)備的加熱與制冷,來實(shí)現(xiàn)水箱里的水溫恒定。同時(shí)單片機(jī)還通過繼電器來控制電磁閥開關(guān),來決定是否需要放水。收費(fèi)系統(tǒng)的設(shè)計(jì)是根據(jù)使用對(duì)象而設(shè)計(jì)的
4、。體現(xiàn)了恒溫水箱的商用價(jià)值。通過單片機(jī)接口電路的合理擴(kuò)展系統(tǒng)可以根據(jù)誤差范圍自動(dòng)調(diào)節(jié)控制量,從而提高溫度控制精度,通過霍爾開關(guān)來模擬收費(fèi)系統(tǒng)中的刷卡收費(fèi),檢測水的使用時(shí)間來計(jì)算出需要收取的費(fèi)用并顯示在數(shù)碼管上,同時(shí)具有人工輸入設(shè)定、顯示實(shí)時(shí)溫度等功能。</p><p> 關(guān)鍵詞:單片機(jī);霍爾傳感器;恒溫控制;智能;商用開水器</p><p><b> Abstract<
5、/b></p><p> With the rapid development of modern industry, the temperature control has become an indispensable part of industrial control. The rapid development and wide application of intelligent contro
6、l systems theory, thermostat-controlled intelligent temperature control possible to achieve.51 single-chip microcomputer to control core, borne by the DS18B20 temperature measurement and digital-analog conversion tasks,
7、monolithic integrated circuit control through the relay output weight constant temperatur</p><p> Key Words: Single-chip; Hall sensors; Constant temperature control; Intelligence; Commercial water he
8、ater</p><p><b> 目 錄</b></p><p><b> 1 引言1</b></p><p><b> 2 總體設(shè)計(jì)2</b></p><p><b> 3 硬件設(shè)計(jì)3</b></p><p>
9、 3.1 單片機(jī)最小系統(tǒng)3</p><p> 3.1.1 復(fù)位電路4</p><p> 3.1.2 時(shí)鐘電路4</p><p> 3.2 矩陣鍵盤模塊5</p><p> 3.3 數(shù)碼管顯示模塊6</p><p> 3.3.1 數(shù)碼管驅(qū)動(dòng)電路6</p><p> 3.3.
10、2 74HC573鎖存器電路7</p><p> 3.4 繼電器控制輸出模塊7</p><p> 3.5 DS18B20溫度測量模塊8</p><p> 3.5.1 DS18B20的特性9</p><p> 3.5.2 DS18B20的初始化和讀寫操作9</p><p> 3.5.3 DS18B20
11、內(nèi)部存儲(chǔ)內(nèi)容11</p><p> 3.6 霍爾傳感器電磁感應(yīng)電路14</p><p><b> 4 軟件設(shè)計(jì)17</b></p><p> 4.1 總體程序流程圖17</p><p> 4.2 初始化流程圖17</p><p> 4.3 DS18B20軟件流程圖18<
12、/p><p> 4.3.1 DS18B20初始化19</p><p> 4.3.2 向DS18B20讀寫數(shù)據(jù)程序20</p><p> 4.3.3 溫度轉(zhuǎn)換程序22</p><p> 4.4 數(shù)碼管顯示流程圖24</p><p> 4.4.1 實(shí)時(shí)顯示程序26</p><p>
13、 4.4.2 設(shè)定值顯示程序28</p><p> 4.4.3 計(jì)費(fèi)額顯示程序29</p><p> 4.5 矩陣鍵盤掃描流程圖30</p><p> 4.6 繼電器控制流程圖34</p><p><b> 致 謝39</b></p><p><b> 參考文獻(xiàn)
14、40</b></p><p> 附錄1 系統(tǒng)實(shí)物圖41</p><p> 附錄2 實(shí)驗(yàn)原理圖42</p><p> 附錄3 畢業(yè)設(shè)計(jì)作品說明書43</p><p> 附錄4 PCB制作圖44</p><p> 附錄5 程序源代碼45</p><p><
15、;b> 1 引言</b></p><p> 隨著微電子技術(shù)和計(jì)算機(jī)技術(shù)的迅猛發(fā)展以及自動(dòng)化控制理論和設(shè)計(jì)方法發(fā)展以及應(yīng)用,溫度控制系統(tǒng)發(fā)展迅速,并在智能化、自適應(yīng)、參數(shù)自整定方面取得一定成果。而當(dāng)今,隨著電子行業(yè)的迅猛發(fā)展,計(jì)算機(jī)技術(shù)和傳感器技術(shù)的不斷改進(jìn),計(jì)算機(jī)和傳感器的價(jià)格也日益降低,可靠性逐步提高,用信息技術(shù)來實(shí)現(xiàn)水溫控制并提高控制的精確度不僅是可以達(dá)到的而且是容易實(shí)現(xiàn)的。用高新技術(shù)來
16、解決工業(yè)生產(chǎn)問題,排除生活用水問題,實(shí)施對(duì)水溫的控制已成為我們的任 </p><p> 務(wù),此來加強(qiáng)工業(yè)化建設(shè),提高人民的生活水平。</p><p> 采用單片機(jī)對(duì)溫度進(jìn)行控制,不僅具有控制方便、簡單和靈活性大等優(yōu)點(diǎn),而且可以大幅度提高被控溫度的技術(shù)指標(biāo),目前這種溫控技術(shù)在工農(nóng)業(yè)的科研生產(chǎn)和日常生活中得到廣泛應(yīng)用。其中水溫測控溫度控制系統(tǒng)的功能可以實(shí)現(xiàn)常溫開始對(duì)自來水加溫,加熱到人
17、工設(shè)定的溫度的恒溫控制。而語音報(bào)警的溫度監(jiān)控</p><p> 儀可以通過控制晶閘管對(duì)溫度進(jìn)行自動(dòng)調(diào)節(jié),使被控環(huán)境的溫度達(dá)到要求的范</p><p> 圍,并能實(shí)現(xiàn)對(duì)所控區(qū)域環(huán)境溫度的自動(dòng)監(jiān)控的遠(yuǎn)程調(diào)控系統(tǒng)。</p><p><b> 2 總體設(shè)計(jì)</b></p><p> 恒溫控制系統(tǒng)在很多領(lǐng)域都有廣泛的應(yīng)用,
18、例如恒溫水箱,大棚恒溫控制,暖房及其電熱水器等[1]。一般要求控制系統(tǒng)能夠準(zhǔn)確的進(jìn)行溫度檢測并顯示,并設(shè)定溫度上下限采取相應(yīng)的措施:當(dāng)溫度達(dá)到溫度的上限或者下限是分別控制繼電器采取不同措施實(shí)現(xiàn)對(duì)外部加熱設(shè)備以及制冷設(shè)備的控制, 能根據(jù)溫度變化的情況進(jìn)行有序地升溫或降溫。</p><p> 本文所設(shè)計(jì)的恒溫控制系統(tǒng)主要由顯示部分、鍵盤設(shè)定部分、熱得快控制以及計(jì)費(fèi)部分等四部分組成。顯示部分采用數(shù)字傳感器DS18B2
19、0作為溫度采集并將數(shù)據(jù)送到數(shù)碼管顯示;鍵盤部設(shè)定部分采用矩陣鍵盤,將輸入的數(shù)字送到數(shù)碼管顯示;熱得快控制部分CPU對(duì)當(dāng)前溫度與設(shè)定溫度進(jìn)行比較,對(duì)電磁閥進(jìn)行開關(guān)操作;計(jì)費(fèi)系統(tǒng)對(duì)外界是否有輸入進(jìn)行判斷,來控制電磁閥的開關(guān)狀態(tài)。</p><p> 整體設(shè)計(jì)思路為一個(gè)閉環(huán)過程控制系統(tǒng),輸入量為鍵盤設(shè)定值,與之進(jìn)行比較的是當(dāng)前的輸出溫度,采用負(fù)反饋方式,前饋通道為PID調(diào)節(jié),控制對(duì)象水箱里的水溫[5]。為了對(duì)水箱里的水
20、溫進(jìn)行實(shí)時(shí)檢測與控制,采用DS18B20進(jìn)行溫度檢測。對(duì)于計(jì)費(fèi)系統(tǒng),采用計(jì)時(shí)的計(jì)費(fèi)方式,通過霍爾傳感器來模擬電磁刷卡系統(tǒng)的輸入感應(yīng)環(huán)節(jié),一旦檢測到脈沖,電磁水閥打開,同時(shí)進(jìn)行計(jì)費(fèi),當(dāng)檢測第二個(gè)脈沖時(shí),水閥關(guān)閉并且停止計(jì)費(fèi),顯示本次用水所花的費(fèi)用。</p><p><b> 3 硬件設(shè)計(jì)</b></p><p> 本系統(tǒng)硬件主要有六大模塊組成:單片機(jī)最小系統(tǒng)、矩陣鍵
21、盤模塊、數(shù)碼管顯示模塊、繼電器控制輸出模塊、DS18B20溫度測量電路和霍爾傳感器電磁感應(yīng)電路。系統(tǒng)總體的硬件結(jié)構(gòu)如圖3-1.</p><p> 圖3-1 系統(tǒng)設(shè)計(jì)硬件原理結(jié)構(gòu)</p><p> 3.1 單片機(jī)最小系統(tǒng)</p><p> 本系統(tǒng)的微處理器采用STC89C52芯片,是51系列單片機(jī)的其中一種。STC89C52是一種低功耗、高性能CMOS8位微控制
22、器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口。另外 STC89X52 可降至0Hz 靜態(tài)
23、邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。最高運(yùn)作頻率35Mhz,6T/12T可選。</p><p> 所謂單片機(jī)最小系統(tǒng),或者稱為最小應(yīng)用系統(tǒng),是指用最少的元器件組成的單片機(jī)可以工作的系統(tǒng)。對(duì)51系列單片機(jī)而言,最小系統(tǒng)一般包括:單片機(jī)、晶
24、振電路、復(fù)位電路。下圖3-2為單片機(jī)最小系統(tǒng)電路圖。</p><p> 圖3-2 單片機(jī)最小系統(tǒng)電路圖</p><p> 3.1.1 復(fù)位電路</p><p> 如圖3-3是典型51單片機(jī)復(fù)位電路,由電容串聯(lián)電阻組成,根據(jù)“電容電壓不能突變”的性質(zhì),當(dāng)系統(tǒng)電壓一上電,RST引腳就會(huì)出現(xiàn)高電平,這個(gè)高電平持續(xù)的時(shí)間由電路中的RC值來決定。典型的51單片機(jī)當(dāng)RST
25、腳的高電平持續(xù)兩個(gè)機(jī)器周期以上就會(huì)復(fù)位,所以,取適當(dāng)?shù)腞C值就可以保證可靠的復(fù)位。根據(jù)數(shù)據(jù)手冊(cè),一般推薦C取10u,R取1k。在這里我們是根據(jù)上述的值取得的。</p><p> 圖3-3 單片機(jī)復(fù)位電路</p><p> 3.1.2 時(shí)鐘電路</p><p> 每個(gè)單片機(jī)系統(tǒng)里都有晶振,全程是叫晶體震蕩器,在單片機(jī)系統(tǒng)里晶振的作用非常大,他結(jié)合單片機(jī)內(nèi)部的電
26、路,產(chǎn)生單片機(jī)所必須的時(shí)鐘頻率,單片機(jī)的一切指令的執(zhí)行都是建立在這個(gè)基礎(chǔ)上的,晶振的提供的時(shí)鐘頻率越高,那單片機(jī)的運(yùn)行速度也就越快。</p><p> 典型的晶振若用于串口通訊的場合取11.0592MHz,因?yàn)榭梢詼?zhǔn)確地得到9600波特率和19200波特率,若用于產(chǎn)生精確的us級(jí)時(shí)鐘取12MHz,方便定時(shí)操作。時(shí)鐘電路如圖3-4所示。</p><p> 圖3-4 時(shí)鐘電路</p
27、><p> 3.2 矩陣鍵盤模塊</p><p> 在鍵盤中按鍵數(shù)量較多時(shí),為了減少I/O口的占用,通常將按鍵排列成矩陣形式,如圖1所示。在矩陣式鍵盤中,每條水平線和垂直線在交叉處不直接連通,而是通過一個(gè)按鍵加以連接。這樣,一個(gè)端口(如P1口)就可以構(gòu)成4*4=16個(gè)按鍵,比之直接將端口線用于鍵盤多出了一倍,而且線數(shù)越多,區(qū)別越明顯,比如再多加一條線就可以構(gòu)成20鍵的鍵盤,而直接用端口線則
28、只能多出一鍵(9鍵)。由此可見,在需要的鍵數(shù)比較多時(shí),采用矩陣法來做鍵盤是合理的。 </p><p> 矩陣式結(jié)構(gòu)的鍵盤顯然比直接法要復(fù)雜一些,識(shí)別也要復(fù)雜一些,上圖中,列線通過電阻接正電源,并將行線所接的單片機(jī)的I/O口作為輸出端,而列線所接的I/O口則作為輸入。這樣,當(dāng)按鍵沒有按下時(shí),所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會(huì)被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知
29、是否有鍵按下了。具體的識(shí)別及編程方法在軟件設(shè)計(jì)中闡述。圖3-5為矩陣鍵盤電路圖。</p><p> 圖3-5 矩陣鍵盤電路圖</p><p> 3.3 數(shù)碼管顯示模塊</p><p> 數(shù)碼管按段數(shù)分為七段數(shù)碼管和八段數(shù)碼管,八段數(shù)碼管比七段數(shù)碼管多一個(gè)發(fā)光二極管單元(多一個(gè)小數(shù)點(diǎn)顯示);按能顯示多少個(gè)“8”可分為1位、2位、4位等等數(shù)碼管;</p&g
30、t;<p> 按發(fā)光二極管單元連接方式分為共陽極數(shù)碼管和共陰極數(shù)碼管。共陽數(shù)碼管是指將所有發(fā)光二極管的陽極接到一起形成公共陽極(COM)的數(shù)碼管,共陽數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到+5V,當(dāng)某一字段發(fā)光二極管的陰極為低電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陰極為高電平時(shí),相應(yīng)字段就不亮。共陰數(shù)碼管是指將所有發(fā)光二極管的陰極接到一起形成公共陰極(COM)的數(shù)碼管,共陰數(shù)碼管在應(yīng)用時(shí)應(yīng)將公共極COM接到地線GND上,當(dāng)某一
31、字段發(fā)光二極管的陽極為高電平時(shí),相應(yīng)字段就點(diǎn)亮,當(dāng)某一字段的陽極為低電平時(shí),相應(yīng)字段就不亮。圖3-6為數(shù)碼管顯示電路。</p><p> 圖3-6 數(shù)碼管顯示電路</p><p> 3.3.1 數(shù)碼管驅(qū)動(dòng)電路</p><p> 數(shù)碼管要正常顯示,就要用驅(qū)動(dòng)電路來驅(qū)動(dòng)數(shù)碼管的各個(gè)段碼,從而顯示出我們要的數(shù)字,因此根據(jù)數(shù)碼管的驅(qū)動(dòng)方式的不同,可以分為靜態(tài)式和動(dòng)態(tài)
32、式兩類。</p><p> 一般來說,數(shù)碼管使用的電流靜態(tài)時(shí),推薦使用10-15mA;動(dòng)態(tài)時(shí),16/1動(dòng)態(tài)掃描時(shí),平均電流為4-5mA,峰值電流50-60mA。由于直接I/O端口提供的電流太小,因此一般用三極管驅(qū)動(dòng)。下圖3-7為數(shù)碼管驅(qū)動(dòng)和電路。</p><p> 圖3-7 數(shù)碼管驅(qū)動(dòng)電路</p><p> 3.3.2 74HC573鎖存器電路</p&
33、gt;<p> 鎖存器(Latch)是一種對(duì)脈沖電平敏感的存儲(chǔ)單元電路,它們可以在特定輸入脈沖電平作用下改變狀態(tài)。鎖存,就是把信號(hào)暫存以維持某種電平狀態(tài)。鎖存器的最主要作用是緩存,其次完成高速的控制其與慢速的外設(shè)的不同步問題,再其次是解決驅(qū)動(dòng)的問題,最后是解決一個(gè) I/O 口既能輸出也能輸入的問題。</p><p> 為了減少端口的使用量以及數(shù)碼管驅(qū)動(dòng),本設(shè)計(jì)采用74H573鎖存器對(duì)P0端口所定
34、義的段選和位選進(jìn)行分時(shí)復(fù)用。圖3-8為74HC573鎖存器電路。</p><p> 圖3-8 74HC573 鎖存電路</p><p> 3.4 繼電器控制輸出模塊</p><p> 電磁繼電器是一種電子控制器件,它具有控制系統(tǒng)(又稱輸入回路)和被控制系統(tǒng)(又稱輸出回路),通常應(yīng)用于自動(dòng)控制電路中,它實(shí)際上是用較小的電流。較低的電壓去控制較大電流。較高的電壓的
35、一種“自動(dòng)開關(guān)”。故在電路中起著自動(dòng)調(diào)節(jié)、安全保護(hù)、轉(zhuǎn)換電路等作用。</p><p> 電磁繼電器一般由 電磁鐵,銜鐵,彈簧片,觸點(diǎn) 等組成的,其工作電路由低壓控制電路和高壓工作電路兩部分構(gòu)成。電磁繼電器還可以實(shí)現(xiàn)遠(yuǎn)距離控制和自動(dòng)化控制。只要在線圈兩端加上一定的電壓,線圈中就會(huì)流過一定的電流,從而產(chǎn)生電磁效應(yīng),銜鐵就會(huì)在電磁力吸引的作用下克服返回彈簧的拉力吸向鐵芯,從而帶動(dòng)銜鐵的動(dòng)觸點(diǎn)與靜觸點(diǎn)(常開觸點(diǎn))吸合。
36、當(dāng)線圈斷電后,電磁的吸力也隨之消失,銜鐵就會(huì)在彈簧的反作用力返回原來的位置,使動(dòng)觸點(diǎn)與原來的靜觸點(diǎn)(常閉觸點(diǎn))釋放。這樣吸合、釋放,從而達(dá)到了在電路中的導(dǎo)通、切斷的目的。對(duì)于繼電器的“常開、常閉”觸點(diǎn),可以這樣來區(qū)分:繼電器線圈未通電時(shí)處于斷開狀態(tài)的靜觸點(diǎn),稱為“常開觸點(diǎn)”;處于接通狀態(tài)的靜觸點(diǎn)稱為“常閉觸點(diǎn)”。 下圖為電磁繼電器內(nèi)部結(jié)構(gòu)。</p><p> 圖3-9 電磁繼電器內(nèi)部結(jié)構(gòu)</p>
37、<p> 由于水閥和熱得快額定電壓為交流220伏,單片機(jī)不能直接對(duì)其進(jìn)行控制,因此采用繼電器控制其開關(guān)操作。圖3-10為電磁繼電器的接口電路。</p><p> 圖3-10 電磁繼電器控制輸出電路</p><p> 3.5 DS18B20溫度測量模塊</p><p> Dallas半導(dǎo)體公司的數(shù)字話溫度傳感器DS18B20是世界上第一片支持“一
38、線總線”接口的溫度傳感器。一線總線獨(dú)特而且經(jīng)濟(jì)的特點(diǎn),使用戶可以輕松地組建傳感器網(wǎng)絡(luò),為測量系統(tǒng)的構(gòu)建引入全新概念。現(xiàn)在,新一代的“DS18B20”體積更小、更經(jīng)濟(jì)、更靈活。</p><p> 3.5.1 DS18B20的特性</p><p> DS18B20的測溫范圍為-55℃至+125℃,在-10℃至+85℃范圍內(nèi),精度為±0.5℃。現(xiàn)場溫度直接一“一線總線”的數(shù)字方式傳
39、輸,大大提高系統(tǒng)的抗干擾性。適合于惡劣環(huán)境的現(xiàn)場溫度測量。如:環(huán)境控制、設(shè)備控制。測溫類消費(fèi)電子產(chǎn)品等。</p><p> DS18B20可以程序設(shè)定9~12位分辨率,精度為±0.5℃。分辨率設(shè)定及用戶設(shè)定的報(bào)警溫度存儲(chǔ)EEPROM中,掉電后依然保存。DS18B20的負(fù)壓特性:電源極性接反時(shí),芯片不會(huì)因發(fā)熱而燒毀, 但不能正常工作。DS18B20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻ROM 、溫度傳感器
40、、非揮發(fā)的溫度報(bào)警觸發(fā)器TH和TL、配置寄存器。</p><p> 對(duì)DS18B20的溫度代碼的讀取,主要是單片機(jī)通過單線總線端口對(duì)DS18B20進(jìn)行訪問并執(zhí)行序列。一般需要以下四個(gè)操作:初始化、ROM操作命令、存儲(chǔ)器操作命令和執(zhí)行/數(shù)據(jù)。</p><p> 3.5.2 DS18B20的初始化和讀寫操作</p><p> 1. DS18B20的初始化</
41、p><p> ?。?) 先將數(shù)據(jù)線置為高電平“1”; </p><p> ?。?) 短暫延時(shí)(該時(shí)間要求的不是很嚴(yán)格,但是盡可能的短一點(diǎn));</p><p> ?。?) 再將數(shù)據(jù)線拉到低電平“0”; </p><p> ?。?) 延時(shí)750微秒左右(該時(shí)間的時(shí)間范圍可以從480到960微秒); </p><p> (5)
42、 再將數(shù)據(jù)線拉到高電平“1”; </p><p> (6) 延時(shí)等待(若初始化成功則在15到60毫秒時(shí)間之內(nèi)產(chǎn)生一個(gè)由DS18B20所返回的低電平“0”。據(jù)該狀態(tài)可以來確定它的存在,但是應(yīng)注意不能無限的進(jìn)行等待,不然會(huì)使程序進(jìn)入死循環(huán),所以要對(duì)其進(jìn)行超時(shí)控制); </p><p> (7) 若CPU讀到了數(shù)據(jù)線上的低電平“0”后,還要做延時(shí),其延時(shí)的時(shí)間從發(fā)出的高電平算起(第(5)步的
43、時(shí)間算起)至少要480微秒; </p><p> ?。?) 將數(shù)據(jù)線再次拉到高電平“1”后結(jié)束。</p><p> 初始化是通過單線總線的所有執(zhí)行(處理)都從一個(gè)初始化序列開始。初始化序列包括一個(gè)有總線控制器發(fā)出的復(fù)位脈沖和跟有其后從機(jī)發(fā)出的存在脈沖。存在脈沖讓總線控制器知道DS18B20在總線上且已經(jīng)準(zhǔn)備好操作。DS18B20的初始化的時(shí)序圖如圖3-11所示。</p>&
44、lt;p> 圖3-11 DS18B20初始化時(shí)序圖</p><p> 2. DS18B20的寫操作</p><p> ?。?) 數(shù)據(jù)線先置為低電平“0”; </p><p> (2) 延時(shí)約為15微秒; </p><p> ?。?) 按從低位到高位的順序發(fā)送字節(jié)(一次只能發(fā)送一位); </p><p>
45、 (4) 延時(shí)時(shí)間約為45微秒; </p><p> (5) 將數(shù)據(jù)線拉到高電平; </p><p> ?。?) 重復(fù)上(1)到(6)的操作直到所有的字節(jié)全部發(fā)送完為止; </p><p> ?。?) 最后將數(shù)據(jù)線拉高。</p><p> DS18B20寫操作的時(shí)序圖如圖3-12所示。</p><p> 圖3-1
46、2 DS18B20寫操作時(shí)序圖</p><p> 3. DS18B20的讀操作</p><p> ?。?)將數(shù)據(jù)線拉高“1”; </p><p> (2)延時(shí)2微秒; </p><p> (3)將數(shù)據(jù)線拉低“0”; </p><p> ?。?)延時(shí)15微秒; </p><p> ?。?)
47、將數(shù)據(jù)線拉高“1”; </p><p> ?。?)延時(shí)15微秒; </p><p> (7)讀數(shù)據(jù)線的狀態(tài)得到一個(gè)狀態(tài)位,并進(jìn)行數(shù)據(jù)處理; </p><p> ?。?)延時(shí)30微秒;</p><p> 這里只要按以上操作將狀態(tài)位的各個(gè)bit按順序讀取。</p><p> DS18B20的讀操作的時(shí)序圖如圖3-13
48、所示。</p><p> 圖3-13 DS18B20讀操作時(shí)序圖</p><p> 3.5.3 DS18B20內(nèi)部存儲(chǔ)內(nèi)容</p><p> 光刻ROM中的64位序列號(hào)是出廠前被光刻好的,它可以看作是該DS18B20的地址序列碼。64位光刻ROM的排列是:開始8位 (28H)是產(chǎn)品類型標(biāo)號(hào),接著的48位是該DS18B20自身的序列號(hào),最后8位是前面56位的循
49、環(huán)冗余校驗(yàn)碼(CRC=X8+X5+X4+1)。光刻ROM的作用 是使每一個(gè)DS18B20都各不相同,這樣就可以實(shí)現(xiàn)一根總線上掛接多個(gè)DS18B20的目的。 </p><p> 圖3-14是12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲(chǔ)在18B20的兩個(gè)8比特的RAM中,二進(jìn)制中的前面5位是符號(hào)位,如果測得的溫度大于0, 這5位為0,只要將測到的數(shù)值乘于0.0625即可得到實(shí)際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要
50、取反加1再乘于0.0625即可得到實(shí)際 溫度。 例如+125℃的數(shù)字輸出為07D0H,+25.0625℃的數(shù)字輸出為0191H,-25.0625℃的數(shù)字輸出為FE6FH,-55℃的數(shù)字輸出為FC90H 。 表3-1是DS18B20的溫度轉(zhuǎn)換表。</p><p> 圖3-14 DS18B20溫度值格式圖</p><p> 表3-1 DS18B20的溫度轉(zhuǎn)換表</p>&
51、lt;p> 高速暫存存儲(chǔ)器由9個(gè)字節(jié)組成,其分配如表3-2所示。當(dāng)溫度轉(zhuǎn)換命令發(fā)布后,經(jīng)轉(zhuǎn)換所得的溫度值以二字節(jié)補(bǔ)碼形式存放在 高速暫存存儲(chǔ)器的第0個(gè)和第1個(gè)字節(jié)。單片機(jī)可通過單線接口讀到該數(shù)據(jù),讀取時(shí)低位在前,高位在后。對(duì)應(yīng)的溫度計(jì)算: 當(dāng)符號(hào)位S=0時(shí),直接將二進(jìn)制位轉(zhuǎn)換為十進(jìn)制;當(dāng)S=1時(shí),先將補(bǔ)碼變?yōu)樵a,再計(jì)算十進(jìn)制值。第九個(gè)字節(jié)是冗余檢驗(yàn)字節(jié)。 </p><p> 表3-2 DS18B20
52、暫存寄存器分布</p><p> 根據(jù)DS18B20的通訊協(xié)議,主機(jī)(單片機(jī))控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個(gè)步驟:每一次讀寫之前都要對(duì)DS18B20進(jìn)行 復(fù)位操作,復(fù)位成功后發(fā)送一條ROM指令,最后發(fā)送RAM指令,這樣才能對(duì)DS18B20進(jìn)行預(yù)定的操作。復(fù)位要求主CPU將數(shù)據(jù)線下拉500微秒,然后 釋放,當(dāng)DS18B20收到信號(hào)后等待16~60微秒左右,后發(fā)出60~240微秒的存在低脈沖,主CPU收
53、到此信號(hào)表示復(fù)位成功。</p><p> 在一切工作準(zhǔn)備就緒時(shí),單片機(jī)只需向DS18B20發(fā)送相關(guān)的指令,即可向DS18B20讀取數(shù)據(jù)。其中表3-3和表3-4分別為ROM指令表和RAM指令表。</p><p> 表3-3 ROM指令表</p><p> 表3-4 RAM指令表 </p><p> 由于DS18B20是單總線結(jié)構(gòu),因
54、此DS18B20的引腳數(shù)很少,只有3個(gè)引腳,分別是:兩個(gè)電源引腳和一個(gè)數(shù)據(jù)引腳,而且DS18B20與微機(jī)的接法很簡單。圖3-16為DS18B20的接線電路圖。</p><p> 圖3-16 DS18B20接線電路</p><p> 3.6 霍爾傳感器電磁感應(yīng)電路</p><p> 霍爾效應(yīng)是指在半導(dǎo)體薄片兩端通以控制電流,并在薄片的垂直方向施加磁感應(yīng)強(qiáng)度為的
55、勻強(qiáng)磁場,則在垂直于電流和磁場的方向上,將產(chǎn)生電勢差為的霍爾電壓 。圖3-17為霍爾效應(yīng)原理圖。</p><p> 圖3-17 霍爾效應(yīng)原理圖</p><p> 霍爾開關(guān)是根據(jù)霍爾效應(yīng)制成的元件。它具有無觸電、低功耗、長使用壽命、響應(yīng)頻率高等特點(diǎn),內(nèi)部采用環(huán)氧樹脂封灌成一體化,所以能在各類惡劣環(huán)境下可靠的工作?;魻栭_關(guān)可應(yīng)用于接近開關(guān),壓力開關(guān),里程表等,作為一種新型的電器配件。&l
56、t;/p><p> 當(dāng)一塊通有電流的金屬或半導(dǎo)體薄片垂直地放在磁場中時(shí),薄片的兩端就會(huì)產(chǎn)生電位差,這種現(xiàn)象就稱為霍爾效應(yīng)。兩端具有的電位差值稱為霍爾電勢U,其表達(dá)式為:,其中K為霍爾系數(shù),I為薄片中通過的電流,B為外加磁場(洛倫磁力Lorrentz)的磁感應(yīng)強(qiáng)度,d是薄片的厚度。 </p><p> 霍爾開關(guān)就屬于這種有源磁電轉(zhuǎn)換器件,它是在霍爾效應(yīng)原理的基礎(chǔ)上,利用集成封裝和組裝工藝制作
57、而成,它可方便的把磁輸入信號(hào)轉(zhuǎn)換成實(shí)際應(yīng)用中的電信號(hào),同時(shí)又具備工業(yè)場合實(shí)際應(yīng)用易操作和可靠性的要求。由此可見,霍爾效應(yīng)的靈敏度高低與外加磁場的磁感應(yīng)強(qiáng)度成正比的關(guān)系。 </p><p> 霍爾開關(guān)的輸入端是以磁感應(yīng)強(qiáng)度B 來表征的,當(dāng)B 值達(dá)到一定的程度(如B1)時(shí),霍爾開關(guān)內(nèi)部的觸發(fā)器翻轉(zhuǎn),霍爾開關(guān)的輸出電平狀態(tài)也隨之翻轉(zhuǎn)。輸出端一般采用晶體管輸出,和接近開關(guān)類似有NPN、PNP、常開型、常閉型、鎖存型(
58、雙極性)、雙信號(hào)輸出之分。</p><p> 如圖3-18所示,霍爾傳感器的磁感應(yīng)為雙穩(wěn)態(tài)觸發(fā)方式,以保證可靠觸發(fā)。當(dāng)外加的磁感應(yīng)強(qiáng)度超過動(dòng)作點(diǎn)時(shí),傳感器輸出低電平,當(dāng)磁感應(yīng)強(qiáng)度降到動(dòng)作點(diǎn)以下時(shí),傳感器輸出電平不變,一直要降到釋放點(diǎn)時(shí),傳感器才由低電平躍變?yōu)楦唠娖健Ec之間的滯后使開關(guān)動(dòng)作更為可靠。</p><p> 圖3-18 霍爾開關(guān)特性</p><p>
59、 本設(shè)計(jì)采用NJK系列霍爾傳感器是由電壓調(diào)整器,霍爾電壓發(fā)生器,差分放大器,施密特觸發(fā)器和集電極開路的輸出極組成的磁敏傳感器,其輸入為磁感應(yīng)強(qiáng)度、輸出是一個(gè)數(shù)字電壓訊號(hào)。其特點(diǎn)是:電源電壓范圍廣(其工作電壓為5-24V直流電壓均可),開關(guān)頻率高(開關(guān)頻率為320KHZ),壽命長,體積小,安裝方便,能直接和晶體管及TTL或者M(jìn)OS等邏輯電路接口。圖3-19為霍爾傳感器與單片機(jī)的接線電路。</p><p> 圖3-
60、19 霍爾開關(guān)接線電路</p><p><b> 4 軟件設(shè)計(jì)</b></p><p> 恒溫水箱及其收費(fèi)系統(tǒng)的軟件設(shè)計(jì)主要包括六大模塊組成:初始化,DS18B20軟件模塊,霍爾傳感器檢測模塊,矩陣鍵盤掃描模塊,數(shù)碼管顯示模塊,繼電器控制模塊。</p><p> 4.1 總體程序流程圖</p><p> 整個(gè)系
61、統(tǒng)的總體程序如圖4-1所示。</p><p> 圖4-1 總體程序流程圖</p><p> 4.2 初始化流程圖</p><p> 初始化程序流程圖如圖4-2所示。</p><p> 圖4-2 初始化程序流程圖</p><p><b> 具體程序如下:</b></p>
62、<p> unsigned int num=1000;</p><p> unsigned int i=0,j=0;</p><p><b> RL=0;</b></p><p><b> start=0;</b></p><p><b> flag=0;</b&
63、gt;</p><p> 4.3 DS18B20軟件流程圖</p><p> DS18B20的軟件設(shè)計(jì)根據(jù)對(duì)DS18B20讀寫操作的時(shí)序圖,來獲取當(dāng)前溫度值。DS18B20軟件流程圖如圖4-3所示。</p><p> 圖4-3 DS18B20軟件設(shè)計(jì)流程圖</p><p> 4.3.1 DS18B20初始化</p>
64、<p> 讓DS18B20一段相對(duì)長時(shí)間低電平, 然后一段相對(duì)非常短時(shí)間高電平, 即可對(duì)DS18B20進(jìn)行初始化。初始化是單片機(jī)向DS18B20進(jìn)行訪問并讀取數(shù)據(jù)的必要步驟,無論什么命令,首先都要進(jìn)行初始化。具體程序如下:</p><p> void dsInit()</p><p><b> {</b></p><p> /
65、/對(duì)于11.0592MHz時(shí)鐘, unsigned int型的i, 作一個(gè)i++操作的時(shí)間大于為8us</p><p> unsigned int i; </p><p> ds = 0;//將DQ拉低,復(fù)位</p><p> i = 100; //拉低約800us, 符合協(xié)議要求的480us以上</p><p> whil
66、e(i>0) i--;</p><p> ds = 1; //產(chǎn)生一個(gè)上升沿, 進(jìn)入等待應(yīng)答狀態(tài)</p><p> i = 4; </p><p> while(i>0) i--; //等待狀態(tài)32us</p><p><b> }</b></p><p>
67、 //等待DS18B20響應(yīng)子程序</p><p> void dsWait()</p><p><b> {</b></p><p> unsigned int i;</p><p> while(ds); </p><p> while(~ds); //檢測到應(yīng)答脈沖</p
68、><p><b> i = 4;</b></p><p> while(i > 0) i--;</p><p><b> }</b></p><p> 4.3.2 向DS18B20讀寫數(shù)據(jù)程序</p><p> 將讀到的數(shù)據(jù)存儲(chǔ)起來,由于單片機(jī)的操作速度比DS18
69、B20的存儲(chǔ)速度來的快,因此單片機(jī)需要延遲時(shí)間,等待DS18B20存儲(chǔ)完成才進(jìn)行下一步工作。具體程序如下所示:</p><p> ////向DS18B20讀取一位數(shù)據(jù)</p><p> bit readBit()</p><p><b> {</b></p><p> unsigned int i;</p&
70、gt;<p><b> bit b;</b></p><p><b> ds = 0;</b></p><p> i++; //延時(shí)約8us, 符合協(xié)議要求至少保持1us</p><p><b> ds = 1; </b></p><p> i++;
71、 i++; //延時(shí)約16us, 符合協(xié)議要求的至少延時(shí)15us以上</p><p><b> b = ds;</b></p><p><b> i = 8; </b></p><p> while(i>0) i--; //延時(shí)約64us, 符合讀時(shí)隙不低于60us要求</p><p&g
72、t;<b> return b;</b></p><p><b> }</b></p><p> //讀取一字節(jié)數(shù)據(jù), 通過調(diào)用readBit()來實(shí)現(xiàn)</p><p> unsigned char readByte()</p><p><b> {</b></
73、p><p> unsigned int i;</p><p> unsigned char j, dat;</p><p><b> dat = 0;</b></p><p> for(i=0; i<8; i++)</p><p><b> {</b></p
74、><p> j = readBit();</p><p> //最先讀出的是最低位數(shù)據(jù)</p><p> dat = (j << 7) | (dat >> 1);</p><p><b> }</b></p><p> return dat;</p>&
75、lt;p><b> }</b></p><p> //向DS18B20寫入一字節(jié)數(shù)據(jù)</p><p> void writeByte(unsigned char dat)</p><p><b> {</b></p><p> unsigned int i;</p>&
76、lt;p> unsigned char j;</p><p><b> bit b;</b></p><p> for(j = 0; j < 8; j++)</p><p><b> {</b></p><p> b = dat & 0x01;</p>&
77、lt;p> dat >>= 1;</p><p> //寫"1", 將DQ拉低15us后, 在15us~60us內(nèi)將DQ拉高, 即完成寫1</p><p> if(b) //寫1</p><p><b> {</b></p><p><b> ds
78、= 0;</b></p><p> i++; i++; //拉低約16us, 符號(hào)要求15~60us內(nèi)</p><p> ds = 1; </p><p><b> i = 8; </b></p><p> while(i>0) </p><p> i--;
79、//延時(shí)約64us, 符合寫時(shí)隙不低于60us要求</p><p><b> }</b></p><p> else //寫"0", 將DQ拉低60us~120us</p><p><b> {</b></p><p><b> ds = 0;</b&g
80、t;</p><p> i = 8; while(i>0) i--; //拉低約64us, 符號(hào)要求</p><p><b> ds = 1;</b></p><p> i++; i++; //整個(gè)寫0時(shí)隙過程已經(jīng)超過60us, 這里就不用像寫1那樣, 再延時(shí)64us了</p><p><b>
81、 }</b></p><p><b> }</b></p><p><b> }</b></p><p> 4.3.3 溫度轉(zhuǎn)換程序</p><p> 單片機(jī)讀取DS18B20 16位二進(jìn)制數(shù)據(jù)時(shí),所以需要把后11位的二進(jìn)制轉(zhuǎn)化為十進(jìn)制進(jìn)制后在乘以0.0625便為所測的溫度。前
82、5個(gè)數(shù)字為符號(hào)位,當(dāng)前5位為1時(shí),讀取的溫度為負(fù)數(shù);當(dāng)前5位為0時(shí),讀取的溫度為正數(shù)。因此可知,DS18B20轉(zhuǎn)換的最小精度為0.0625℃。具體程序如下:</p><p> //向DS18B20發(fā)送溫度轉(zhuǎn)換命令</p><p> void sendChangeCmd()</p><p><b> {</b></p><
83、;p> dsInit(); //初始化DS18B20, 無論什么命令, 首先都要發(fā)起初始化</p><p> dsWait(); //等待DS18B20應(yīng)答</p><p> delay(1); //延時(shí)1ms, 因?yàn)镈S18B20會(huì)拉低DQ 60~240us作為應(yīng)答信號(hào)</p><p> writeByte(0xcc); //寫入跳過
84、序列號(hào)命令字 Skip Rom</p><p> writeByte(0x44); //寫入溫度轉(zhuǎn)換命令字 Convert T</p><p><b> }</b></p><p> //向DS18B20發(fā)送讀取數(shù)據(jù)命令</p><p> void sendReadCmd()</p><p&g
85、t;<b> {</b></p><p><b> dsInit();</b></p><p><b> dsWait();</b></p><p><b> delay(1);</b></p><p> writeByte(0xcc); //寫
86、入跳過序列號(hào)命令字 Skip Rom</p><p> writeByte(0xbe); //寫入讀取數(shù)據(jù)令字 Read Scratchpad</p><p><b> }</b></p><p><b> //獲取當(dāng)前溫度值</b></p><p> int getTmpValue()&l
87、t;/p><p><b> {</b></p><p> unsigned int tmpvalue;</p><p> int value; //存放溫度數(shù)值</p><p><b> float t;</b></p><p> unsigned char low,
88、high;</p><p> sendReadCmd();</p><p> //連續(xù)讀取兩個(gè)字節(jié)數(shù)據(jù)</p><p> low = readByte(); </p><p> high = readByte();</p><p> //將高低兩個(gè)字節(jié)合成一個(gè)整形變量</p><p>
89、 //計(jì)算機(jī)中對(duì)于負(fù)數(shù)是利用補(bǔ)碼來表示的</p><p> //若是負(fù)值, 讀取出來的數(shù)值是用補(bǔ)碼表示的, 可直接賦值給int型的value</p><p> tmpvalue = high;</p><p> tmpvalue <<= 8;</p><p> tmpvalue |= low;</p>&l
90、t;p> value = tmpvalue;</p><p> //使用DS18B20的默認(rèn)分辨率12位, 精確度為0.0625度, 即讀回?cái)?shù)據(jù)的最低位代表0.0625度</p><p> t = value * 0.0625;</p><p> //將它放大100倍, 使顯示時(shí)可顯示小數(shù)點(diǎn)后兩位, 并對(duì)小數(shù)點(diǎn)后第三進(jìn)行4舍5入</p>
91、<p> //如t=11.0625, 進(jìn)行計(jì)數(shù)后, 得到value = 1106, 即11.06 度</p><p> //如t=-11.0625, 進(jìn)行計(jì)數(shù)后, 得到value = -1106, 即-11.06 度</p><p> value = t * 100 + (value > 0 ? 0.5 : -0.5); //大于0加0.5, 小于0減0.5</
92、p><p> return value;</p><p><b> }</b></p><p> 4.4 數(shù)碼管顯示流程圖</p><p> 數(shù)碼管顯示主要包括3部分:實(shí)時(shí)顯示,設(shè)定值顯示,計(jì)費(fèi)額顯示。它們只是獲取的數(shù)值不同,顯示方式和原理是一樣的。本設(shè)計(jì)采用的是四位一體八位共陽數(shù)碼管,用軟件對(duì)數(shù)碼管進(jìn)行控制一般采用
93、編碼的形式,通過調(diào)用數(shù)組來達(dá)到有序的顯示數(shù)值效果,要使每位數(shù)碼管顯示不同數(shù)值必須采用動(dòng)態(tài)顯示的方式。所謂動(dòng)態(tài)顯示,就是將所有數(shù)碼管的8個(gè)顯示筆劃"a,b,c,d,e,f,g,dp "的同名端連在一起,另外為每個(gè)數(shù)碼管的公共極COM增加位元選通控制電路,位元選通由各自獨(dú)立的I/O線控制,當(dāng)單片機(jī)輸出字形碼時(shí),所有數(shù)碼管都接收到相同的字形碼,但究竟是那個(gè)數(shù)碼管會(huì)顯示出字形,取決于單片機(jī)對(duì)位元選通COM端電路的控制,所以我
94、們只要將需要顯示的數(shù)碼管的選通控制打開,該位元就顯示出字形,沒有選通的數(shù)碼管就不會(huì)亮。表4-1為共陽數(shù)碼管編碼表。</p><p> 表4-1 共陽數(shù)碼管編碼表</p><p> 透過分時(shí)輪流控制各個(gè)LED數(shù)碼管的COM端,就使各個(gè)數(shù)碼管輪流受控顯示,這就是動(dòng)態(tài)驅(qū)動(dòng)。在輪流顯示過程中,每位元數(shù)碼管的點(diǎn)亮?xí)r間為1~2ms,由于人的視覺暫留現(xiàn)象及發(fā)光二極體的余輝效應(yīng),盡管實(shí)際上各位數(shù)碼管
95、并非同時(shí)點(diǎn)亮,但只要掃描的速度足夠快,給人的印象就是一組穩(wěn)定的顯示資料,不會(huì)有閃爍感,動(dòng)態(tài)顯示的效果和靜態(tài)顯示是一樣的,能夠節(jié)省大量的I/O口,而且功耗更低。數(shù)組變量定義程序如下:</p><p> //0-F數(shù)碼管的編碼(共陽極)</p><p> unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,</p><
96、;p> 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};</p><p> //0-9數(shù)碼管的編碼(共陽極), 帶小數(shù)點(diǎn)</p><p> unsigned char code tableWidthDot[]={0x40, 0x79, 0x24, 0x30, 0x19, 0x12, 0x02, </p>
97、<p> 0x78, 0x00, 0x10};</p><p> 圖4-4為數(shù)碼管顯示程序流程圖。</p><p> 圖4-4 數(shù)碼管顯示流程圖</p><p> 4.4.1 實(shí)時(shí)顯示程序</p><p> 實(shí)時(shí)顯示數(shù)據(jù)是從DS18B20通過溫度數(shù)據(jù)獲取并且進(jìn)行溫度轉(zhuǎn)換中得到的。具體程序如下:</p>
98、<p> void display(int v) </p><p><b> {</b></p><p> unsigned char count;</p><p> unsigned int tmp = abs(v);</p><p> datas[0] = tmp / 1000;</p>
99、;<p> datas[1] = tmp % 1000 / 100;</p><p> datas[2] = tmp % 100 / 10;</p><p> datas[3] = tmp % 10;</p><p><b> if(v < 0)</b></p><p><b>
100、{</b></p><p> //關(guān)位選, 去除對(duì)上一位的影響</p><p> P0 = 0xff; </p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> wela = 0;</b></p><p><b> //段選
101、</b></p><p> P0 = 0xbf; //顯示"-"號(hào)</p><p> dula = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> dula = 0;</b></p><p><b> //位選</b></p>
102、<p> P0 = 0xfe; </p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> wela = 0;</b></p><p> delay(timeCount); </p><p><b> } </b></p>
103、;<p> for(count = 0; count <4; count++)</p><p><b> {</b></p><p> //關(guān)位選, 去除對(duì)上一位的影響</p><p> P0 = 0xff; </p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</
104、p><p><b> wela = 0;</b></p><p><b> //段選</b></p><p> if(count != 1)</p><p><b> {</b></p><p> if((count == 0 &&
105、 datas[count] == 0) )</p><p><b> {</b></p><p> P0 = 0xff; //當(dāng)最高位為0時(shí), 不作顯示</p><p><b> }</b></p><p><b> else</b></p><p&
106、gt; P0 = table[datas[count]]; //顯示數(shù)字</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> P0 = tableWidthDot[datas[co
107、unt]]; //顯示帶小數(shù)點(diǎn)數(shù)字</p><p><b> }</b></p><p> dula = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> dula = 0;</b></p><p><b> //位選 </b></p>
108、<p> P0=_cror_(0xf7,count); //選擇第(count + 1) 個(gè)數(shù)碼管</p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> wela = 0;</b></p><p> delay(timeCount); </p><p><
109、;b> }</b></p><p><b> }</b></p><p> 4.4.2 設(shè)定值顯示程序</p><p> 設(shè)定值顯示數(shù)據(jù)是從矩陣鍵盤掃描按鍵的數(shù)值得到的。具體程序如下:</p><p> void setdisplay()</p><p><b&g
110、t; {</b></p><p> unsigned int count;</p><p> if(flag>5)</p><p><b> flag=1;</b></p><p> if(set==1)</p><p><b> {</b>&
111、lt;/p><p> for(count =0 ; count <flag-1; count++)</p><p><b> {</b></p><p> P0 = 0xff; //關(guān)位選, 去除對(duì)上一位的影響</p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p>&l
112、t;p><b> wela = 0;</b></p><p> //段 選 </p><p> if(count!=1)</p><p> P0 = table[number[count]]; //顯示不為零第一位數(shù)字</p><p><b> else</b></p
113、><p> P0 = tableWidthDot[number[count]]; //顯示帶小數(shù)點(diǎn)數(shù)字</p><p> dula = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> dula = 0;</b></p><p><b> //位選 </b></p>
114、<p> P0=_cror_(0x7f,count); //選擇第(count + 1) 個(gè)數(shù)碼管</p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> wela = 0;</b></p><p> delay(timeCount); </p><p>&
115、lt;b> }</b></p><p><b> } </b></p><p><b> } </b></p><p> 4.4.3 計(jì)費(fèi)額顯示程序</p><p> void chargedisplay()</p><p><
116、;b> {</b></p><p> unsigned char count;</p><p> timer[0] = num / 1000;</p><p> timer[1] = num% 1000 / 100;</p><p> timer[2] = num% 100 / 10;</p><
117、;p> timer[3] = num% 10;</p><p> for(count = 0; count <4; count++)</p><p><b> {</b></p><p> //關(guān)位選, 去除對(duì)上一位的影響</p><p> P0 = 0xff; </p><p&
118、gt; wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> wela = 0;</b></p><p><b> //段選</b></p><p> if(count != 1)</p><p><b> {</b></p>
119、<p> if((count == 0 && timer[count] == 0) )</p><p><b> {</b></p><p> P0 = 0xff; //當(dāng)最高位為0時(shí), 不作顯示</p><p><b> }</b></p><p><b&g
120、t; else</b></p><p> P0 = table[timer[count]]; //顯示數(shù)字</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p>&l
121、t;p> P0 = tableWidthDot[timer[count]]; //顯示帶小數(shù)點(diǎn)數(shù)字</p><p><b> }</b></p><p> dula = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> dula = 0;</b></p><p>&l
122、t;b> //位選 </b></p><p> P0=_cror_(0xf7,count); //選擇第(count + 1) 個(gè)數(shù)碼管</p><p> wela = 1; //打開鎖存, 給它一個(gè)下降沿量</p><p><b> wela = 0;</b></p><p> delay(
123、timeCount); </p><p><b> }</b></p><p><b> }</b></p><p> 4.5 矩陣鍵盤掃描流程圖</p><p> 其思路是為了提高I/O口的利用率,采用矩陣式鍵盤,將所有的列都拉高,將所有列拉低,來讀取每一行的輸入值,一旦某一行右鍵按下并且
124、被檢測到,則相應(yīng)的列輸入將為低電平,從而讀出相應(yīng)的編碼并且賦予對(duì)應(yīng)的數(shù)值,然后返回。</p><p> 其中值得注意的是,由于按鍵設(shè)計(jì)的機(jī)械性,按鍵在閉合和斷開時(shí),觸點(diǎn)會(huì)存在抖動(dòng)現(xiàn)象,如圖4-5所示。若不消除抖動(dòng)的話,人的手指在按下的瞬間單片機(jī)容易會(huì)誤操作。同理松手也會(huì)有出現(xiàn)這樣的情況,不利于操作,因此應(yīng)該加入消抖操作,一般都采用軟件去抖方式。</p><p> 圖4-5 按鍵抖動(dòng)實(shí)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于c51恒溫水箱及其收費(fèi)系統(tǒng)設(shè)計(jì)【開題報(bào)告】
- 基于c51恒溫水箱及其收費(fèi)系統(tǒng)設(shè)計(jì)【畢業(yè)論文+任務(wù)書+開題報(bào)告+文獻(xiàn)綜述+外文翻譯】
- 恒溫水箱及其收費(fèi)系統(tǒng)設(shè)計(jì)[任務(wù)書]
- 淺談恒溫水箱及其收費(fèi)系統(tǒng)【文獻(xiàn)綜述】
- plc恒溫水箱設(shè)計(jì)【3張cad圖紙+畢業(yè)論文】
- plc恒溫水箱設(shè)計(jì)【3張cad圖紙+畢業(yè)論文】
- PLC恒溫水箱設(shè)計(jì)論文.doc
- PLC恒溫水箱設(shè)計(jì)論文.doc
- 恒溫水箱.doc
- 恒溫水箱設(shè)計(jì)和研究
- plc控制恒溫水箱
- 基于c51單片機(jī)的多路數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 基于c51單片機(jī)的多路數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)畢業(yè)論文
- 基于c51的轉(zhuǎn)速測量課程設(shè)計(jì)論文
- 基于c51單片機(jī)的多路數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)畢業(yè)設(shè)計(jì)論文
- dc-0510低溫恒溫槽超級(jí)恒溫水箱
- 基于c51單片機(jī)設(shè)計(jì)
- 基于c51的溫度控制系統(tǒng)
- 基于c51單片機(jī)的船舶輔鍋爐水位自動(dòng)控制系統(tǒng)設(shè)計(jì)【畢業(yè)論文】
- c51單片機(jī)畢業(yè)設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論