丁春霞
江蘇城市職業(yè)學(xué)院張家港辦學(xué)點(diǎn),江蘇 張家港 215600
隨著科學(xué)技術(shù)的不斷發(fā)展,人們不僅對于時鐘的精度要求越來越高,而且對于時鐘功能的要求也越來越多。本文基于51單片機(jī)設(shè)計了一款帶有鬧鐘設(shè)置、溫度顯示、背光時間設(shè)置的數(shù)字鐘,它具有走時準(zhǔn)確、顯示直觀、無機(jī)械走動的聲音、低能耗等優(yōu)點(diǎn),可廣泛用于人們的日常生活。
系統(tǒng)原理框圖如圖1所示,本系統(tǒng)以STC89C52RC單片機(jī)為核心,外圍電路包括鍵盤電路、溫度檢測電路、DS1302時鐘電路、LCD1602液晶顯示電路和蜂鳴器驅(qū)動電路。當(dāng)系統(tǒng)啟動時,單片機(jī)首先對內(nèi)部資源和LCD1602進(jìn)行初始化,隨后從DS1302時鐘芯片和DS18B20溫度傳感器分別讀取時間和溫度傳輸給LCD1602顯示,并對鍵盤電路進(jìn)行循環(huán)掃描,通過鍵盤電路完成系統(tǒng)時間、鬧鐘時間和背光持續(xù)時間的設(shè)置。
圖1 系統(tǒng)原理框圖
硬件電路如圖2所示:
圖2 硬件電路圖
系統(tǒng)采用的單片機(jī)為STC89C52RC,該單片機(jī)在傳統(tǒng)51單片機(jī)基礎(chǔ)上增加了內(nèi)部資源、提高了處理能力,在使用上完全兼容傳統(tǒng)51單片機(jī),方便系統(tǒng)升級。
單片機(jī)主電路除了單片機(jī)本身外還需包含晶振電路和復(fù)位電路。晶振電路作用是配合單片機(jī)內(nèi)部振蕩器產(chǎn)生固有的時鐘信號,在該時鐘信號的作用下,單片機(jī)完成指令的操作,數(shù)據(jù)的讀寫。而復(fù)位電路作用則是初始化單片機(jī),在單片機(jī)上電后使得RST(9腳)保持持續(xù)兩個機(jī)器周期的高電平使單片機(jī)處于復(fù)位狀態(tài),復(fù)位后單片機(jī)PC指針指向0000H單元,從該單元向下執(zhí)行指令。
鍵盤電路由4個微動開關(guān)組成,分別為“設(shè)置”鍵、“+”鍵、“–”鍵和“保存”鍵,連接到單片機(jī)的P1.0-P1.3接口進(jìn)行控制。
由于單片機(jī)采用定時器中斷或查詢方式計時,占用硬件資源和CPU時間,存在時鐘精度不高,不能用于對時鐘精度要求較高的場合。本系統(tǒng)采用DS1302時鐘芯片,它可以對年、月、日、周、時、分、秒進(jìn)行計時,且具有閏年補(bǔ)償?shù)榷喾N功能。芯片外接32.768kHz晶振,由該晶振單獨(dú)提供時鐘輸入,精度較高,計時準(zhǔn)確,同時芯片還提供兩個電源管腳,其中VCC1為后備電源,VCC2為主電源,在主電源掉電的情況下,由備用電源供電,保證時鐘的持續(xù)運(yùn)行。
本系統(tǒng)采用DS18B20數(shù)字溫度傳感器,提供9~12位分辨率,測溫范圍在-55℃到+125℃之間,精度為±0.5℃。它具有獨(dú)特的單總線結(jié)構(gòu)方式,與單片機(jī)連接時僅需一條口線,即可實現(xiàn)雙向通訊。
電路采用LCD1602作為顯示器件,它能夠同時顯示16×2個字符,是一種專門用來顯示字母、數(shù)字、符號等的點(diǎn)陣型液晶模塊,其驅(qū)動電路較為簡單,除了必要的數(shù)據(jù)和控制總線外本系統(tǒng)還采用了背光驅(qū)動電路,該電路在單片機(jī)控制下可以實現(xiàn)對液晶背光點(diǎn)亮?xí)r間進(jìn)行控制,當(dāng)沒有操作時液晶背光處于關(guān)閉狀態(tài),有利于降低系統(tǒng)的功耗,提高電能利用率,延長使用壽命。
由于單片機(jī)I/O驅(qū)動能力有限,電路通過兩個NPN型三極管組成達(dá)林頓管形式驅(qū)動蜂鳴器。
圖3 系統(tǒng)程序流程圖
本文采用單片機(jī)C語言編寫程序,對整個硬件系統(tǒng)進(jìn)行管控,通過鍵盤電路來設(shè)置系統(tǒng)時間、鬧鐘時間、LCD1602的背光時間,利用DS18B20檢測環(huán)境溫度、DS1302向系統(tǒng)提供精確時間,并將上述參數(shù)通過LCD1602顯示,當(dāng)系統(tǒng)時間與設(shè)定的鬧鈴時間相同時,蜂鳴器發(fā)出短促的“嘀嘀嘀……”聲音,而當(dāng)單片機(jī)由于特殊原因沒有正常工作時則發(fā)出連續(xù)的長鳴聲。系統(tǒng)程序流程圖如圖3所示。
鍵盤電路共有四個按鈕S1~S4。S1為設(shè)置鍵,默認(rèn)狀態(tài)下LCD1602顯示系統(tǒng)時間和溫度,當(dāng)按下S1時,進(jìn)入系統(tǒng)時間設(shè)置狀態(tài),當(dāng)再次按下S1時,進(jìn)入鬧鐘和背光時間設(shè)置狀態(tài),第三次按下S1時,系統(tǒng)恢復(fù)到默認(rèn)狀態(tài)。S2、S3為參數(shù)設(shè)置鍵,每個按鍵有兩種功能,按下按鈕的時間小于1秒為短按,超過1秒為長按,短按對參數(shù)進(jìn)行增減設(shè)置,長按為切換參數(shù)。S4為保存鍵,當(dāng)按下S4則保存參數(shù)值。
DS1302與單片機(jī)的連接需要三條線,即SCLK(7腳)、I/O(6腳)、RST(5腳),采用三線制SPI總線接口,該接口是一種半雙工通信方式,只能分時進(jìn)行數(shù)據(jù)傳輸。單片機(jī)與DS1302數(shù)據(jù)傳輸時,首先將RST置位,所有的數(shù)據(jù)傳送被初始化,允許對DS1302進(jìn)行操作,在SCLK同步時鐘的上升沿時,數(shù)據(jù)從I/O(6腳)最低位開始寫入,在SCLK同步時鐘的下升沿時,數(shù)據(jù)從I/O(6腳)最低位開始讀取,當(dāng)數(shù)據(jù)傳送完畢,將RST復(fù)位。
DS18B20與單片機(jī)通訊的時序極為嚴(yán)格,首先對其進(jìn)行初始化,初始化的步驟為:由單片機(jī)拉低總線至少480μs來產(chǎn)生復(fù)位脈沖,然后單片機(jī)釋放總線并進(jìn)入接收狀態(tài),當(dāng)總線釋放后上拉電阻把總線上的電平拉回高電平,當(dāng)DS18B20檢測到上升沿后等待15~60μs,然后以拉低總線60~240μs的方式發(fā)出響應(yīng)脈沖。
在對DS18B20讀取時從單片機(jī)拉低總線開始,隨后單片機(jī)釋放總線進(jìn)入讀取狀態(tài)。DS18B20拉高總線表示“1”,拉低總線表示“0”。在對DS18B20寫入數(shù)據(jù)時由單片機(jī)首先拉低總線,產(chǎn)生寫時序,單片機(jī)將數(shù)據(jù)放置總線以高電平表示“1”,低電平表示“0”,數(shù)據(jù)由低位開始傳輸。
DS18B20溫度數(shù)值有兩個字節(jié)數(shù)據(jù),高字節(jié)的低3位和低字節(jié)的高4位表示溫度數(shù)據(jù)的整數(shù)部分,低字節(jié)的低4位為小數(shù)部分,高字節(jié)的高5位用來表示讀取溫度的正負(fù)。
該部分程序是為了實現(xiàn)當(dāng)系統(tǒng)時間和設(shè)定的鬧鐘時間相同時使得蜂鳴器發(fā)出鳴叫。其設(shè)計思路為:單片機(jī)將DS1302讀取的時間和設(shè)置的鬧鐘時間進(jìn)行比較,當(dāng)“小時”與“分鐘”均相同時視為鬧鐘時間到,通過控制與蜂鳴器電路相連接的I/O口翻轉(zhuǎn)實現(xiàn)短促的“嘀嘀嘀……”叫聲,叫聲時間持續(xù)一分鐘。
作為顯示器件,LCD1602的主要任務(wù)是將系統(tǒng)的時間等參數(shù)直觀方便地顯示出來,同時為了體現(xiàn)出節(jié)能,低功耗的特點(diǎn),在本程序設(shè)計時還加入了對液晶背光點(diǎn)亮持續(xù)時間的控制。
單片機(jī)通過P0口與LCD1602的D0-D7實現(xiàn)數(shù)據(jù)交換,通過RS、RW、E三條控制線實現(xiàn)對數(shù)據(jù)的控制。RS為數(shù)據(jù)/指令選擇線,RS=1表示D0-D7輸入數(shù)據(jù),RS=0表示D0-D7輸入指令。RW為讀/寫選擇線,RW=1表示單片機(jī)對LCD1602進(jìn)行讀操作,RW=0表示單片機(jī)對LCD1602進(jìn)行寫操作。E為使能端,E=1表示LCD1602使能,即可以對其操作,E=0時任何對其操作都將視為無效。
為了方便修改系統(tǒng)時間、鬧鐘時間等參數(shù),在程序設(shè)計時設(shè)置了Condition狀態(tài)參數(shù)。通過按鍵S1可以改變Condition值,當(dāng)Condition=0時LCD1602顯示系統(tǒng)時間、溫度,當(dāng)Condition=1時LCD1602顯示系統(tǒng)時間設(shè)置界面,當(dāng)Condition=2時LCD1602顯示鬧鐘和背光持續(xù)時間設(shè)置界面,當(dāng)Condition>2時,Condition清零。
經(jīng)過焊接裝配后進(jìn)行調(diào)試。接通電源,測量各個關(guān)鍵點(diǎn)電壓是否在合理范圍,發(fā)現(xiàn)單片機(jī)20管腳(GND)電壓不是0V,查明為20管腳虛焊。將程序燒錄到單片機(jī)中,插入底座,接通電源,發(fā)現(xiàn)LCD1602顯示存在亂碼現(xiàn)象,經(jīng)過檢查VSS管腳沒有接地,補(bǔ)焊后LCD1602顯示正常。調(diào)節(jié)各項參數(shù),發(fā)現(xiàn)當(dāng)鬧鐘時間到后蜂鳴器聲音很小,分析電路由于采用一個NPN型三極管驅(qū)動蜂鳴器,單片機(jī)I/O拉出電流較小不足以使三極管導(dǎo)通,改進(jìn)電路,采用兩個NPN型三極管組成達(dá)林頓管形式,使得蜂鳴器正常發(fā)音。經(jīng)過上述調(diào)試過程該系統(tǒng)可以正常工作,調(diào)試完成。實物圖如圖4所示。
圖4 實物圖
[1]張寧丹,金桂. 基于STC89C52單片機(jī)DS1302時鐘芯片定時開關(guān)的設(shè)計與仿真[J]. 現(xiàn)代電子技術(shù),2013,36(8):4-6.
[2]王靜霞,楊宏麗,劉俐.單片機(jī)應(yīng)用技術(shù)(C語言版)[M].北京:電子工業(yè)出版社,2009.
[3]彭偉.單片機(jī)C語言程序設(shè)計實訓(xùn)100例:基于8051+Proteus仿真[M]. 北京:電子工業(yè)出版社,2012.