歡迎您光臨本站 登入註冊首頁

概述

我們大家可能都有過這樣的遭遇:因為做其它事情,忘記了煤氣灶上煮的東西,使東西煮糊了或者水燒乾了;午睡捐心睡過了頭。如果你有一個定時器,在你設定的時間到達時提醒你,你就再也不用擔心了。本文介紹一個用AT……

我們大家可能都有過這樣的遭遇:因為做其它事情,忘記了煤氣灶上煮的東西,使東西煮糊了或者水燒乾了;午睡捐心睡過了頭。如果你有一個定時器,在你設定的時間到達時提醒你,你就再也不用擔心了。本文介紹一個用AT89C205l單片機製作的倒計數定時器,可在1~99分鐘內設置定時時間,時間到達時會用嘟、嘟的報警聲提醒你,在定時過程中用數碼管顯示剩餘的時間。使用這個定時器可以讓你的生活井井有條。

  電路工作原理
倒計數定時器電路見圖.電路由單片機電路、數碼顯示電路和報警電路等部分組成。
  AT89C2051、X1、R1、C1等組成單片機電路,Rl、C1組成單片機的複位電路,接通電源的瞬間,由於電源電壓通過對C1的充電過程,單片機AT89C2051的複位端1腳獲得一個高電平複位脈衝,使得單片機進入初始狀態。
  數碼管DSl、DS2、三極體VT2、VT3、電阻R3~R11等組成數碼顯示電路,兩個數碼管分別顯示分和十分。由於每個數碼管有七個筆劃段A-G顯示單元(小數點DP在這裡沒有使用),按常規的驅動方法要7×2=14條。I/O線,對於AT89C2051來說顯然不夠,因此這裡採用動態掃描顯示的方式來解決這一問題,只需要7+2=9條I/O線。動態掃描顯示是把兩個數碼管的七個筆劃段A~G的同名端連在一起,而每一個數碼管的公共端COM是各自獨立地受I/0線控制,AT89C2051向字形輸出口送出字形碼時,所有數碼管接收到相同的字形碼,但是究竟哪一位顯示,則取決於COM端,而COM端是由P3.5和P3.7口控制的,P3.5和P3.7口採用分時的方法,通過VT2、VT3輪流控制兩個數碼管的COM端,使兩個數碼管輪流點亮。由於AT89C2051的P1口能灌入較大的電流,所以這裡採用了共陽的數碼管。
  在輪流點亮掃描過程中,每位數碼管點亮時間是極短的,由於人的視覺暫留現象,儘管實際上各位數碼管並非同時點亮,但給人的印象就是一組穩定的顯示數據,不會有閃爍感。
  發光二極體VDl作工作狀態指示,在定時期間其閃爍顯示,其餘時間則不顯示。VTl、R2、sPl等組成報警電路,定時結束時發出報警聲。
  按鈕s1、s2為定時時間設定按鈕,s1設定分位,s2設定十分位,分位和十分位分別進行設置,按動相應的按鈕,對應的數碼管顯示的數字即會隨之改變。 按鈕s3為定時開始啟動按鈕,設定好定時時間后按一下s3即啟動定時器進人倒計時,定時時問到達后發出報警聲,同時數碼管顯示時間為0HD,報警和顯示各佔0.25秒交替進行,持續時間為60秒。如果要提前結束報警只要按一下s3即可,結束報警后電路回到初始狀態,這時顯示的定時時間為上一次設定的時問,這對於反覆使用同一定時時間的場合十分方便,如用作英語口語測試定時器。
  主程序流程圖見圖,程序使用彙編語言編寫。程序由主程序、定時中斷子程序、數碼顯示子程序、延時子程序等模塊組成,主程序由鍵盤處理、報警等部分組成。

  由於採用了動態掃描顯示的方式,雖然簡化了電路,節省了I\O線,但佔用cPu的時間多,因此必須採用調用定時中斷的方式來計時,以減小CPu負擔,定時器的定時時 間 為60ms,調用1000次即為1分鐘。延時子程序主要供顯示子程序和報警程序調用,延時時間為0.5ms,延時時間決定了數碼顯示的刷新頻率和報警的音頻頻率,這兩個頻率均為1000Hz.
  字形碼的輸出用了口的P1.1~P1.7,P1.0為空,P1口輸出的數據通過查表獲得。數據位和字形的對應關係如附表所示,因為數碼管為共陽型,所以相應的輸出位為0時筆段亮。存儲器20h、21h單元分別作分位數和十分位數的存儲單元,其數值作為查表的地址值。表中P1.0為空,其值均取1.
  動態掃描顯示由數碼顯示子程序完成,當分位數送到P1口時,P3.5輸出低電平,vT3導通,數碼管DS2顯示分位數;當十分位數送到P1口時,P3.7輸出低電平,vT2導通,數碼管顯示十分位數。這樣輪流工作即可顯示兩位數的時間。由於採用了動態掃描顯示的方式,所以在主程序的鍵盤處理、報警等部分也要分時調用數碼顯示子程序,只有這樣才能正確地顯示數碼時間,以便進行操作。
  印刷電路板採用萬能電路板,ICl用AT89C2051單片機,用12MHz的石英晶體,D1、D2選用共陽型的LED數碼管,用阻貳為16Ω的無源電磁式蜂鳴器,其餘元器件的參數見第一頁圖。
  安裝前先將彙編源程序編譯成目標文件即HEX文件,再用編程器將HEX文件寫入AT89C205 1晶元。
  設置定時時間時,按動s1或s2一次對應的數位增加1,到9后再按一下即回到0,如果按下后不鬆開,則數字不斷翻動,每0.2秒跳一個數,到你所需要的數后鬆開即可。開機后定時時間的初始值為00,可根據需要修改程序來調整這個初始值,例如要把初始值調整為45分鐘,只需要將程序第9行和第10行修改成mov 20h,#5h和mov 21h,#4h即可。

[admin via 研發互助社區 ] 基於AT89C2051單片機的倒計數定時器電路已經有3436次圍觀

http://cocdig.com/docs/show-post-419.html