實(shí)例92 開機(jī)顯示PC機(jī)時(shí)分秒的時(shí)鐘1302(LED數(shù)碼管顯示)
摘自張志良編著《單片機(jī)實(shí)驗(yàn)實(shí)訓(xùn)100例》 ISBN 978-7-5124-1603-1,北航社出版
時(shí)鐘顯示除了用LCD顯示,還可以用LED顯示。
⒈ 電路設(shè)計(jì)
設(shè)計(jì)時(shí)鐘DS1302并LED數(shù)碼管顯示電路如圖7-8所示,電路分成兩部分:左半部分是時(shí)鐘DS1302讀寫控制電路,右半部分是LED數(shù)碼管動(dòng)態(tài)顯示電路。
圖7-8.jpg (74.36 KB, 下載次數(shù): 39)
下載附件
2016-5-5 22:02 上傳
⑴ 時(shí)鐘DS1302讀寫控制電路
時(shí)鐘DS1302讀寫控制電路與實(shí)例 90、 91中相同,晶振32768Hz與DS1302 X1、X2端連接;VCC2為主電源,接+5V電源;VCC1為備用電源,接3.6V鋰電池;串行數(shù)據(jù)輸入/輸出端I/O、串行時(shí)鐘脈沖輸入端SCLK和復(fù)位/片選端 分別與80C51 P1.7、P1.6和P1.5連接。
⑵ LED數(shù)碼管動(dòng)態(tài)顯示電路
LED數(shù)碼管動(dòng)態(tài)顯示 電路與實(shí)例 65、 66、 71、 72、 73中相同,80C51 P1.2~P1.0與138譯碼輸入端CBA(A為低位)連接;譯碼輸出端 ~ (低電平有效)作為位碼,選通6位共陰型LED數(shù)碼管;138片選端E1接+5V, 、 接地,始終有效;80C51 接74LS377時(shí)鐘端CLK;P2.7接門控端 ;P0口接數(shù)據(jù)輸入端D0~D7,377 Q0~Q7輸出段碼,與數(shù)碼管筆段a~g、Dp連接。
74LS377和74LS138特性已分別在實(shí)例34和實(shí)例58中介紹,此處不再重復(fù)。
⒉ 程序設(shè)計(jì)
按圖7-8電路,要求開機(jī)即能直接顯示PC機(jī)時(shí)分秒數(shù)據(jù),時(shí)分秒數(shù)據(jù)間用小數(shù)點(diǎn)分隔,其中秒數(shù)據(jù)閃爍(亮600ms,暗400ms),并不斷更新。
實(shí)例92.jpg (181.02 KB, 下載次數(shù): 51)
下載附件
2016-5-5 22:03 上傳
實(shí)例92m.jpg (154.45 KB, 下載次數(shù): 42)
下載附件
2016-5-5 22:03 上傳
需要說明的是,T0 4ms中斷有3個(gè)作用:一是用于動(dòng)態(tài)掃描顯示,每隔4ms更換顯示位;二是用于秒閃爍,4ms計(jì)數(shù),前600ms亮,后400ms暗;三是用于在接近1秒(0.996秒)時(shí)突發(fā)讀時(shí)鐘。然后隔4ms再讀一次,即在0.996s和1s兩個(gè)時(shí)點(diǎn)突發(fā)讀時(shí)鐘。若在這兩個(gè)時(shí)點(diǎn)發(fā)現(xiàn)秒數(shù)據(jù)更新,就更新顯示值,爾后4ms計(jì)數(shù)重新開始。既做到及時(shí)更新,又避免在T0每一次4ms中斷時(shí)均去突發(fā)讀時(shí)鐘。為什么不在4ms計(jì)數(shù)1秒時(shí)一次性去突發(fā)讀時(shí)鐘呢?主要考慮4ms計(jì)數(shù)與1302實(shí)時(shí)時(shí)鐘可能(多數(shù))存在時(shí)差,若4ms計(jì)數(shù)1秒小于1302實(shí)時(shí)時(shí)鐘1秒,實(shí)時(shí)時(shí)鐘顯示滯后將超過1秒,而且這種“滯后”幾乎會(huì)一直保持下去(需累計(jì)時(shí)差大于一秒后才“正確”一次)。但若在0.996s和1s兩個(gè)時(shí)點(diǎn)突發(fā)讀時(shí)鐘,有時(shí)差時(shí),“滯后”只有一次,第二次即被更正,而且這種“正確”幾乎會(huì)一直保持下去(需累計(jì)時(shí)差大于4ms后才再“滯后”一次)。
⒊ Keil調(diào)試
本題Keil調(diào)試同上例。因涉及外圍元件DS1302,在Keil軟件調(diào)試中無法得到外圍元件的有效信號(hào)。因此,僅在Keil中,按實(shí)例1所述步驟,編譯鏈接,語法糾錯(cuò),自動(dòng)生成Hex文件,并在變量觀察窗口Watch頁中設(shè)置(設(shè)置方法參閱圖8-30)全局變量b(時(shí)鐘數(shù)據(jù)數(shù)組)和d(時(shí)鐘顯示數(shù)組),獲得數(shù)組b[]和d[]的首地址(分別為0x08、0x0f,用于在Proteus仿真中觀測)。
需要注意的是,引用實(shí)例90的3個(gè)子函數(shù)必須插入,否則Keil調(diào)試將顯示出錯(cuò)。
⒋ Proteus仿真
⑴ 按實(shí)例23所述Proteus仿真步驟,打開Proteus ISIS軟件,按表7-5選擇和放置元器件,并連接線路,畫出Proteus仿真電路如圖7-9所示。
表7-5.jpg (67.17 KB, 下載次數(shù): 30)
下載附件
2016-5-5 22:04 上傳
圖7-9 .jpg (75.25 KB, 下載次數(shù): 41)
下載附件
2016-5-5 22:05 上傳
⑵ 鼠標(biāo)左鍵雙擊Proteus ISIS仿真電路中AT89C51,裝入Keil調(diào)試后自動(dòng)生成的Hex文件。
⑶ 全速運(yùn)行后,LED顯示屏顯示PC時(shí)分秒實(shí)時(shí)數(shù)據(jù),中間用小數(shù)點(diǎn)分隔,秒數(shù)據(jù)閃爍。
⑷ 按暫停按鈕,打開80C51片內(nèi)RAM(主菜單“Debug”→“80C51 CPU”→“Internal(IDATA)Memory -U1”),可看到08H~0EH和0FH~14H已經(jīng)依次存放了時(shí)鐘數(shù)據(jù)數(shù)組b[]和顯示字段碼數(shù)組d[]的即時(shí)數(shù)據(jù),如圖 7-10所示。
⑸ 終止程序運(yùn)行,可按停止按鈕。
⒌ 思考與練習(xí)
本例程序中,T0 4ms中斷有什么作用?
|