基于MCS-51單片機(jī)的智能時(shí)鐘控制系統(tǒng)設(shè)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
隨著電子技術(shù)產(chǎn)業(yè)結(jié)構(gòu)調(diào)整,生產(chǎn)工藝的飛速發(fā)展,人們生活水平的不斷提高,家用電器逐漸普及,市場(chǎng)對(duì)于智能時(shí)鐘控制系統(tǒng)的需求也越來(lái)越大。本文所述智能時(shí)鐘控制系統(tǒng)主要指時(shí)鐘顯示、時(shí)間設(shè)置、鬧鈴及家用電器定時(shí)開(kāi)關(guān)機(jī)(可擴(kuò)展功能)等控制系統(tǒng)。
本文采用進(jìn)入市場(chǎng)時(shí)間早、總線(xiàn)開(kāi)放、仿真開(kāi)發(fā)設(shè)備多、芯片及其開(kāi)發(fā)設(shè)備價(jià)格低廉、速度較快、電磁兼容性較好的MCS-51型單片機(jī)為核心實(shí)現(xiàn)智能時(shí)鐘控制。
硬件系統(tǒng)設(shè)計(jì)
智能時(shí)鐘控制系統(tǒng)以MCS-51兼容單片機(jī)AT89C51微處理器為核心,由時(shí)鐘顯示模塊、定時(shí)控制模塊、電源模塊等電路組成。
AT89C51微處理器
AT89C51是一款采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容的單片機(jī),其主要性能特點(diǎn)有:
(1)高性能、低功耗的8Byte微控制器,RISC精簡(jiǎn)指令集機(jī)構(gòu),指令功能強(qiáng)大,且多數(shù)為單周期指令,具有低功耗的閑置和掉電控制模式、5個(gè)中斷源、兩個(gè)16位定時(shí)器/計(jì)數(shù)器等功能。
(2)片內(nèi)集成4KB可編程閃爍存儲(chǔ)器,可進(jìn)行1000次以上寫(xiě)/擦循環(huán)操作,數(shù)據(jù)保留時(shí)間可達(dá)10年,支持三級(jí)程序存儲(chǔ)器鎖定。
(3)豐富強(qiáng)大的外部接口性能:32可編程I/O線(xiàn),可編程串行通道,片內(nèi)振蕩器和時(shí)鐘電路。
時(shí)鐘顯示模塊
顯示模塊采用LG2841BH數(shù)碼管,動(dòng)態(tài)掃描,8550三極管位選驅(qū)動(dòng) , AT89C51微處理器P0口直接段選實(shí)現(xiàn)小時(shí)、分鐘顯示,具有顯示亮度強(qiáng)、穩(wěn)定性能好、顯示誤差少等優(yōu)點(diǎn)。
定時(shí)控制模塊
該模塊配合相應(yīng)程序可實(shí)現(xiàn)時(shí)間調(diào)整、鬧鈴、家用電器定時(shí)開(kāi)關(guān)機(jī)等功能。P3.2為時(shí)間調(diào)整模式選擇鍵、P3.3為小時(shí)調(diào)整鍵、P3.5為分鐘調(diào)整鍵;定時(shí)控制通過(guò)繼電器JZC-32F和JRC-Z7F實(shí)現(xiàn)控制功能,且通過(guò)修改程序可進(jìn)行定時(shí)控制功能擴(kuò)展,實(shí)現(xiàn)家用電器定時(shí)開(kāi)關(guān)機(jī)等功能。
電源模塊
電源模塊設(shè)計(jì)的質(zhì)量直接關(guān)系到單片機(jī)系統(tǒng)的穩(wěn)定性,設(shè)計(jì)系統(tǒng)中由于單片機(jī)、控制繼電器等元器件均可采用直流+5V供電,可選用穩(wěn)壓性能較好的三端穩(wěn)壓集成電路LM7805實(shí)現(xiàn)。
軟件系統(tǒng)設(shè)計(jì)
系統(tǒng)利用偉福6000編寫(xiě)源代碼,MEP500燒寫(xiě)AT89C51芯片實(shí)現(xiàn)智能時(shí)鐘控制功能。由于系統(tǒng)軟件主要完成時(shí)鐘顯示、鬧鈴、時(shí)間設(shè)置等功能。源程序主要包括主程序、中斷子程序、顯示子程序、定時(shí)子程序、延時(shí)子程序等。
實(shí)現(xiàn)程序如下:
……
;**************************; 以下為主程序 (檢測(cè)各鍵是否按下)
;***************************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
;**************************; 定時(shí)器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,
0B7H,0FFH
;***************************
; 時(shí)鐘內(nèi)容加1秒的子程序
;***************************
Clock:
mov a,Second
add a,#1
mov Second,a
cjne a,#3cH,NotOverFlow
mov Second,#0
mov a,Minute
add a,#1
mov Minute,a
cjne a,#3cH,NotOverFlow
mov Minute,#0
mov a,Hour
add a,#1
mov Hour,a
cjne a,#18H,NotOverFlow
mov Hour,#0
NotOverFlow:
mov a,Second
jnz NotAlarm
jnb AlarmAOnOff,PAlarm
mov a,Minute
cjne a,AlarmAMinute,PAlarm
mov a,Hour
cjne a,AlarmPHour,PAlarm
ajmp alarming
PAlarm:
jnb AlarmPOnOff,NotAlarm
mov a,Minute
cjne a,AlarmPMinute,NotAlarm
mov a,Hour
cjne a,AlarmPHour,NotAlarm
ajmp Alarming1
Alarming:
setb AlarmTimeOnA
ajmp NotAlarm
Alarming1:
setb AlarmTimeOnP;
NotAlarm:
ret
;***************************
; 將時(shí)鐘內(nèi)容或鬧時(shí)設(shè)置值轉(zhuǎn)換到顯示緩沖區(qū)子程序
;***************************
ConvertoBuffer:
mov r1,#DisplayBuffer
jb ClockMode,DispAlarmSet
mov a,Second
mov DispSecond,a
mov a,Minute
mov Dispminute,a
mov a,Hour
mov DispHour,a
ajmp Convert
DispAlarmSet:
jb AlarmAOnOff,AlarmAOn
mov DispSecond,#00h
jb AlarmPOnOff,AlarmPOn
mov DispSecond,#00h
ajmp Convert
AlarmAOn:
mov DispSecond,#11
NextA:
mov a,AlarmAMinute
mov Dispminute,a
mov a,AlarmAHour
mov DispHour,a
ajmp Convert
AlarmPOn:
mov DispSecond,#11
NextP:
mov a,AlarmPMinute
mov Dispminute,a
mov a,AlarmPHour
mov DispHour,a
Convert:
mov a,DispSecond
mov b,#10
div ab
mov @r1,b
inc r1
mov @r1,a
inc r1
mov a,DispMinute
mov b,#10
div ab
mov @r1,b
inc r1
mov @r1,a
inc r1
mov a,DispHour
mov b,#10
div ab
mov @r1,b
inc r1
mov @r1,a
ret
結(jié)束語(yǔ)
該智能時(shí)鐘控制系統(tǒng),以AT89C51微處理器為核心,具有集成度高、性能穩(wěn)定、抗干擾能力強(qiáng)、性?xún)r(jià)比高的優(yōu)點(diǎn)。經(jīng)軟件仿真和實(shí)際功能驗(yàn)證,證明設(shè)計(jì)可靠、設(shè)計(jì)方案可行,在實(shí)際應(yīng)用中有較大的實(shí) 用價(jià)值。