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