我們以一個(gè)實(shí)際的時(shí)鐘電路來(lái)說(shuō)明定時(shí)器的軟件編程方法,時(shí)鐘就是我們最為常見(jiàn)的顯示時(shí)、分、秒為單位的計時(shí)工具,它是典型的應用代表。
時(shí)鐘的最小計時(shí)單位是秒,但使用單片機定時(shí)器來(lái)進(jìn)行計時(shí),若使用6.0MHz的晶振,即使按工作方式1工作,*的計時(shí)時(shí)間也只能到131ms,所以我們可把每個(gè)定時(shí)時(shí)間取125ms,這樣定時(shí)器溢出8次(125ms╳8=1000ms)就得到最小的計時(shí)單位秒。而要實(shí)現8次計數用軟件方法實(shí)現是輕而易舉的。
我們使用定時(shí)器1,以工作方式1工作,定時(shí)器進(jìn)行125ms定時(shí)。采用中斷方法進(jìn)行溢出次數的累計,當計滿(mǎn)8次即得到1秒的計時(shí)。
一個(gè)時(shí)鐘的計時(shí)累加,要實(shí)現分、時(shí)的進(jìn)位,要用到多種進(jìn)制,秒、分、時(shí)中的進(jìn)位是十進(jìn)制,秒向分進(jìn)位和分想時(shí)進(jìn)位卻是六十進(jìn)制,而每天又有十二小時(shí)制或二十四小時(shí)制,它們分別又是十二進(jìn)制和二十四進(jìn)制。從秒到分和從分到小時(shí)可以通過(guò)軟件累加和數值比較方法實(shí)現。
在單片機的內部RAM中,需要設置顯示緩沖區,顯示的時(shí)、分、秒值是從顯示緩沖區中取出的,在RAM中設置四個(gè)單元作為顯示緩沖區,分別是7AH、7BH、7CH。為使電路和原理敘述方便,我們這里不顯示秒值,秒的進(jìn)位我們通過(guò)閃爍分值實(shí)現。這樣我們一共有四位LED分別顯示時(shí)和分值。同時(shí)時(shí)鐘都需要校準的。在程序中還需設置顯示碼表,要顯示的數值通過(guò)查表指令將顯示用的真正碼值送到LED上。我們用單片機AT89C2051的PP3.4和P3.5兩個(gè)I/O口外接微動(dòng)開(kāi)關(guān)來(lái)實(shí)現時(shí)和分的校正,每按一次小時(shí)或分值加1,連續按下數值累計下去,實(shí)現時(shí)鐘的校準。
在電路中我們還設置了一個(gè)蜂鳴器,用作簡(jiǎn)單報時(shí)用,如可設早上7:30分起床,中午1點(diǎn)30分再有起床報時(shí),每次響時(shí)1分鐘,響1秒,停2秒的方式,而不是連續響鈴。這個(gè)程序我們采用12小時(shí)制,為此,要在程序中設置相應的標志,以利于主程序識別。同樣計時(shí)程序中還會(huì )有幾個(gè)相關(guān)的標志,主要是控制程序流的轉向。程序中我們都作了較詳細的注釋?zhuān)@里不再贅述。
硬件電路,我們還是以低價(jià)的AT89C2051單片機為微處理單元,這個(gè)芯片兼容C51指令系統,在C51上編寫(xiě)的程序,無(wú)需任何修改即可方便地移植到這個(gè)芯片上來(lái)。我們以P0口作為L(cháng)ED的字段位驅動(dòng)輸出,秒的“進(jìn)位”采用分值閃爍提示,亮0.5秒,熄0.5秒。,P3.1—P3.3用于位驅動(dòng),使用動(dòng)態(tài)掃描方式顯示,每位LED的顯示時(shí)間10—25ms之間均可,掃描頻率不能太高,否則每位LED顯示的時(shí)間過(guò)短,亮度太低,不易于觀(guān)看,以肉眼不感覺(jué)到LED閃爍為宜。為了直觀(guān),我們的驅動(dòng)輸出沒(méi)有采用集成電路,而是使用了分立元件—三極管,但工作原理卻是一致的。
時(shí)鐘的最小計時(shí)單位是秒,但使用單片機定時(shí)器來(lái)進(jìn)行計時(shí),若使用6.0MHz的晶振,即使按工作方式1工作,*的計時(shí)時(shí)間也只能到131ms,所以我們可把每個(gè)定時(shí)時(shí)間取125ms,這樣定時(shí)器溢出8次(125ms╳8=1000ms)就得到最小的計時(shí)單位秒。而要實(shí)現8次計數用軟件方法實(shí)現是輕而易舉的。
我們使用定時(shí)器1,以工作方式1工作,定時(shí)器進(jìn)行125ms定時(shí)。采用中斷方法進(jìn)行溢出次數的累計,當計滿(mǎn)8次即得到1秒的計時(shí)。
一個(gè)時(shí)鐘的計時(shí)累加,要實(shí)現分、時(shí)的進(jìn)位,要用到多種進(jìn)制,秒、分、時(shí)中的進(jìn)位是十進(jìn)制,秒向分進(jìn)位和分想時(shí)進(jìn)位卻是六十進(jìn)制,而每天又有十二小時(shí)制或二十四小時(shí)制,它們分別又是十二進(jìn)制和二十四進(jìn)制。從秒到分和從分到小時(shí)可以通過(guò)軟件累加和數值比較方法實(shí)現。
在單片機的內部RAM中,需要設置顯示緩沖區,顯示的時(shí)、分、秒值是從顯示緩沖區中取出的,在RAM中設置四個(gè)單元作為顯示緩沖區,分別是7AH、7BH、7CH。為使電路和原理敘述方便,我們這里不顯示秒值,秒的進(jìn)位我們通過(guò)閃爍分值實(shí)現。這樣我們一共有四位LED分別顯示時(shí)和分值。同時(shí)時(shí)鐘都需要校準的。在程序中還需設置顯示碼表,要顯示的數值通過(guò)查表指令將顯示用的真正碼值送到LED上。我們用單片機AT89C2051的PP3.4和P3.5兩個(gè)I/O口外接微動(dòng)開(kāi)關(guān)來(lái)實(shí)現時(shí)和分的校正,每按一次小時(shí)或分值加1,連續按下數值累計下去,實(shí)現時(shí)鐘的校準。
在電路中我們還設置了一個(gè)蜂鳴器,用作簡(jiǎn)單報時(shí)用,如可設早上7:30分起床,中午1點(diǎn)30分再有起床報時(shí),每次響時(shí)1分鐘,響1秒,停2秒的方式,而不是連續響鈴。這個(gè)程序我們采用12小時(shí)制,為此,要在程序中設置相應的標志,以利于主程序識別。同樣計時(shí)程序中還會(huì )有幾個(gè)相關(guān)的標志,主要是控制程序流的轉向。程序中我們都作了較詳細的注釋?zhuān)@里不再贅述。
硬件電路,我們還是以低價(jià)的AT89C2051單片機為微處理單元,這個(gè)芯片兼容C51指令系統,在C51上編寫(xiě)的程序,無(wú)需任何修改即可方便地移植到這個(gè)芯片上來(lái)。我們以P0口作為L(cháng)ED的字段位驅動(dòng)輸出,秒的“進(jìn)位”采用分值閃爍提示,亮0.5秒,熄0.5秒。,P3.1—P3.3用于位驅動(dòng),使用動(dòng)態(tài)掃描方式顯示,每位LED的顯示時(shí)間10—25ms之間均可,掃描頻率不能太高,否則每位LED顯示的時(shí)間過(guò)短,亮度太低,不易于觀(guān)看,以肉眼不感覺(jué)到LED閃爍為宜。為了直觀(guān),我們的驅動(dòng)輸出沒(méi)有采用集成電路,而是使用了分立元件—三極管,但工作原理卻是一致的。
這個(gè)電路結構決定LED采用共陽(yáng)極的數碼管,可以采用LQ5101BS普通的發(fā)光二極管,驅動(dòng)三極管可采用易得的2SA1015和2SC1815等型號,當然也可使用象S9012,S9013,S9014,2N5401,2N5555等小功率三極管,其它器件沒(méi)有特殊要求。為便于實(shí)驗,單片機AT89C2051可采用DIP20P插座,程序編制好后,調試無(wú)錯,即可燒寫(xiě)到AT89C2051中,值得一提的是,AT89C2051是Flash程序存儲器,程序可反復擦寫(xiě),對于做實(shí)驗是非常方便的 |