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