葉 鋼,張 莉
(麗水職業(yè)技術(shù)學(xué)院 機電工程學(xué)院,浙江 麗水 323000)
隨著科學(xué)技術(shù)的不斷發(fā)展,自動化技術(shù)越來越多地出現(xiàn)在單一周期性的產(chǎn)品中,實現(xiàn)自動化代替人工。校園打鈴器是一個按時響鈴的產(chǎn)品,以前人工打鈴,往往會出現(xiàn)打鈴不準確或忘記打鈴的情況,且人工成本也高。采用單片機作為校園自動打鈴器的控制器,不僅可以促進打鈴器的迅速發(fā)展,還有利于校園學(xué)習(xí)生活。
(1)通過AT89C52單片機設(shè)計一個校園自動打鈴器。
(2)通過按鍵來改變校園作休時間的變化[1],自由設(shè)定打鈴時間點,并具有自動打鈴功能,響鈴時間為20 s,20 s后自動關(guān)閉響鈴。
(3)打鈴時間點可以斷電保存信息。
(4)通過按鍵自由設(shè)定系統(tǒng)時鐘,時鐘走時精準。
如圖1所示系統(tǒng)硬件結(jié)構(gòu),單片機采用AT89C52,通過控制內(nèi)部定時器產(chǎn)生時鐘信號,由數(shù)碼管實時顯示當前時間,并通過按鍵自由設(shè)定打鈴時間點。具有自動打鈴功能,打鈴時間點存放在I2C總線器件AT24C02中,該器件是2 KB的串行CMOS EEPROM,有1個16 Bytes頁寫緩沖器,通過I2C總線接口進行操作[2]。
圖1 系統(tǒng)硬件結(jié)構(gòu)
EEPROM存儲器選擇AT24C02型號,是一款串行通信的I2C器件,內(nèi)含256 Bytes(2 KB),擦寫次數(shù)大于10 000次,寫入速度小于10 ms。自動打鈴器系統(tǒng)硬件電路如圖2所示,由于僅擴展1個器件,所以將A2,A1,A0這3條地址線接地,WP為寫保護控制端,接地時允許寫入。SDA為數(shù)據(jù)輸入/輸出線,SCL為串行時鐘線。
圖2 系統(tǒng)電路
AT24C02的1~4腳接地,8腳接電源,7腳接地,5腳接P3.1口,6腳接P3.0口,5腳和6腳均外接1個5.1k上拉電阻,用以抬高該腳的電位。
單片機的P1.0~P1.4口分別接K1,K2,K3,K4,K5 5個獨立按鍵,每個按鍵均加1個上拉電阻。可以通過這5個按鍵設(shè)置系統(tǒng)時鐘和打鈴器時間。K1鍵為時鐘設(shè)置鍵,當按下K1鍵,系統(tǒng)進入系統(tǒng)時鐘的設(shè)置狀態(tài),然后可按動K3(位選鍵)和K4(段選鍵)進行時鐘設(shè)置;K2為作息設(shè)置鍵,當按下K2鍵,系統(tǒng)進入作息時間的設(shè)置狀態(tài),然后可按動K3(位選鍵)和K4(段選鍵)進行作息時間設(shè)置;所有設(shè)置完畢后,可通過按動K5鍵退出設(shè)置,返回系統(tǒng)走時狀態(tài)。
單片機的P0口通過74LS245作為顯示的段碼輸出,每個段碼上均需要加上拉電阻,因此采用10 kΩ的排阻來代替8個上拉電阻。系統(tǒng)的數(shù)碼管顯示采用動態(tài)掃描方式,2個四位一體的共陰數(shù)碼管構(gòu)成1個8位的數(shù)碼顯示效果。在與單片機連接時,P2口作為數(shù)碼管的位碼輸出端,其中P2.0控制最左邊的數(shù)碼管,P2.1控制左數(shù)第2個數(shù)碼管,以此類推,P2.7控制最右邊的數(shù)碼管。
系統(tǒng)的響鈴設(shè)備采用蜂鳴器,單片機的P3.7口通過串聯(lián)1個1 k電阻與1個PNP三極管的基極相連,三極管的集電極接蜂鳴器到地,三極管的發(fā)射極直接連電源,在三極管的基極與發(fā)射極間加1個10 k電阻。當設(shè)置的作息時間到時,單片機的P3.7口輸出1個低電平到三極管的基極,三極管就處于導(dǎo)通狀態(tài),蜂鳴器發(fā)出響鈴聲音。
系統(tǒng)程序主要包括主程序、I2C總線讀寫操作函數(shù)、按鍵處理函數(shù)、顯示函數(shù)等。
主程序的主要功能包括:系統(tǒng)初始化、數(shù)碼管顯示、作息時間比較、判斷是否調(diào)整系統(tǒng)時間、判斷是否設(shè)置作息時間等。程序流程如圖3所示,系統(tǒng)復(fù)位后,讀取存儲在AT24C02芯片中已設(shè)定好的作息時間,并保存到單片機的RAM中;接著開中斷,調(diào)用顯示程序,并調(diào)用打鈴時間比較程序,將系統(tǒng)時間與RAM中存放的作息時間一一比較,若相等,則響鈴,若不相等則調(diào)用按鍵程序;判斷時鐘設(shè)置鍵或者作息設(shè)置鍵是否被按下,若被按下則分別進入時鐘設(shè)置分支程序或作息設(shè)置分支程序,若沒有按鍵被按下,則返回重復(fù)循環(huán)。
圖3 主程序流程
對于沒有配置I2C總線接口的單片機(如AT89C52等),可以利用其I/O口模擬總線接口的時序。從I2C總線的數(shù)據(jù)操作中可以看出,除了基本的啟動(STA)、停止(STOP)、發(fā)送應(yīng)答位(MACK)和發(fā)送非應(yīng)答位(MNACK)外,還應(yīng)有應(yīng)答位檢查(CACK)和歸一化的讀/寫子程序,例如發(fā)送1個字節(jié)(WRBYT)、接收1個字節(jié)(RDBYT)、發(fā)送N個字節(jié)(WRNBYT)和接收N個字節(jié)的子程序(RDNBYT)。
采用5個獨立按鍵實現(xiàn)系統(tǒng)時間、作息時間的設(shè)置功能。K1設(shè)置系統(tǒng)時間,K2設(shè)置作息時間,K3實現(xiàn)數(shù)碼管的位選,K4實現(xiàn)數(shù)碼管的段選,K5退出設(shè)置回到走時狀態(tài)。按鍵處理流程如圖4所示,當檢測到按鍵被按下時,最左邊的數(shù)碼管進入閃爍狀態(tài),表示此時可以輸入時間;當通過段選鍵設(shè)置好相應(yīng)數(shù)值后,按下位選鍵,下一個數(shù)碼管會進入閃爍狀態(tài),表示可以輸入數(shù)值,此時也可通過段選鍵設(shè)置相應(yīng)的數(shù)值。以此類推,從而實現(xiàn)8個數(shù)碼管的顯示數(shù)值,并自動保存到EEPROM中。
圖4 按鍵處理函數(shù)流程
顯示子程序采用動態(tài)掃描方式進行設(shè)計,8個數(shù)碼管輪流點亮。在輪流點亮掃描過程中,每位顯示器的點亮?xí)r間極為短暫(約為1ms),左邊的兩個數(shù)碼管顯示“小時”,中間的兩個數(shù)碼管顯示“分鐘”,右邊的兩個數(shù)碼管顯示“秒鐘”,三者之間用“—”隔開。
通過單片機仿真軟件進行系統(tǒng)仿真,如表1所示作息時間,按下K2鍵后,通過K3鍵和K4鍵輸入作息時間。如圖5所示,其中“06”表示小時,“10”表示分鐘,最右邊的“01”表示第一個作息時間點,按照作息時間順序依次輸入29個作息時間。
圖5 作息時間設(shè)置
表1 作息時間
按下K1鍵,通過K3鍵和K4鍵輸入系統(tǒng)當前時間,如圖6所示,圖中“10-10-45”表示當前系統(tǒng)時間為10點10分45秒。
圖6 系統(tǒng)時間設(shè)置
當系統(tǒng)時間與作息時間一致時,系統(tǒng)控制蜂鳴器自動響鈴,響鈴時間為20 s,20 s后結(jié)束響鈴。
用單片機作為定時打鈴控制器,可充分發(fā)揮單片機體積小、價格便宜、功耗低、可靠性好等特點[3],可以廣泛應(yīng)用于學(xué)校、機關(guān)及工礦企事業(yè),可實現(xiàn)作息時間的定時周期性打鈴[4]。在實際應(yīng)用中,能夠非常方便地替代人工打鈴,打鈴時間準確,穩(wěn)定性高,能夠達到預(yù)期效果。