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