劉凱凱,孫緒保,高 飛,劉偉永
(山東科技大學(xué) 信息與電氣工程學(xué)院,山東 青島 266510)
隨著生活節(jié)奏的不斷加快,人們在生活、工作上的時間分配越來越緊張。而在生活和工作中,人們需要電器在所希望的時間里處于工作狀態(tài)。因為人們不可能時刻守在電器旁去操作,這時就需要一個自動通電斷電的裝置,即定時開關(guān)。定時開關(guān)通常分為機(jī)械定時開關(guān)和電子定時開關(guān)兩種。本文基于STC單片機(jī)設(shè)計了一種電子定時開關(guān)。采用了STC89C51RC單片機(jī)、DS1302時鐘芯片、LED顯示、四按鍵調(diào)時,簡潔方便。STC89C51RC特有的內(nèi)部EEPROM功能結(jié)合DS1302時鐘芯片,實現(xiàn)了掉電信息不丟失,來電后仍保持用戶的設(shè)置,避免了掉電后信息丟失的重復(fù)操作,自動斷電、通電。另外,采用了固態(tài)繼電器決定插座的通斷,在非設(shè)定間隔內(nèi)始終處于斷開狀態(tài),保證了電路的安全。該設(shè)計最多可實現(xiàn)16個定時間隔,可滿足大多數(shù)用戶的使用。
本設(shè)計的硬件主要包括單片機(jī)等主要功能模塊芯片、顯示和按鍵電路、電源和控制等電路,原理框圖如圖1所示。
單片機(jī)采用STC89C51RC,其工作頻率范圍為0~40MHz,相當(dāng)于普通8051的0~80 MHz,實際工作頻率可達(dá)48 MHz。它有 ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程)應(yīng)用功能,無需專用編程器/仿真器,可通過串口(P3.0/P3.1)直接下載用戶程序??梢岳肐AP技術(shù)實現(xiàn)EEPROM 功能[2]。
圖1 定時開關(guān)原理框圖
時鐘走時采用DS1302時鐘芯片實現(xiàn),實時時鐘芯片DS1302是一種高性能、低功耗、帶RAM的實時時鐘電路,具有涓細(xì)電流充電能力。主要特點是采用串行數(shù)據(jù)傳輸,可為掉電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采用普通32.768 kHz晶振。DS1302的使用使本設(shè)計在斷電后再次通電時,實現(xiàn)了時鐘正常走時。
顯示電路采用共陽極7段式4位數(shù)碼管顯示,P1口為段選碼輸出端,通過地址鎖存器芯片74LS373與數(shù)碼管相連,P2.4~P2.7管腳為位選碼輸出端,分別通過三極管與數(shù)碼管相連。
按鍵電路設(shè)計為獨(dú)立式鍵盤,設(shè)定為四個,與P2口的P2.0~P2.3相連。按鍵一端接地,另一端各通過5.1 kΩ的上拉電阻與5 V電源相連。
控制電路如圖2所示。STC89C51RC單片機(jī)P3.5管腳送出控制信號。當(dāng)P3.5輸出高電平時,晶體管基極被輸入高電平,晶體管飽和導(dǎo)通,集電極變?yōu)榈碗娖?。因此繼電器線圈通電,觸點吸合,插座上的電器正常運(yùn)行。當(dāng)P3.5輸出低電平時,晶體管基極被輸入低電平,晶體管截止,繼電器線圈斷電,觸點斷開,此時插座上的電器處于斷電狀態(tài)。
圖2 控制電路原理圖
圖3 程序流程圖
程序流程圖如圖3所示。程序首先清零要使用的RAM相關(guān)單元,然后讀取STC89C51RC內(nèi)部EEPROM中的數(shù)據(jù)到相關(guān)RAM單元的 30H~6FH,因 EEPROM在斷電后數(shù)據(jù)不丟失,就實現(xiàn)了已設(shè)定的定時間隔的記憶功能。接著程序讀取DS1302中的時間信息到RAM相關(guān)單元的78H~7AH。程序調(diào)用顯示子程序,數(shù)碼管顯示出設(shè)定的顯示內(nèi)容。然后調(diào)用按鍵程序,看是否有按鍵按下。有按鍵按下就進(jìn)入按鍵功能程序,沒有就進(jìn)入下一步判定是否到定時時間。沒到定時時間,程序進(jìn)入主程序循環(huán)。如到了定時時間,再判斷是定時開啟時間還是定時關(guān)閉時間,然后進(jìn)行相關(guān)操作,對P3.5進(jìn)行清0或者置1。操作完成進(jìn)入主程序循環(huán)。
其中數(shù)據(jù)存儲器RAM中的30H~6FH設(shè)定為定時間隔存儲數(shù)據(jù)緩沖區(qū),可儲存16個定時開啟時間和16個定時關(guān)閉時間。這樣最多可設(shè)置16個時間間隔。30H~3FH和40H~4FH分別為存儲定時開啟時間的小時和分?jǐn)?shù)據(jù)緩沖單元,50H~5FH和 60H~6FH分別為存儲定時關(guān)閉時間的小時和分?jǐn)?shù)據(jù)緩沖單元。
數(shù)據(jù)存儲器RAM的78H、79H、7AH分別為秒、分、小時的時間緩沖單元。
采用4位數(shù)碼管顯示,從左到右依次顯示小時十位、小時個位、分十位和分個位,在顯示正常時鐘時通過第二個數(shù)碼管的小數(shù)點的閃爍表示秒的走動。數(shù)碼管顯示的信息采用8個內(nèi)存單元70H~77H存放,這8個內(nèi)存單元稱為顯示緩沖區(qū),其中秒個位和秒十位、分個位和分十位、時個位和時十位分別由秒數(shù)據(jù)、分?jǐn)?shù)據(jù)和小時數(shù)據(jù)分拆得到。本設(shè)計中數(shù)碼管顯示采用軟件譯碼動態(tài)顯示[1]。首先建立一張顯示信息的字段碼表,顯示時,先從顯示緩沖區(qū)中取出顯示的信息,然后通過查表程序在字段碼表中查出所顯示信息的字段碼,從P1口輸出,同時在P2口將對應(yīng)的位選碼輸出,選中顯示的數(shù)碼管,就能在相應(yīng)的數(shù)碼管上顯示緩沖區(qū)的內(nèi)容。
按鍵設(shè)計為四個,分別接STC89C51RC的P2.0、P2.1、P2.2、P2.3口。P2.0為調(diào)時位選擇按鍵,P2.1為加1按鍵,P2.2為調(diào)定時間隔數(shù)選擇按鍵,P2.3為調(diào)定時選擇按鍵。選擇RAM的7CH作為調(diào)時位選擇按鍵計數(shù)單元,7DH作為調(diào)定時選擇按鍵計數(shù)單元,7EH作為調(diào)定時間隔數(shù)選擇按鍵計數(shù)單元。
在沒有按鍵按下時,時鐘正常走時,數(shù)碼管顯示走時時間,第二個數(shù)碼管的小數(shù)點閃爍。當(dāng)在未按下P2.3鍵時,即7DH內(nèi)數(shù)據(jù)是0。此時按下P2.0則進(jìn)入調(diào)分狀態(tài),小數(shù)點停止閃爍,此時按下P2.1可進(jìn)行加1操作;繼續(xù)按下P2.0可進(jìn)行分和小時的調(diào)整;最后再按下P2.0鍵將退出調(diào)整狀態(tài),小數(shù)點閃爍,時鐘正常走時。
首先按下P2.3鍵時,數(shù)碼管顯示相應(yīng)的定時開或關(guān)時間。按下一次為定時開時間,此時按下P2.2按鍵可在各定時間隔間調(diào)整,這時再通過按鍵P2.0選擇定時開的調(diào)小時或分鐘的操作,再按下P2.1鍵可對定時開時間進(jìn)行加1操作;繼續(xù)按下P2.3鍵則進(jìn)入調(diào)定時關(guān)時間;最后按P2.3鍵退出調(diào)整定時間隔狀態(tài)。此操作過程中,時鐘后臺正常走時,退出此調(diào)整狀態(tài)后,顯示時鐘,小數(shù)點正常閃爍。
IAP即在程序運(yùn)行時程序存儲器可由程序自身進(jìn)行擦寫。STC單片機(jī)的ISP功能就是通過IAP技術(shù)實現(xiàn)的,單片機(jī)在出廠前就已經(jīng)內(nèi)置一段小的boot程序。單片機(jī)上電后,開始運(yùn)行這段程序,當(dāng)檢測到上位機(jī)有下載要求時,便和上位機(jī)通信,然后下載數(shù)據(jù)到程序存儲區(qū)。ISP/IAP應(yīng)用使STC89C51RC系列單片機(jī)實現(xiàn)了在線編程。
利用IAP技術(shù)可實現(xiàn)EEPROM,即程序在用戶應(yīng)用程序區(qū)時,可以對數(shù)據(jù)Flash區(qū)(EEPROM)進(jìn)行字節(jié)讀/字節(jié)編程/扇區(qū)擦除。STC89C51RC的內(nèi)部EEPROM共有8個扇區(qū),每個扇區(qū)為512字節(jié)[2]。本設(shè)計僅使用EEPROM功能實現(xiàn)儲存定時時間間隔的作用,故選擇使用第一扇區(qū)的2000H~203FH單元。
2000H~203FH單元分別對應(yīng)于RAM的30H~6FH單元,每次通過按鍵程序改變定時時間間隔的時候,先把數(shù)據(jù)儲存于RAM中,然后再儲存到EEPROM中。如果定時開關(guān)電路不掉電,則程序不從EEPROM中讀取數(shù)據(jù),僅從RAM中讀取相應(yīng)數(shù)據(jù)。當(dāng)定時開關(guān)電路掉電后再次來電時,程序先把數(shù)據(jù)從EEPROM中讀取到RAM相應(yīng)單元,再進(jìn)入主程序,這樣就實現(xiàn)了定時時間間隔的掉電自記憶。
本文給出了一種基于STC89C51RC單片機(jī)的電子定時開關(guān)的設(shè)計。利用此定時開關(guān)設(shè)計需要儲存數(shù)據(jù)較少的特點,在RAM和EEPROM之間互相讀取,原始數(shù)據(jù)儲存于EEPROM中,實現(xiàn)了自記憶。運(yùn)算快捷,節(jié)省單片機(jī)系統(tǒng)資源,又避免了添加外部數(shù)據(jù)存儲器的額外費(fèi)用。再結(jié)合時鐘芯片DS1302的使用,解決了時鐘的斷電后不走時問題,真正實現(xiàn)斷電后再通電插座電路自動運(yùn)行。
[1]謝維成,楊加國.單片機(jī)原理與應(yīng)用及C51程序設(shè)計[M].北京:清華大學(xué)出版社,2006.
[2]宏晶科技.STC增強(qiáng)型8051單片機(jī)中文指南(RC/RD+系列).
[3]宋浩,田豐.單片機(jī)原理及應(yīng)用[M].北京:清華大學(xué)出版社;北京交通大學(xué)出版社,2005.