該系統(tǒng)控制程序主要包含系統(tǒng)初始化程序、實(shí)時(shí)時(shí)鐘芯片處理程序、溫度傳感器芯片處理程序、液晶顯示程序、鍵盤檢測(cè)與處理程序、鬧鐘中斷以及定時(shí)器產(chǎn)生PWM 程序構(gòu)成。
2.1 系統(tǒng)主程序
系統(tǒng)主程序主要包括系統(tǒng)初始化程序(包括I/O 口初始化、DS12C887 時(shí)鐘芯片初始化、液晶1602 的初始化、外部中斷0 與定時(shí)器T0 設(shè)置)、按鍵檢測(cè)和處理程序、時(shí)鐘數(shù)據(jù)的讀取與處理程序、溫度數(shù)據(jù)的讀取與處理程序、液晶顯示程序、鬧鐘報(bào)警的判斷和處理程序、PWM 調(diào)光處理程序等。程序中設(shè)置鬧鐘標(biāo)志位Flag_ri,一旦鬧鐘時(shí)間到達(dá),時(shí)鐘芯片IRQ引腳觸發(fā)外部中斷0,進(jìn)入中斷程序則置Flag_ri=1,用于主程序中鬧鐘報(bào)警的判斷與處理。
系統(tǒng)主程序流程圖如圖10 所示。
?
圖10 主程序流程圖
2.2 按鍵檢測(cè)和處理程序
按鍵控制系統(tǒng)由S2~S6五個(gè)按鍵組成,分別為S2時(shí)間設(shè)置鍵、S3數(shù)值增大鍵、S4數(shù)值減小鍵、S5鬧鐘設(shè)置鍵以及S6亮度調(diào)節(jié)鍵。S2用于選擇需要調(diào)整的時(shí)鐘以及鬧鐘參數(shù),根據(jù)S2按下次數(shù),依次選擇秒、分、時(shí)、星期、日、月、年,液晶屏上被選參數(shù)下方以光標(biāo)閃爍狀態(tài)提示,再通過(guò)按下S3或S4調(diào)整被選參數(shù)值的大小,S2按下累積8次時(shí),則退出選擇功能并保存當(dāng)前數(shù)據(jù)至?xí)r鐘芯片。S5用于鬧鐘時(shí)間的查看與設(shè)置;首次按下S5,1602液晶屏第二行顯示已設(shè)置的鬧鐘時(shí)間;可通過(guò)S2、S3與S4重新設(shè)置鬧鐘時(shí)間;再次按下,則退出鬧鐘查看功能并保存當(dāng)前設(shè)置的鬧鐘參數(shù)至?xí)r鐘芯片。同時(shí),S3與S4還可獨(dú)立作為鬧鐘產(chǎn)生時(shí)的取消鍵與LED燈光的關(guān)閉鍵。S6實(shí)現(xiàn)LED燈光亮度的10級(jí)調(diào)節(jié),每按一次,LED亮度增大一級(jí);當(dāng)達(dá)到亮度最大時(shí),再次按下則關(guān)閉LED燈光。每次有按鍵按下,蜂鳴器都以短'滴'聲提示。按鍵檢測(cè)與處理流程圖如圖11所示。
?
圖11 按鍵檢測(cè)與處理流程圖
2.3 鬧鐘中斷程序
系統(tǒng)到達(dá)設(shè)置的鬧鐘時(shí)間,DS12C887 時(shí)鐘芯片IRQ 引腳輸出由高電平變?yōu)榈碗娖?,作為單片機(jī)P3.2 口INT0 中斷的申請(qǐng)輸入,并可通過(guò)讀取DS12C887 芯片的C 寄存器來(lái)清除IRQ 引腳輸出。因此,將外部中斷INT0 設(shè)置為負(fù)跳變沿觸發(fā)中斷,并設(shè)置鬧鐘標(biāo)志位Flag_ri,鬧鐘時(shí)刻到達(dá)時(shí)設(shè)置Flag_ri=1,用于主程序中的鬧鐘報(bào)警處理。鬧鐘中斷程序如圖12 所示。
?
圖12 鬧鐘中斷流程圖