第89節(jié):用單片機(jī)內(nèi)部定時(shí)器做一個(gè)時(shí)鐘
從業(yè)近十年!手把手教你單片機(jī)程序框架 第89講
開場(chǎng)白:
很多網(wǎng)友建議,為了方便初學(xué)者學(xué)習(xí)編程思路,我應(yīng)該用單片機(jī)定時(shí)器做一個(gè)時(shí)鐘程序供大家參考學(xué)習(xí)。其實(shí)我前面第48節(jié)就已經(jīng)用ds1302做了一個(gè)可以顯示和更高時(shí)間的時(shí)鐘,這一節(jié)只要在第48節(jié)的源代碼基礎(chǔ)上,大的框架不用動(dòng),只需要把ds1302產(chǎn)生的時(shí)間改成用定時(shí)中斷產(chǎn)生的時(shí)間就可以了,改動(dòng)的地方非常小。但是為了讓時(shí)間的精度更高,最后必須跟標(biāo)準(zhǔn)時(shí)間進(jìn)行校驗(yàn),來(lái)修正系統(tǒng)中一秒鐘需要多個(gè)定時(shí)中斷的誤差,這個(gè)誤差決定了系統(tǒng)的時(shí)間精度,其實(shí)這個(gè)校驗(yàn)方法我在前面很多章節(jié)上跟大家介紹過(guò)了:
第一步:在程序代碼上先寫入1秒鐘大概需要200個(gè)定時(shí)中斷。
第二步:把程序燒錄進(jìn)單片機(jī)后,上電開始測(cè)試,手上同步打開手機(jī)里的秒表,當(dāng)手機(jī)的標(biāo)準(zhǔn)時(shí)間跑了780秒(這個(gè)標(biāo)準(zhǔn)時(shí)間跑得越長(zhǎng)校驗(yàn)精度越高),而此時(shí)單片機(jī)僅僅跑了1632秒。那么最終得出1秒鐘需要的定時(shí)中斷次數(shù)是:const_time_1s=(200*1632)/780=418。
第三步:如果發(fā)現(xiàn)時(shí)鐘還是不太準(zhǔn),可以繼續(xù)返回第一步根據(jù)最新1秒鐘的時(shí)間是418次,多校驗(yàn)幾次,來(lái)不斷調(diào)整const_time_1s的數(shù)值,直到找到相對(duì)精度的時(shí)間為止。
本系統(tǒng)僅供學(xué)習(xí),精度不可能做得很好,因?yàn)橛绊憰r(shí)間精度的因素還有定時(shí)中斷的重裝值,定時(shí)中斷里面的代碼盡量少,以及晶振等不好控制的因素。所以鴻哥一直不推薦在實(shí)際項(xiàng)目中用單片機(jī)的內(nèi)部定時(shí)器做實(shí)時(shí)時(shí)鐘,因?yàn)榫扔邢?。真正想要?zhǔn)確的時(shí)鐘時(shí)間,還是強(qiáng)烈建議大家用外部專用的時(shí)鐘芯片或者用CPLD/FPGA來(lái)做。
具體內(nèi)容,請(qǐng)看源代碼講解。
(1 硬件平臺(tái).
基于朱兆祺51單片機(jī)學(xué)習(xí)板。
(2)實(shí)現(xiàn)功能:
本程序有2兩個(gè)窗口。
第1個(gè)窗口顯示日期。顯示格式“年-月-日”。注意中間有“-”分開。
第2個(gè)窗口顯示時(shí)間。顯示格式“時(shí) 分 秒”。注意中間沒(méi)“-”,只有空格分開。
系統(tǒng)上電后,默認(rèn)顯示第2個(gè)窗口,實(shí)時(shí)顯示動(dòng)態(tài)的“時(shí) 分 秒”時(shí)間。此時(shí)按下S13按鍵不松手就會(huì)切換到顯示日期的第1個(gè)窗口。松手后自動(dòng)切換回第2個(gè)顯示動(dòng)態(tài)時(shí)間的窗口。
需要更改時(shí)間的時(shí)候,長(zhǎng)按S9按鍵不松手超過(guò)3秒后,系統(tǒng)將進(jìn)入修改時(shí)間的狀態(tài),切換到第1個(gè)日期窗口,并且顯示“年”的兩位數(shù)碼管會(huì)閃爍,此時(shí)可以按S1或者S5加減按鍵修改年的參數(shù),修改完年后,繼續(xù)短按S9按鍵,會(huì)切換到“月”的參數(shù)閃爍狀態(tài),只要依次不斷按下S9按鍵,就會(huì)依次切換年,月,日,時(shí),分,秒的參數(shù)閃爍狀態(tài),最后修改完秒的參數(shù)后,系統(tǒng)會(huì)自動(dòng)把我們修改設(shè)置的日期時(shí)間一次性更改到定時(shí)中斷函數(shù)內(nèi)部的時(shí)間變量,達(dá)到修改日期時(shí)間的目的。
S13是電平變化按鍵,用來(lái)切換窗口的,專門用來(lái)查看當(dāng)前日期。按下S13按鍵時(shí)顯示日期窗口,松手后返回到顯示實(shí)時(shí)時(shí)間的窗口。
[size=10.5000pt](3)源代碼講解如下:
總結(jié)陳詞:
任何一個(gè)電子產(chǎn)品在投入生產(chǎn)的時(shí)候都要考慮到生產(chǎn)的測(cè)試,朱兆祺51單片機(jī)學(xué)習(xí)板在生產(chǎn)加工后也一樣要進(jìn)行測(cè)試。那么這個(gè)測(cè)試的程序如何能夠做到快速,全面,易用這三個(gè)要求呢?欲知詳情,請(qǐng)聽下回分解-----生產(chǎn)朱兆祺51學(xué)習(xí)板的從機(jī)自檢測(cè)試程序源代碼.。