基于MCS-51單片機(jī)的智能 時鐘控制系統(tǒng)設(shè)計
隨著電子技術(shù)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整,生產(chǎn)工藝的飛速發(fā)展,人們生活水平的不斷提高,家用電器逐漸普及,市場對于智能時鐘控制系統(tǒng)的需求也越來越大。本文所述智能時鐘控制系統(tǒng)主要指時鐘顯示、時間設(shè)置、鬧鈴及家用電器定時開關(guān)機(jī)(可擴(kuò)展功能)等控制系統(tǒng)。
本文采用進(jìn)入市場時間早、總線開放、仿真開發(fā)設(shè)備多、芯片及其開發(fā)設(shè)備價格低廉、速度較快、電磁兼容性較好的mcs-51型單片機(jī)為核心實(shí)現(xiàn)智能時鐘控制。
硬件系統(tǒng)設(shè)計 智 能時鐘控制系統(tǒng)以mcs-51兼容單片機(jī)at89c51微處理器為核心,由時鐘顯示模塊、定時控制模塊、電源模塊等電路組成,電路原理圖和組裝圖如圖1、圖2所示。 at89c51微處理器 at89c51是一款采用atmel高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的mcs-51指令集和輸出管腳相兼容的單片機(jī),其主要性能特點(diǎn)有: (1)高性能、低功耗的8byte微控制器,risc精簡指令集機(jī)構(gòu),指令功能強(qiáng)大,且多數(shù)為單周期指令,具有低功耗的閑置和掉電控制模式、5個中斷源、兩個16位定時器/計數(shù)器等功能。 (2)片內(nèi)集成4kb可編程閃爍存儲器,可進(jìn)行1000次以上寫/擦循環(huán)操作,數(shù)據(jù)保留時間可達(dá)10年,支持三級程序存儲器鎖定。 (3)豐富強(qiáng)大的外部接口性能:32可編程i/o線,可編程串行通道,片內(nèi)振蕩器和時鐘電路。 時鐘顯示模塊 顯示模塊采用lg2841bh數(shù)碼管,動態(tài)掃描,8550三極管位選驅(qū)動 , at89c51微處理器p0口直接段選實(shí)現(xiàn)小時、分鐘顯示,具有顯示亮度強(qiáng)、穩(wěn)定性能好、顯示誤差少等優(yōu)點(diǎn)。 定時控制模塊 該模塊配合相應(yīng)程序可實(shí)現(xiàn)時間調(diào)整、鬧鈴、家用電器定時開關(guān)機(jī)等功能。p3.2為時間調(diào)整模式選擇鍵、p3.3為小時調(diào)整鍵、p3.5為分鐘調(diào)整鍵;定時控制通過繼電器jzc-32f和jrc-z7f實(shí)現(xiàn)控制功能,且通過修改程序可進(jìn)行定時控制功能擴(kuò)展,實(shí)現(xiàn)家用電器定時開關(guān)機(jī)等功能。 電源模塊 電源模塊設(shè)計的質(zhì)量直接關(guān)系到單片機(jī)系統(tǒng)的穩(wěn)定性,設(shè)計系統(tǒng)中由于單片機(jī)、控制繼電器等元器件均可采用直流+5v供電,可選用穩(wěn)壓性能較好的三端穩(wěn)壓集成電路lm7805實(shí)現(xiàn)。
軟件系統(tǒng)設(shè)計 系統(tǒng)利用偉福6000編寫源代碼,mep500燒寫at89c51芯片實(shí)現(xiàn)智能時鐘控制功能。由于系統(tǒng)軟件主要完成時鐘顯示、鬧鈴、時間設(shè)置等功能。源程序主要包括主程序、中斷子程序、顯示子程序、定時子程序、延時子程序等。 實(shí)現(xiàn)程序如下:
…… ;**************************; 以下為主程序 (檢測各鍵是否按下)
;***************************mainloop:
jb alarmsetkey,checkminutekey
call delay
jb alarmsetkey,checkminutekey
setb clockmode
call alarmset
checkminutekey:
jb minutekey,checkhourkey
mov a,minute
add a,#1
mov minute,a
cjne a,#3ch,notover1
mov minute,#0
notover1:
jnb minutekey,$
checkhourkey:
jb hourkey,checkalarma
mov a,hour
add a,#1
mov hour,a
cjne a,#18h,notover2
mov hour,#0
notover2:
jnb hourkey,$
checkalarma:
jnb alarmtimeona,checkalarmp
call startpc; call alarmprocess
ajmp toreturn
checkalarmp:
jnb alarmtimeonp,toreturn
call shutpc
toreturn:
ajmp mainloop
;**************************; 定時器timer0中斷服務(wù)程序(此程序每8ms執(zhí)行一次)
;***************************
timeint:
mov th0,#0e0h
mov tl0,#0bfh
push acc
push psw
setb rs0
clr rs1
d jnz onesecondcounter,notonesecond
mov onesecondcounter,#125
call clock
call convertobuffer
notonesecond:
call scandisplay
pop psw
pop acc
reti
; ***************************
; 掃描顯示子程序
;***************************
scandisplay:
mov r1,#displaybuffer
mov r4,#11111011b
play:
mov a,r4
mov p2,a
mov a,@r1
mov dptr,#tab
movc a,@a+dptr
mov p0,a
lcall delay
inc r1
mov a,r4
jnb acc.7,endout
rl a
mov r4,a
ajmp play
endout: setb p2.7
mov p0,#0ffh ret
tab:db 0c0h,0f9h,0a4h,0b0h,
99h,92h,82h,0f8h,80h,90h,7fh, <