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