文仕海
(貴州師范大學(xué),貴州貴陽(yáng),550025)
單片機(jī)設(shè)計(jì)與開(kāi)發(fā)比賽中通常都會(huì)涉及兩個(gè)不同界面的切換問(wèn)題,然而對(duì)于大部分比賽者而言這也是難點(diǎn)之一,而溫度傳感器DS18B20 和日歷時(shí)鐘寄存器DS1302 都屬于常用元器件,也是比賽??嫉狞c(diǎn)。完全可以以此為基礎(chǔ)進(jìn)行相應(yīng)的開(kāi)發(fā),開(kāi)發(fā)一個(gè)雙界面獨(dú)立顯示,同時(shí)具有報(bào)警功能和鬧鐘功能的系統(tǒng),具有很強(qiáng)的實(shí)用性。而溫度傳感器和日歷時(shí)鐘寄存器被廣泛的應(yīng)用于各種領(lǐng)域,銷(xiāo)售數(shù)量也是位居榜首,所以具有很強(qiáng)的研究?jī)r(jià)值。設(shè)計(jì)報(bào)警功能和鬧鐘功能也更加的符合人們的需求,是比較人性化的設(shè)計(jì),所以該課題是具有一定的研究?jī)r(jià)值的,是值得深入了解的設(shè)計(jì)。
以溫度傳感器DS18B20 和日歷時(shí)鐘寄存器DS1302 為核心元器件,以STC15F2K61S2 單片機(jī)為整個(gè)系統(tǒng)的控制中樞,搭建一個(gè)日歷時(shí)鐘和溫度顯示可互相切換的顯示界面,用于顯示當(dāng)前的實(shí)時(shí)溫度和時(shí)間,同時(shí)可設(shè)計(jì)報(bào)警功能和鬧鐘提醒功能,更加的貼合人們的實(shí)際需求。通過(guò)獨(dú)立按鍵來(lái)實(shí)現(xiàn)不同界面之間的切換問(wèn)題,由8 個(gè)共陽(yáng)的數(shù)碼管來(lái)顯示當(dāng)前界面(溫度界面或時(shí)間界面)。
圖1 總體設(shè)計(jì)框圖
利用溫度傳感器、日歷時(shí)鐘寄存器、STC15F2K61S2單片機(jī)、蜂鳴器、獨(dú)立鍵盤(pán)、電源和顯示設(shè)備(8 位共陽(yáng)的數(shù)碼管)搭建的整個(gè)系統(tǒng)(原理圖如圖2),既能夠滿足實(shí)際需求也能完成一些個(gè)性化的設(shè)計(jì),更貼近人們的生活。該系統(tǒng)可分為獨(dú)立鍵盤(pán)、電源模塊、溫度轉(zhuǎn)換、日歷時(shí)鐘存儲(chǔ)、外部設(shè)備顯示和報(bào)警/鬧鐘模塊六個(gè)部分。首先,日歷時(shí)鐘寄存器是時(shí)間顯示界面上參數(shù)的具體來(lái)源,使用之前需要對(duì)日歷時(shí)鐘寄存器DS1302 寫(xiě)入一個(gè)具體的時(shí)間,然后再?gòu)闹凶x取時(shí)間繼而才能在界面上顯示。其次溫度傳感器DS18B20 需要及時(shí)的讀取外部的實(shí)時(shí)溫度并完成一個(gè)轉(zhuǎn)換的過(guò)程(轉(zhuǎn)換為人們可懂的數(shù)據(jù)顯示出來(lái))。獨(dú)立鍵盤(pán)部分可控制整個(gè)電路的開(kāi)與關(guān),主要就是控制兩個(gè)不同界面之間的切換。電源模塊部分為這個(gè)電路乃至系統(tǒng)提供所需的電源,保證STC15F2K61S2 單片機(jī)和其他需要使用電源的元器件的正常工作。外部顯示設(shè)備就是8 位的共陽(yáng)數(shù)碼管組成的(主要是為了方便人們理解,基本外設(shè)的工作原理),是整個(gè)系統(tǒng)內(nèi)的主要的顯示單元,完成時(shí)間界面和溫度界面的顯示。報(bào)警/鬧鐘模塊是基于人們的需求設(shè)計(jì)而來(lái)的,報(bào)警模式可以通過(guò)設(shè)定轉(zhuǎn)換之后的實(shí)時(shí)溫度大于某一溫度或是低于某一溫度時(shí),提醒人們做一些人為的防護(hù),避免自身受到傷害;而鬧鐘提醒功能也是目前最常使用的功能之一了,在規(guī)定的時(shí)間提醒人們做什么事情,被廣泛的應(yīng)用于辦公、學(xué)習(xí)等諸多場(chǎng)所。最后,通過(guò)Keil5 軟件來(lái)編寫(xiě)代碼、匯編程序,然后通過(guò)stc-isp 軟件燒錄在STC15F2K61S2 單片機(jī)中,再結(jié)合相應(yīng)的硬件設(shè)施和簡(jiǎn)要的電路就能很好的來(lái)實(shí)現(xiàn)相應(yīng)的功能。
圖2 硬件的原理圖
現(xiàn)實(shí)生活中我們最常用的是C51和C52系列的單片機(jī),是一款比較實(shí)用的單片機(jī),同時(shí)也是一款非常適合初學(xué)者上手的單片機(jī)。但是相較于一些高性能的單片機(jī)而言該系列的單片機(jī)具有運(yùn)行速度相對(duì)較慢,自身的保護(hù)能力差,很容易燒壞芯片的缺點(diǎn),同時(shí)也只能適合普通的教學(xué)環(huán)境和對(duì)性能要求不高的場(chǎng)合。而選擇STC15F2K61S2 單片機(jī)不僅可以完全兼容傳統(tǒng)的C51 系列的單片機(jī)指令,還具有大容量的RAM 數(shù)據(jù)存儲(chǔ)器、高速、低功耗設(shè)計(jì)、SPI 高速同步串行通信接口(實(shí)現(xiàn)日歷時(shí)鐘寄存器和時(shí)間顯示界面之間的串行通信,提高通信效率,減小誤差)、工作頻率低等特點(diǎn)。選擇STC15F2K61S2 單片機(jī)不僅看中它自身的性能優(yōu)點(diǎn),極其重要的一點(diǎn)就是該單片機(jī)完全兼容C51的指令,不會(huì)存在太大的過(guò)渡問(wèn)題,人們上手起來(lái)很快,學(xué)習(xí)起來(lái)也比較方便,實(shí)用性非常強(qiáng),可以廣泛的應(yīng)用于很多場(chǎng)所。
簡(jiǎn)而言之,溫度傳感器就是指可以感受外界溫度并且更進(jìn)一步的轉(zhuǎn)為可用的輸出信號(hào)的傳感器,對(duì)于外界環(huán)境的溫度測(cè)量非常準(zhǔn)確,使用也比較方便,廣泛的應(yīng)用于農(nóng)業(yè)、工業(yè)、電子車(chē)間、火電站和倉(cāng)庫(kù)等場(chǎng)所。常用的溫度傳感器有很多,例如:HTF3223、HF3223、LM335ADT、DS18S20、DS18B20 等,我們這里采用的是型號(hào)為DS18B20的溫度傳感器,也是目前最常用、最主流的傳感器之一。該傳感器具有體積小、抗干擾性強(qiáng)、與單片機(jī)接口簡(jiǎn)單等顯著特點(diǎn)。
DS18B20 數(shù)字溫度計(jì)提供9 位(二進(jìn)制)溫度讀數(shù),讀取當(dāng)前器件或外界實(shí)時(shí)的溫度。溫度信息經(jīng)過(guò)一條單線接口送入DS18B20 存儲(chǔ)或從DS18B20 讀出顯示。因此從主機(jī)CPU 到DS18B20 之間的通信僅需一條數(shù)據(jù)線(和地線),DS18B20的電源可由數(shù)據(jù)線本身提供而不需要外部電源,DS18B20 以每一次0.5℃的量變化,可測(cè)量溫度范圍是-55℃至+125℃,并且可在1s 內(nèi)完成溫度與數(shù)字的轉(zhuǎn)換過(guò)程。然后再通過(guò)P0 端口將轉(zhuǎn)換之后的數(shù)據(jù)傳輸至外設(shè)顯示,繼而完成溫度界面的顯示功能。
通常的研究之中都是將GND 引腳直接接地,將DQ 引腳作為溫度數(shù)字的輸入/輸出端口(可與數(shù)碼管輸入端相連),而VDD 引腳可選擇連接+5V 電壓。DS18B20的溫度轉(zhuǎn)換與讀取過(guò)程:(1)DS18B20 復(fù)位。(2)寫(xiě)入字節(jié)0Xcc,跳過(guò)ROM 指令區(qū)域。(3)寫(xiě)入字節(jié)0X44,開(kāi)始實(shí)時(shí)溫度的讀取與轉(zhuǎn)換。(4)延時(shí)700ms-900ms。(5)DS18B20 復(fù)位。(6)寫(xiě)入字節(jié)0Xcc,跳過(guò)ROM 指令區(qū)域。(7)寫(xiě)入字節(jié)0Xbe,讀取高速暫存器的溫度值。(8)讀取暫存器的第0 個(gè)字節(jié),溫度數(shù)據(jù)LSB。(9)讀取暫存器的第1 個(gè)字節(jié),溫度數(shù)據(jù)MSB。(10)DS18B20 復(fù)位,表示讀取數(shù)據(jù)結(jié)束。(11)將LSB 和MSB 整合為一個(gè)16 位數(shù)據(jù)。(12)判斷讀取數(shù)據(jù)的符號(hào),進(jìn)行正負(fù)溫度的處理。而且在寫(xiě)入字節(jié)地址之前,一定要先要初始化,使得DS18B20 處于初始狀態(tài),以免產(chǎn)生誤差。在編寫(xiě)代碼時(shí)需識(shí)記的三個(gè)地址:0Xcc、0X44、0Xbe,這是規(guī)定的地址具有唯一性。
圖3 DS18B20的管腳排列
日歷時(shí)鐘寄存器就相當(dāng)于若干個(gè)儲(chǔ)存器的集合,儲(chǔ)存讀入的數(shù)據(jù)或是即將要取出的數(shù)據(jù),而其內(nèi)部地址通常被劃分為存儲(chǔ)讀入數(shù)據(jù)的地址和存儲(chǔ)取出數(shù)據(jù)的地址兩個(gè)部分?,F(xiàn)在市場(chǎng)上主流的日歷時(shí)鐘寄存器有DS1302、DS1307、PCF8485 等,但是通常使用的日歷時(shí)鐘寄存器都是DS1302型號(hào)的,DS1302 日歷時(shí)鐘寄存器是目前使用范圍最廣、功能比較好的一款日歷時(shí)鐘寄存器了。
DS1302 是一款涓流式充電時(shí)鐘芯片其中包括了實(shí)時(shí)時(shí)鐘/日歷和31 字節(jié)靜態(tài)RAM 兩個(gè)部分,而實(shí)時(shí)時(shí)鐘就相當(dāng)于一款電子手表,可提供秒、分、時(shí)、日、星期、月、年等基本信息。采用SPI 接口方式與微控制器進(jìn)行同步通信,同時(shí)采用了突發(fā)方式可實(shí)現(xiàn)多個(gè)字節(jié)的寫(xiě)入或讀出的數(shù)據(jù)一次性傳送。在DS1302 中有兩個(gè)存儲(chǔ)器:實(shí)時(shí)時(shí)鐘/日歷寄存器與靜態(tài)RAM 存儲(chǔ)器,而本次的研究我們使用到的是前者日歷時(shí)鐘寄存器。使用DS1302 芯片具有低功耗、保證數(shù)據(jù)和時(shí)鐘信息的串行實(shí)時(shí)讀取和寫(xiě)入的優(yōu)點(diǎn)。
DS1302 在工作狀態(tài)下要將復(fù)位腳RST 置為高電平并且將8 位的地址信息和命令信息裝入移位寄存器進(jìn)行保存,進(jìn)而實(shí)現(xiàn)對(duì)于DS1302的一個(gè)初始化過(guò)程。在使用DS1302讀取或者寫(xiě)入數(shù)據(jù)過(guò)程中需注意SPI 接口對(duì)應(yīng)的時(shí)序:在SCLK 時(shí)鐘信號(hào)的上升沿,數(shù)據(jù)從外部寫(xiě)入DS1302;在SCLK時(shí)鐘信號(hào)的下降沿,數(shù)據(jù)從DS1302 讀出在數(shù)碼管上顯示。
圖4 DS1302 內(nèi)部結(jié)構(gòu)
DS1302 驅(qū)動(dòng)程序框圖如圖5 所示。
圖5
(1)在8 位的數(shù)碼管上面設(shè)置溫度顯示界面(保留一位小數(shù)),第一位設(shè)置為顯示P(表示當(dāng)前界面是溫度界面),中間三位顯示數(shù)字0,其余位則用來(lái)顯示當(dāng)前溫度(小數(shù)點(diǎn)后面保留一位)。
(2)在設(shè)置時(shí)間顯示界面時(shí),前兩位表示時(shí),第三和第四位顯示“-”,其余四位分別對(duì)應(yīng)顯示分和秒。
(3)因?yàn)橛玫搅? 位的共陽(yáng)極數(shù)碼管來(lái)顯示溫度界面和時(shí)間界面,所以需要定義段碼表(將待顯示數(shù)字對(duì)應(yīng)的段碼給到P0,即可在數(shù)碼管上面顯示相應(yīng)的數(shù)值)。
(4)通過(guò)獨(dú)立鍵盤(pán)控制兩個(gè)界面之間的切換(獨(dú)立鍵盤(pán)與P3 端口連接),用一個(gè)狀態(tài)標(biāo)志位Status 來(lái)區(qū)分目前所處的何種顯示界面。
(5)應(yīng)該合理使用延時(shí)函數(shù),消除按鍵的抖動(dòng)影響。
(6)定義一個(gè)變量(temp)來(lái)暫存讀取出來(lái)的溫度,選取一個(gè)合適的選擇器來(lái)控制8 位數(shù)碼管的選通,通過(guò)P0 來(lái)傳輸顯示的數(shù)據(jù)。
(7)界面切換時(shí)的參考代碼:
該模塊的報(bào)警功能設(shè)置主要是基于溫度傳感器所測(cè)溫度來(lái)設(shè)計(jì)的。起初需要在報(bào)警模塊中設(shè)立兩個(gè)臨界參數(shù),在溫度傳感器實(shí)時(shí)讀取與轉(zhuǎn)換溫度的同時(shí),會(huì)將讀取的實(shí)時(shí)溫度與提前設(shè)置好的臨界參數(shù)做一個(gè)對(duì)比。當(dāng)讀取溫度大于臨界參數(shù)時(shí),報(bào)警模塊開(kāi)始工作發(fā)出響聲提醒人們外界溫度過(guò)高,應(yīng)該注意避暑、適當(dāng)休息;當(dāng)讀取溫度小于臨界參數(shù)時(shí),報(bào)警模塊也會(huì)開(kāi)始工作發(fā)出響聲提醒人們外界溫度過(guò)低,應(yīng)該注意保暖、維持體溫。
鬧鐘功能模塊的具體功能實(shí)現(xiàn)是利用STC15F2K61S2單片機(jī)的定時(shí)器或計(jì)數(shù)器功能來(lái)實(shí)現(xiàn)的。人們可以根據(jù)自己的生活習(xí)慣制定好具體的時(shí)間安排表,然后在通過(guò)計(jì)數(shù)器或定時(shí)器模塊來(lái)實(shí)現(xiàn)鬧鐘,這個(gè)功能模塊可以間接性的幫助人們管理生活,也是人們常用的功能之一。更進(jìn)一步地,可為了提高運(yùn)算效率將定時(shí)器和計(jì)數(shù)器的相關(guān)指令代碼寫(xiě)成函數(shù)的形式進(jìn)行存儲(chǔ),這樣一來(lái)在實(shí)現(xiàn)該鬧鐘功能模塊時(shí)速度會(huì)提升很多,傳遞的消息也更具有時(shí)效性和價(jià)值性。
電源模塊的選擇還是比較寬泛的,可以直接在電路板上面裝載一個(gè)電源供應(yīng)器,也可以使用幾節(jié)小電池串聯(lián)從而得到一個(gè)理想的電壓值。選擇一個(gè)尺寸合適的電池一方面可以方便攜帶,另一方面也便于整個(gè)后期的外形包裝。但是在選取電池時(shí),一定要滿足基本的參數(shù)要求,保證整個(gè)系統(tǒng)能夠有條不紊的工作。
我們常用的外部顯示設(shè)備非常之多,在這里主要使用到的就是8 位共陽(yáng)的數(shù)碼管所組成的一個(gè)顯示器。它們的公共端都接在高電平上面,只需要在P0 口上輸入相應(yīng)的段碼就可以顯示對(duì)應(yīng)的數(shù)字。該外設(shè)結(jié)構(gòu)簡(jiǎn)單、價(jià)格便宜、工作原理易懂、而且非常方便攜帶。同時(shí)外部顯示設(shè)備也可以結(jié)合自身需求,選用其他的液晶顯示器作為外設(shè),該模塊沒(méi)有特殊的要求。
現(xiàn)如今有很多的設(shè)備都用到了日歷時(shí)鐘和溫度顯示,并且也取得了一定的成果。電子時(shí)鐘日歷和液晶電視等設(shè)備就是最典型的例子之一,但是現(xiàn)階段的大部分設(shè)備都是同時(shí)顯示這兩個(gè)重要參數(shù),很少有獨(dú)立顯示的。隨著人們生活水平的提高,人們的需求也在發(fā)生相應(yīng)的改變,日歷時(shí)鐘與溫度顯示作為一個(gè)基本應(yīng)用也必須做出相應(yīng)的改變來(lái)迎合人們各樣的需求。換言之可以將其應(yīng)用到農(nóng)業(yè)、工業(yè)、醫(yī)療等更多的領(lǐng)域,精致設(shè)備的同時(shí),以此為基礎(chǔ)開(kāi)發(fā)更多的應(yīng)用。以日歷時(shí)鐘與溫度顯示為基礎(chǔ)元件的雙界面切換的多功能系統(tǒng),不僅可以滿足人們的基本生活需求,相對(duì)之前的應(yīng)用也會(huì)更加的直觀,使用起來(lái)也會(huì)更加的便利。
通過(guò)使用溫度傳感器DS18B20 和日歷時(shí)鐘寄存器DS1302 為主要元器件,利用獨(dú)立按鍵來(lái)做控制器,能夠很好的實(shí)現(xiàn)兩種界面的切換問(wèn)題。一方面可以加強(qiáng)對(duì)于元器件的認(rèn)識(shí),另一方面對(duì)于界面切換問(wèn)題的有了實(shí)質(zhì)性的認(rèn)識(shí)。對(duì)于一些簡(jiǎn)單的界面切換問(wèn)題可以很好的完成,可塑性非常強(qiáng),適用范圍也非常廣。以此為基礎(chǔ)制作而成的顯示系統(tǒng)也具有一定的實(shí)用性,成本低廉、而又能達(dá)到一定的效果,是具有一定的研究?jī)r(jià)值的。