文仕海
(貴州師范大學,貴州貴陽,550025)
單片機設計與開發比賽中通常都會涉及兩個不同界面的切換問題,然而對于大部分比賽者而言這也是難點之一,而溫度傳感器DS18B20 和日歷時鐘寄存器DS1302 都屬于常用元器件,也是比賽常考的點。完全可以以此為基礎進行相應的開發,開發一個雙界面獨立顯示,同時具有報警功能和鬧鐘功能的系統,具有很強的實用性。而溫度傳感器和日歷時鐘寄存器被廣泛的應用于各種領域,銷售數量也是位居榜首,所以具有很強的研究價值。設計報警功能和鬧鐘功能也更加的符合人們的需求,是比較人性化的設計,所以該課題是具有一定的研究價值的,是值得深入了解的設計。
以溫度傳感器DS18B20 和日歷時鐘寄存器DS1302 為核心元器件,以STC15F2K61S2 單片機為整個系統的控制中樞,搭建一個日歷時鐘和溫度顯示可互相切換的顯示界面,用于顯示當前的實時溫度和時間,同時可設計報警功能和鬧鐘提醒功能,更加的貼合人們的實際需求。通過獨立按鍵來實現不同界面之間的切換問題,由8 個共陽的數碼管來顯示當前界面(溫度界面或時間界面)。

圖1 總體設計框圖
利用溫度傳感器、日歷時鐘寄存器、STC15F2K61S2單片機、蜂鳴器、獨立鍵盤、電源和顯示設備(8 位共陽的數碼管)搭建的整個系統(原理圖如圖2),既能夠滿足實際需求也能完成一些個性化的設計,更貼近人們的生活。該系統可分為獨立鍵盤、電源模塊、溫度轉換、日歷時鐘存儲、外部設備顯示和報警/鬧鐘模塊六個部分。首先,日歷時鐘寄存器是時間顯示界面上參數的具體來源,使用之前需要對日歷時鐘寄存器DS1302 寫入一個具體的時間,然后再從中讀取時間繼而才能在界面上顯示。其次溫度傳感器DS18B20 需要及時的讀取外部的實時溫度并完成一個轉換的過程(轉換為人們可懂的數據顯示出來)。獨立鍵盤部分可控制整個電路的開與關,主要就是控制兩個不同界面之間的切換。電源模塊部分為這個電路乃至系統提供所需的電源,保證STC15F2K61S2 單片機和其他需要使用電源的元器件的正常工作。外部顯示設備就是8 位的共陽數碼管組成的(主要是為了方便人們理解,基本外設的工作原理),是整個系統內的主要的顯示單元,完成時間界面和溫度界面的顯示。報警/鬧鐘模塊是基于人們的需求設計而來的,報警模式可以通過設定轉換之后的實時溫度大于某一溫度或是低于某一溫度時,提醒人們做一些人為的防護,避免自身受到傷害;而鬧鐘提醒功能也是目前最常使用的功能之一了,在規定的時間提醒人們做什么事情,被廣泛的應用于辦公、學習等諸多場所。最后,通過Keil5 軟件來編寫代碼、匯編程序,然后通過stc-isp 軟件燒錄在STC15F2K61S2 單片機中,再結合相應的硬件設施和簡要的電路就能很好的來實現相應的功能。

圖2 硬件的原理圖
現實生活中我們最常用的是C51和C52系列的單片機,是一款比較實用的單片機,同時也是一款非常適合初學者上手的單片機。但是相較于一些高性能的單片機而言該系列的單片機具有運行速度相對較慢,自身的保護能力差,很容易燒壞芯片的缺點,同時也只能適合普通的教學環境和對性能要求不高的場合。而選擇STC15F2K61S2 單片機不僅可以完全兼容傳統的C51 系列的單片機指令,還具有大容量的RAM 數據存儲器、高速、低功耗設計、SPI 高速同步串行通信接口(實現日歷時鐘寄存器和時間顯示界面之間的串行通信,提高通信效率,減小誤差)、工作頻率低等特點。選擇STC15F2K61S2 單片機不僅看中它自身的性能優點,極其重要的一點就是該單片機完全兼容C51的指令,不會存在太大的過渡問題,人們上手起來很快,學習起來也比較方便,實用性非常強,可以廣泛的應用于很多場所。
簡而言之,溫度傳感器就是指可以感受外界溫度并且更進一步的轉為可用的輸出信號的傳感器,對于外界環境的溫度測量非常準確,使用也比較方便,廣泛的應用于農業、工業、電子車間、火電站和倉庫等場所。常用的溫度傳感器有很多,例如:HTF3223、HF3223、LM335ADT、DS18S20、DS18B20 等,我們這里采用的是型號為DS18B20的溫度傳感器,也是目前最常用、最主流的傳感器之一。該傳感器具有體積小、抗干擾性強、與單片機接口簡單等顯著特點。
DS18B20 數字溫度計提供9 位(二進制)溫度讀數,讀取當前器件或外界實時的溫度。溫度信息經過一條單線接口送入DS18B20 存儲或從DS18B20 讀出顯示。因此從主機CPU 到DS18B20 之間的通信僅需一條數據線(和地線),DS18B20的電源可由數據線本身提供而不需要外部電源,DS18B20 以每一次0.5℃的量變化,可測量溫度范圍是-55℃至+125℃,并且可在1s 內完成溫度與數字的轉換過程。然后再通過P0 端口將轉換之后的數據傳輸至外設顯示,繼而完成溫度界面的顯示功能。
通常的研究之中都是將GND 引腳直接接地,將DQ 引腳作為溫度數字的輸入/輸出端口(可與數碼管輸入端相連),而VDD 引腳可選擇連接+5V 電壓。DS18B20的溫度轉換與讀取過程:(1)DS18B20 復位。(2)寫入字節0Xcc,跳過ROM 指令區域。(3)寫入字節0X44,開始實時溫度的讀取與轉換。(4)延時700ms-900ms。(5)DS18B20 復位。(6)寫入字節0Xcc,跳過ROM 指令區域。(7)寫入字節0Xbe,讀取高速暫存器的溫度值。(8)讀取暫存器的第0 個字節,溫度數據LSB。(9)讀取暫存器的第1 個字節,溫度數據MSB。(10)DS18B20 復位,表示讀取數據結束。(11)將LSB 和MSB 整合為一個16 位數據。(12)判斷讀取數據的符號,進行正負溫度的處理。而且在寫入字節地址之前,一定要先要初始化,使得DS18B20 處于初始狀態,以免產生誤差。在編寫代碼時需識記的三個地址:0Xcc、0X44、0Xbe,這是規定的地址具有唯一性。

圖3 DS18B20的管腳排列
日歷時鐘寄存器就相當于若干個儲存器的集合,儲存讀入的數據或是即將要取出的數據,而其內部地址通常被劃分為存儲讀入數據的地址和存儲取出數據的地址兩個部分。現在市場上主流的日歷時鐘寄存器有DS1302、DS1307、PCF8485 等,但是通常使用的日歷時鐘寄存器都是DS1302型號的,DS1302 日歷時鐘寄存器是目前使用范圍最廣、功能比較好的一款日歷時鐘寄存器了。
DS1302 是一款涓流式充電時鐘芯片其中包括了實時時鐘/日歷和31 字節靜態RAM 兩個部分,而實時時鐘就相當于一款電子手表,可提供秒、分、時、日、星期、月、年等基本信息。采用SPI 接口方式與微控制器進行同步通信,同時采用了突發方式可實現多個字節的寫入或讀出的數據一次性傳送。在DS1302 中有兩個存儲器:實時時鐘/日歷寄存器與靜態RAM 存儲器,而本次的研究我們使用到的是前者日歷時鐘寄存器。使用DS1302 芯片具有低功耗、保證數據和時鐘信息的串行實時讀取和寫入的優點。
DS1302 在工作狀態下要將復位腳RST 置為高電平并且將8 位的地址信息和命令信息裝入移位寄存器進行保存,進而實現對于DS1302的一個初始化過程。在使用DS1302讀取或者寫入數據過程中需注意SPI 接口對應的時序:在SCLK 時鐘信號的上升沿,數據從外部寫入DS1302;在SCLK時鐘信號的下降沿,數據從DS1302 讀出在數碼管上顯示。

圖4 DS1302 內部結構
DS1302 驅動程序框圖如圖5 所示。

圖5
(1)在8 位的數碼管上面設置溫度顯示界面(保留一位小數),第一位設置為顯示P(表示當前界面是溫度界面),中間三位顯示數字0,其余位則用來顯示當前溫度(小數點后面保留一位)。
(2)在設置時間顯示界面時,前兩位表示時,第三和第四位顯示“-”,其余四位分別對應顯示分和秒。
(3)因為用到了8 位的共陽極數碼管來顯示溫度界面和時間界面,所以需要定義段碼表(將待顯示數字對應的段碼給到P0,即可在數碼管上面顯示相應的數值)。
(4)通過獨立鍵盤控制兩個界面之間的切換(獨立鍵盤與P3 端口連接),用一個狀態標志位Status 來區分目前所處的何種顯示界面。
(5)應該合理使用延時函數,消除按鍵的抖動影響。
(6)定義一個變量(temp)來暫存讀取出來的溫度,選取一個合適的選擇器來控制8 位數碼管的選通,通過P0 來傳輸顯示的數據。
(7)界面切換時的參考代碼:


該模塊的報警功能設置主要是基于溫度傳感器所測溫度來設計的。起初需要在報警模塊中設立兩個臨界參數,在溫度傳感器實時讀取與轉換溫度的同時,會將讀取的實時溫度與提前設置好的臨界參數做一個對比。當讀取溫度大于臨界參數時,報警模塊開始工作發出響聲提醒人們外界溫度過高,應該注意避暑、適當休息;當讀取溫度小于臨界參數時,報警模塊也會開始工作發出響聲提醒人們外界溫度過低,應該注意保暖、維持體溫。
鬧鐘功能模塊的具體功能實現是利用STC15F2K61S2單片機的定時器或計數器功能來實現的。人們可以根據自己的生活習慣制定好具體的時間安排表,然后在通過計數器或定時器模塊來實現鬧鐘,這個功能模塊可以間接性的幫助人們管理生活,也是人們常用的功能之一。更進一步地,可為了提高運算效率將定時器和計數器的相關指令代碼寫成函數的形式進行存儲,這樣一來在實現該鬧鐘功能模塊時速度會提升很多,傳遞的消息也更具有時效性和價值性。
電源模塊的選擇還是比較寬泛的,可以直接在電路板上面裝載一個電源供應器,也可以使用幾節小電池串聯從而得到一個理想的電壓值。選擇一個尺寸合適的電池一方面可以方便攜帶,另一方面也便于整個后期的外形包裝。但是在選取電池時,一定要滿足基本的參數要求,保證整個系統能夠有條不紊的工作。
我們常用的外部顯示設備非常之多,在這里主要使用到的就是8 位共陽的數碼管所組成的一個顯示器。它們的公共端都接在高電平上面,只需要在P0 口上輸入相應的段碼就可以顯示對應的數字。該外設結構簡單、價格便宜、工作原理易懂、而且非常方便攜帶。同時外部顯示設備也可以結合自身需求,選用其他的液晶顯示器作為外設,該模塊沒有特殊的要求。
現如今有很多的設備都用到了日歷時鐘和溫度顯示,并且也取得了一定的成果。電子時鐘日歷和液晶電視等設備就是最典型的例子之一,但是現階段的大部分設備都是同時顯示這兩個重要參數,很少有獨立顯示的。隨著人們生活水平的提高,人們的需求也在發生相應的改變,日歷時鐘與溫度顯示作為一個基本應用也必須做出相應的改變來迎合人們各樣的需求。換言之可以將其應用到農業、工業、醫療等更多的領域,精致設備的同時,以此為基礎開發更多的應用。以日歷時鐘與溫度顯示為基礎元件的雙界面切換的多功能系統,不僅可以滿足人們的基本生活需求,相對之前的應用也會更加的直觀,使用起來也會更加的便利。
通過使用溫度傳感器DS18B20 和日歷時鐘寄存器DS1302 為主要元器件,利用獨立按鍵來做控制器,能夠很好的實現兩種界面的切換問題。一方面可以加強對于元器件的認識,另一方面對于界面切換問題的有了實質性的認識。對于一些簡單的界面切換問題可以很好的完成,可塑性非常強,適用范圍也非常廣。以此為基礎制作而成的顯示系統也具有一定的實用性,成本低廉、而又能達到一定的效果,是具有一定的研究價值的。