(1)設計AT89S51的最小系統;
(2)LED顯示電路及與STC89S51接口,LED數碼塊顯示時、分、秒;
(3)時鐘調整電路及與STC89S51接口;
(4)電子時匯編鐘程序設計;
(5)基于Proteus的電子時鐘原理及仿真實現;
(6)電子時鐘實物制作;
(1)熟悉AT89C51內部定時器/計數器原理和應用,把理論加以實踐;
(2)了解使用單片機處理復雜邏輯的方法;
(3)掌握多位數碼動態顯示的方法;
(4)掌握多個按鍵的查詢和處理方法
(1)定時初值計算:
把定時器設為工作方式1,定時時間為62.5ms,則計數溢出16次即得時鐘計時最小單位秒。
假設使用T/C0,方式1,50ms定時,fosc=12MHz。
則初值X滿足(2^16-X)×1/12MHz×12μs =62.5ms
X=3036→101111011100→0BDCH
采用中斷方式進行溢出次數累計,計滿16次為秒計時(1秒)
從秒到分和從分到時的計時是通過累加和數值比較實現。
(2)電子鐘的時間顯示方案選擇:
電子鐘的時鐘時間在六位數碼管上進行顯示,因此,在內部RAM中設置顯示緩沖區共8個單元。
LED8 LED7 LED6 LED5 LED4 LED3 LED2 LED1
無 無 7EH 7DH 7CH 7BH 7AH 79
時十位 時個位 分十位 分個位 秒十位 秒個位
靜態顯示:所謂靜態顯示,就是當顯示器顯示某一字符時,相應的發光二極管恒定的導通或截止。該方式每一位都需要一個8 位輸出口控制。靜態顯示時較小的電流能獲得較高的亮度,且字符不閃爍。但當所顯示的位數較多時,靜態顯示所需的I/O口太多,造成了資源的浪費。
動態顯示:所謂動態顯示,就是一位一位的輪流點亮各個位,對于顯示器的每一位來說,每隔一段時間點亮一次。利用人的視覺暫留功能可以看到整個顯示,但必須保證掃描速度足夠快,字符才不閃爍。顯示器的亮度既與導通電流有關,也于點亮時間與間隔時間的比例有關。調整參數可以實現較高穩定度的顯示。動態顯示節省了I/O口,降低了能耗。
從節省I/O口和降低能耗出發,本設計采用動態顯示。
電子鐘設置3個按鍵通過程序控制來完成電子鐘的時間調整。
K5鍵復位
K1鍵調整時;
K2鍵調整分;
K3鍵調整秒
K4鍵完成調整
本次課程設計的按鍵通過外接button開關,來實現單片機對所選取功能查詢。根據理論知識我們知道,機械開關可能存在噪音的干擾,導致對高低點位識別錯誤,這是此方案的漏洞。最好的是外加去抖電路,例如D觸發器,或者軟件去抖。但由于按鍵的功能是對時間的加一調整,系統對電位識別準確度要求不是很高,同時受制于實物的限制,所以本次設計仍然采用了鍵盤查詢。
2.1功能說明
(1)利用STC89C52單片機內部的定時/計數器、中斷系統、以及按鍵鍵盤和LED顯示器等部件,設計一個單片機電子時鐘。設計的電子時鐘通過數碼管顯示,并能通過按鍵實現設置時間和復位控制等。
(2)此外還要實現對時間的調整功能,89c52的P1.0、P1.1、P1.2、P1.3、RST外接五個獨立按鍵,當按下P1.0按鍵時,系統進入調時鐘加一的顯示功能;當按下P1.1按鍵時,系統進入分鐘加一顯示的功能;當按下P1.2按鍵時,系統進入秒針加一顯示功能,當按下P1.3按鍵時,系統進入完成設置,確認開始計時的顯示功能;當按下RST按鍵時,實現對電子時鐘進行復位的功能。
(3)整個系統采用應用廣泛的AT89S52作為時鐘控制芯片,利用單片機內部的定時器\計數器來實現的,它的處理過程如下:首先設定單片機內部的一個定時器\計數器工作于定時方式,對機器周期計數形成基準時間,然后用另一個定時器\計數器或軟件計數的方法對基準時間計數形成秒,秒計60次形成分,分計60次形成小時,小時計24次則計滿一天,上述時分秒計滿即清零。然后通過數碼管把它們的內容在相應位置顯示出來即可。
(4)六位一體共陰數碼管是對實時時間以及所調整加一時間的顯示,采取的是動態顯示的方案,六位數碼管分別對應時鐘高低位、分鐘高低位、秒鐘高低位。
(3)在使用基于Proteus設計仿真使開發了硬件和軟件上的鬧鐘提醒功能,但考慮到STC89C51實物的按鍵位置和數量的限制,所以實物并沒有鬧鐘提醒功能,在此就不過多介紹。
三、電路設計
3.1電子鐘硬件總設計電路
.2CPU電路
中央處理器(CPU)是整個單片機的核心部件,是8位數據寬度的處理器,能處理8位二進制數據或代碼,CPU負責控制、指揮和調度整個單元系統協調的工作,完成運算和控制輸入輸出功能等操作。
圖3.2復位電路
3.3時鐘電路
如圖3.3所示,在內部方式時鐘電路中,必須在XTAL1和XTAL2引腳兩端跨接石英晶體振蕩器和兩個微調電容構成振蕩電路,通常C1和C2一般取22pF,晶振的頻率取值在1.2MHz~12MHz之間。對于外接時鐘電路,要求XTAL1接地,XTAL2腳接外部時鐘,對于外部時鐘信號并無特殊要求,只要保證一定的脈沖寬度,時鐘頻率低于12MHz即可。晶體振蕩器的振蕩信號從XTAL2端送入內部時鐘電路,它將該振蕩信號二分頻,產生一個兩相時鐘信號P1和P2供單片機使用。時鐘信號的周期稱為狀態時間S,它是振蕩周期的2倍,P1信號在每個狀態的前半周期有效,在每個狀態的后半周期P2信號有效。CPU就是以兩相時鐘P1和P2為基本節拍協調單片機各部分有效工作的。
圖3.3晶振電路
3.4驅動電路
由于本次設計用到了六位一體的共陰數碼管,受制于P0口的帶負載能力,所以增加了74LS245芯片來提升帶負載能力。
圖3.41即為基于74LS245的驅動電路,圖3.42為74LS245的內部引腳以下列出其主要功能
當片選端/CE低電平有效時
DIR=“0”,信號由B向A傳輸;(接收)
DIR=“1”,信號由A向B傳輸;(發送)
當CE為高電平時,A、B均為高阻態。
3.5按鍵控制電路
如圖3.5所示,按鍵開關K1、K2、K3、K4分別接P1.0、P1.1、P1.2
P1.3端,K1、K2、K3分別選擇對時、分、秒自加,低電平有效,K4用于確認完成時間校隊,開始計時。
圖3.5 按鍵電路
3.6 數碼管動態顯示電路
七段共陰數碼管顯示原理如圖3.61,數碼管首先從上到右,到下到左,到中間,最后到小數點分別標記為a b c d e f g dp八段其中小數點位DP為最高位,a段為最低位,要想顯示什么字符只需要使對應的段發光即可,一般的習慣是單片機的端口的 圖3.61七段數碼管原理
最低位接a段,次低位接b段,...最高位(如p0.7)接dp,顯示碼從高往低表示為為 dp g f e d c b a如要顯示“1”,只需要將b、c段點亮即可,若是共陰極,片選是低電平選中,某一段輸出高電平點亮,即顯示碼為00000110 即0x06,其他的依照該方法類推。
對圖3.62六位一體的共陰數碼管,某一時刻位選通其中一位,如P2口送出位信號如20H,則P2.5為1,其余位選位均為0,則最左邊的數碼管被選中;這時在字型口輸出該位要顯示的數字或字符的字型,亮1ms左右;接著位選選通另一位,其余位選關閉,字型口輸出該位要顯示的數字或字符的字型,雖然這時前一位位選已關閉,但基于眼睛的惰性,前一位顯示的數字或字型還留在眼中,依次一位位循環顯示下去,直至最后一位顯示完畢,一個動態掃描顯示結束。
由圖3.63,可見動態掃描顯示是在執行動態掃描顯示程序的。要連續顯示必須反復的去執行動態掃描顯示程序。一般可把動態掃描顯示編成個子程序,主程序反復去調用它。人眼的惰性有一定時間,一般10ms左右, 超過這一時間再去執行顯示程序,它就會閃爍,所以LED的位數不能太多
圖3.62 六位一體共陰數碼管
圖3.63為六位數碼管動態顯示原理框圖
圖3.61 數碼管動態顯示
四、模塊設計4.1程序設計流程
電子時鐘的軟件系統由主程序和子程序組成,主程序程序包含初始化參數設置、按鍵處理、數碼管顯示模塊等
(1)主程序
主程序先對顯示單元和定時器/計數器初始化,然后重復調用數碼管顯示模塊和按鍵處理模塊,當有鍵按下,則轉入相應的功能程序。主程序執行流程如圖4.11
5.1keil軟件仿真調試
(1)工程參數設置
用鼠標左鍵單擊主菜單Project一>Options forTarget'Targetl彈出工程參數設置對話框。關于工程參數設置的內容很多,篇幅所限,這里僅介紹通常需要設置的三個參數:
設置CPU型號。前面已經進行了設置。
在設置對話框的"Target"標簽下"Xtal(Mhz)"處輸入單片機的晶振
(2)編譯源文件
鼠標左鍵單擊主菜單Project一>Built target或快捷按鈕編譯文件。若有語法錯誤,輸出窗口將有相應提示信息。
雙擊提示信息行,光標會停留在源程序出錯處。在此次程序設計中,經檢查發現:程序3條LCALL指令被錯誤輸入成了LCAAL.用戶可根據提示修改源程序,然后再次編譯。注意。Keil具有語法檢查功能,源程序中正確的指令關鍵詞將變顏色,沒變色的為輸入錯誤,方便用戶查找語法錯誤。
(3)調試程序
源程序編譯通過,表明語法正確,卻并不能保證該程序能夠正確運行。還需要對其邏輯功能進行調試。Keil軟件具有很強的軟件仿真功能。
鼠標左擊主菜單Debug一>Sta№top DebugSession子菜單或調試/編輯模式切換按鈕。進入調試程序工作模式,軟件窗口如圖5所示。重復點擊該按鈕可以實現在編輯模式和調試模式之間進行切換。
調試程序時的程序運行控制按鈕從左到右依次為復位、連續運行,暫停、單步、過程單步、執行完當前子程序、運行到光標當前行。復位按鈕模擬芯片的復位,它將使程序回到最開頭處執行。當程序處于停止狀態時復位才有效,程序處于運行狀態時停止按鈕才有效。
5.2 Proteus仿真調試
(1)電路連接故障分析
Proteus的連線功能很強,如可以雙擊左鍵重復上次連線,雙擊右鍵刪除連線等。在連線過程中就出現了本以為連接上的節點,實際上卻沒有連接的問題,經分析發現連接上的點會有連接點出現,及時糾正了錯誤。又例如在某些不易連接且需要較長的線路連接端口,可采用網絡標號連接,但在標號連接時,要切記標號要易于區分,相同端口的標號一定要相同,連接過程中就有因為標號連接重復的問題,而導致數碼管顯示亂碼的問題。在調試的時候可以通過觀察仿真的電位,紅點為高電平、藍點為低電平,或者添加電位計,例如在數碼管顯示,送位選碼時就發現有一位未被選中,故立即調整位選碼RR程序代碼。
(2)仿真結果分析
電子時鐘主要的設計要求是能夠實現時鐘的一般功能,以及包括時間的調整功能,這個基于單片機的電子時鐘基本上實現了上述功能,能夠通過時間調整電路對時間進行調整以及復位,24小時計滿后能自動清零。
啟動仿真結果5.21
圖5.21啟動仿真結果
正常計時仿真結果如圖5.22
圖5.2 正常計時仿真結果
5.3 實物運行測試
在確認程序的調試和仿真結果的無誤后,根據清翔電子STC89C51所給的版本電路原理圖,進一步調整送顯和按鍵查詢程序,根據實際情況表明,時、分、秒的調整校對功能均為正常,設置完成按鍵也能對所校對時間開啟計時,故基本功能都正常實現。唯一不足的是計時精度有待提高,通過走時結果的實際情況和手機走時結果發現大概一個小時會慢1min左右。如圖5.31上電復位運行結果,5.32為正常走時結果
圖5.31上電復位運行結果
圖5.31 正常走時結果
6.1心得感悟
單片機作為我們主要的專業課程之一,我覺得單片機課程設計很有必要,而且很有意義。但當拿到題目時,確實不知道怎么著手,有些迷茫,上網查資料,問同學,在同學的幫助下,歷時一個星期,解決一個又一個的困難,終于完成任務。
在這次課程設計中,運用到了很多以前的專業知識,雖然過去從未獨立應用過它們,但在學習的過程中帶著問題去學我發現效率很高,這是我做這次課程設計的一大收獲。另外,要做好一個課程設計,就必須做到:在設計程序之前,對所用單片機的內部結構有一個系統的了解,知道該單片機內有哪些資源;要有一個清晰的思路和一個完整的的軟件流程圖;在設計程序時,不能妄想一次就將整個程序設計好,反復修改、不斷改進是程序設計的必經之路;要養成注釋程序的好習慣,一個程序的完美與否不僅僅是實現功能,而應該讓人一看就能明白你的思路,這樣也為資料的保存和交流提供了方便;在設計課程過程中遇到問題是很正常的,但我們應該將每次遇到的問題記錄下來,并分析清楚,以免下次再碰到同樣的問題的課程設計結束了,但是從中學到的知識會讓我受益終身。發現、提出、分析、解決問題和實踐能力的提高都會受益于我在以后的學習、工作和生活中。設計過程,好比是我們人類成長的歷程,常有一些不如意,但畢竟這是第一次做,難免會遇到各種各樣的問題。在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,不能靈活運用。
通過這次設計,我懂得了學習的重要性,了解到理論知識與實踐相結合的重要意義,學會了堅持、耐心和努力,這將為自己今后的學習和工作做出了最好的榜樣。另外,要非常感謝我的指導老師,是她指引我克服一個由一個的困難,讓我學會對困難無所畏懼,以及對問題的一些很重要的思考方法。
我學會對困難無所畏懼,以及對問題的一些很重要的思考方法
全部資料51hei下載地址(仿真工程+程序+word格式設計報告):
電子鐘課程設計.7z
(12.24 MB, 下載次數: 179)
歡迎光臨 (http://www.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |