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