實例93 具有校正功能的時鐘1302(LED數碼管顯示)
摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版
上例LED顯示的1302時鐘電路無時鐘校正功能,本例加上時鐘校正功能(校正方法與實例91略有不同)。
⒈ 電路設計
在上例時鐘電路的基礎上,加入3個時鐘修正按鍵:K0(修正)、K1(移位)和K2(加1),分別與80C51P2.0、P2.2和P2.4連接,如圖7-11所示。
圖7-11.jpg (55.14 KB, 下載次數: 104)
下載附件
2016-5-6 19:58 上傳
⒉ 程序設計
按圖7-11電路,要求開機顯示13時47分58秒,數據間用小數點分隔,其中秒數據閃爍(亮600ms,暗400ms),并不斷更新。同時要求K0、K1和K2具有時鐘校正功能,其控制過程為:按下K0(帶鎖),進入時鐘修正;首先,時十位快速閃爍(亮暗各120ms);按一次K1(不帶鎖),被修正位(快速閃爍)按時十位、時個位、分十位、分個位、秒十位、秒個位次序向右移一位(循環往復);按一次K2(不帶鎖),被修正位加1(最大值不超過時鐘規定值,超過復0);時鐘修正期間,計時繼續運行;釋放K0,退出時鐘修正。
1302并LED顯示程序.jpg (177.73 KB, 下載次數: 99)
下載附件
2016-5-6 19:59 上傳
1302并LED顯示程序1.jpg (144.05 KB, 下載次數: 102)
下載附件
2016-5-6 19:59 上傳
1302并LED顯示程序2.jpg (94.76 KB, 下載次數: 97)
下載附件
2016-5-6 19:59 上傳
1302并LED顯示程序3.jpg (140.04 KB, 下載次數: 85)
下載附件
2016-5-6 20:00 上傳
⒊ Keil調試
本題Keil調試同上例。因涉及外圍元件DS1302,在Keil軟件調試中無法得到外圍元件的有效信號。因此,僅在Keil中,按實例1所述步驟,編譯鏈接,語法糾錯,自動生成Hex文件,并在變量觀察窗口Watch頁中設置(設置方法參閱圖8-30)全局變量b(時鐘數據數組)和d(時鐘顯示數組),獲得數組b[]和d[]的首地址(分別為0x08、0x0f,用于在Proteus仿真中觀測)。
需要注意的是,引用先前實例的6個子函數必須插入,否則Keil調試將顯示出錯。
⒋ Proteus仿真
⑴ 按實例23所述Proteus仿真步驟,打開Proteus ISIS軟件,按表7-6選擇和放置元器件,并連接線路,畫出Proteus仿真電路如圖7-12所示。
表7-6.jpg (75.4 KB, 下載次數: 97)
下載附件
2016-5-6 20:01 上傳
圖7-12.jpg (80.16 KB, 下載次數: 97)
下載附件
2016-5-6 20:02 上傳
⑵ 鼠標左鍵雙擊Proteus ISIS仿真電路中AT89C51,裝入Keil調試后自動生成的Hex文件。
⑶ 全速運行后,6位LED顯示初始值:13時47分58秒,時分秒數據間用小數點分隔,其中秒數據閃爍并不斷更新。
⑷ 按下K0(鎖定),進入時鐘修正。
需要說明的是,本例選用的BUTTON按鍵有兩種運行功能:有鎖運行和無鎖運行。作有鎖運行時,鼠標左鍵單擊按鍵圖形中小紅圓點,單擊第一次閉鎖,第二次開鎖。作無鎖運行時,鼠標左鍵單擊按鍵圖形中鍵蓋帽“ ”,單擊一次,鍵閉合后彈開一次,不閉鎖。
① 首先時十位快速閃爍,表示時十位允許修正。此時每按一次K2(鼠標左鍵單擊鍵圖形中鍵蓋帽“ ”,單擊一次,鍵閉合后彈開一次,不閉鎖),時十位顯示數加1,但不超過時十位最大值2,超過時復0。
② 若按一次K1(不閉鎖,方法同K2),被修正位(快速閃爍)移至時個位數據,每按一次K2,時個位數據顯示數加1,但不超過規定的最大值(時十位為0和1時,時個位不超過9;時十位為2時,時個位不超過3),超過時復位0。
③ 再按一次K1,被修正位(快速閃爍)移至分十位,每按一次K2,分十位數據顯示數加1,但不超過分十位最大值5,超過時復位0。
④ 再按一次K1,被修正位(快速閃爍)移至分個位,每按一次K2,分個位數據顯示數加1,但不超過分個位最大值9,超過時復位0。
⑤ 再按一次K1,被修正位(快速閃爍)移至秒十位,每按一次K2,秒十位數據顯示數加1,但不超過秒十位最大值5,超過時復位0。
⑥ 再按一次K1,被修正位(快速閃爍)移至秒個位,每按一次K2,秒個位數據顯示數加1,但不超過秒個位最大值9,超過時復位0。
⑦ 再按一次K1,回復到時十位修正(繼續按K1,重復上述①~⑤過程)。
⑧ 釋放K0,退出時鐘修正,恢復正常計時顯示。
⑹ 打開80C51片內RAM(主菜單Debug→80C51 CPU→Internal(IDATA)Memory -U1),可看到08H~0EH和0FH~14H已經依次存放了時鐘數據數組b[]和顯示字段碼數組d[]的即時數據,與圖7-10所示相似。
⑺ 終止程序運行,可按停止按鈕。
⒌ 思考與練習
本例程序中,T0 4ms中斷的作用與上例有什么不同?
|