目錄
第1章 總體方案設計
1.1設計任務與要求
1.2設計原理或者設計思路
第2章 硬件電路設計
2.2顯示電路
2.3控制電路
第3章 軟件設計
3.1系統主程序
3.2系統子程序
3.3中斷服務程序
第4章 調試
4.1系統調試方法
4.2調試結果
4.3調試中遇到的問題及其解決方法
總結
附錄一
附錄二
第1章 總體方案設計
1.1設計任務與要求
1.1.1設計任務:
利用單片機為核心設計一個多功能電子表,具有電時鐘和跑表功能。用做時鐘時,在顯示器上顯示時、分、秒,用做跑表時,顯示范圍00時00分00秒-23時59分59秒并具有跑表啟動和跑表復位功能鍵。當按下啟動按鈕跑表開始計時,按下停止按停止計時,當按下復位按鈕跑表回零。
1.1.2設計要求:
1)確定系統設計方案;
2)進行系統的硬件設計;
3)完成必要的參數計算與元器件選擇;
4)完成應用程序設計;
5)應用系統的硬件和軟件的調試。
1.2設計原理或者設計思路
電子跑表的電路由多個部分組成,如控制按鍵的輸入電路,單片機的時鐘電路,復位電路 ,顯示電路,秒表電路,LED顯示器段碼驅動電路,LED顯示器位碼驅動電路及秒表記錄電路組成。
本電子跑表采用AT89C52單片機為核心器件,AT89C52是一個低電壓,高性能CMOS8位單片機,片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術生產,兼容標準MCS-51指令系統,片內置通用8位中央處理器和Flash存儲單元,AT89C52單片機在電子行業中有著廣泛的應用。
AT89C52有40個引腳,32個外部雙向輸入/輸出(I/O)端口,同時內含2個外中斷口,3個16位可編程定時計數器,2個全雙工串行通信口,2 個讀寫口線,AT89C52可以按照常規方法進行編程,也可以在線編程。其將通用的微處理器和Flash存儲器結合在一起,特別是可反復擦寫的 Flash存儲器可有效地降低開發成本。
將LED數碼管與單片機和開關連接,用于顯示時鐘與跑表。P3.2-P3.4分別接開關K1-K3,P3.5和P3.6接開關K4,P1.0-P1.5接LED數碼管輸出位碼,P0.0-P0.7輸出顯示段碼。電子跑表是利用單片機內部的定時器來實現的,首先設置單片機內部的一個定時器1對秒表數據處理,定時器0對時間數據處理。
在本設計中LED數碼顯示器采用的是共陰極接法,把發光二極管的陰極連在一起構成 公共陰極,使用時公共陰極接地,每個發光二極管的陽極通過電阻與輸入端相連。當陽極端輸入高電平時,段發光二極管就導通點亮,而輸入低電平時則不亮。
第2章 硬件電路設計 2.1時鐘電路
單片機工作的時間基準是由時鐘電路提供的。在單片機的XTAL1和XTAL2兩個管腳,接一只晶振及兩只電容就構成了單片機的時鐘電路。

圖2.1.1 時鐘電路
圖2.1.2 單片機
2.2顯示電路
本設計顯示用的是四位七段顯示共陰數碼管,用來顯示時間及跑表參數,LED數碼管顯示器成本低,配置靈活,與單片機接口簡單,在單片機應用系統中廣泛應用。
為了將時間顯示在LED數碼管上,可采用靜態顯示法和動態顯示法,由于靜態顯示法需要譯碼器,數據鎖存器等較多硬件,可采用動態顯示法實現LED顯示,通過對每位數碼管的依次掃描,使對應數碼管亮,同時向該數碼管送對應的字碼,使其顯示數字。由于數碼管掃描周期很短和人眼的視覺暫留效應,使數碼管看起來總是亮的,從而實現了各種顯示。
LED顯示流程圖如下:
圖2.2.1 顯示程序流程圖
圖2.2.2 LED數碼顯示管
2.3控制電路
K1鍵:模式選擇,可以讓時鐘、秒表、時間設置及秒表的記錄進行切換;
K2鍵:加一、開始及暫停,設置時間設置時可以調節時和分加一,秒表記錄時可以開始和暫停;
K3鍵:切換和清零,當需要設置時間時,按下K3可以切換‘時’和‘分’;當顯示秒表時,K3具有清零功能;
K4鍵:記錄秒表,電路為秒表功能時,按下K4可以記錄一組秒表數據,最多可以記錄20組數據。
圖2.3 開關控制電路
第3章 軟件設計
3.1系統主程序
主要進行定時器的初始化編程,然后反復調用顯示子程序的方法,等待中斷的到來。K1是模式選擇開關,當K1沒有按下時,數碼管表示時間;當K1第一次按下時,數碼管表示秒表;當K1第二次按下時,數碼管表示時間設置,并可以閃爍定位;當K1第三次按下時,數碼管顯示秒表記錄。
主程流程圖如下:單片機源程序如下:
圖3.1 主程序流程圖
3.2系統子程序
子程序包括時鐘設置顯示程序,時鐘運行顯示程序,時鐘溢出入口程序,跑表暫停,跑表記錄數據程序。
3.2.1顯示時鐘模式
如果K1=0時,程序設定為12.00.00起始計時,通過計數方式進行滿60秒分鐘位進一,滿60分小時位進一,滿24小時小時位清零。
3.2.2時間設置模式
如果K1=2時,先判斷是否為時間設置模式,再判斷K2是否按下,需要判斷是否為誤按,所以需要延時消抖,然后檢測用戶需要設置時還是分。
設置分,則跳到59之后重新賦值為0;
設置時,則跳到23之后重新賦值為0 。
K3每按一次Set0取反,時分切換,Set0為0時設置‘分’,Set0為1時設置‘時’。設置時間時用if語句實現分和鐘以0.5秒的頻率閃爍。
3.2.3秒表模式
如果K1=1時,先判斷是否為秒表模式,再判斷K2是否按下,需要判斷是否為誤按,所以需要延時消抖,K2每按一次TR1取反,暫停或開始定時器1,達到暫停或開始秒表的目的。當K4按下時秒表記錄一組數據。當K3按下時清除所有秒記錄數據,并停止定時器1。
3.2.4秒表記錄顯示模式
如果K1=3時,先判斷是否為秒表記錄顯示模式,再判斷K2是否按下,需要判斷是否為誤按,所以需要延時消抖,將秒表的記錄分為4組,可存20組數據。當K3按下時秒表所有數據清零,并停止定時器1。
定時器1函數對于秒表數據處理,每兩次循環進行一次操作,這樣秒表1(1/10秒位)每加1次為0.1s。當秒表1(1/10秒位)加到10時,重新賦值為0,此時秒表2(秒位)開始增加;當秒表2(秒位)加到60時,重新賦值為0,此時秒表3(分位)開始增加;當秒表3(分位)加到60時,重新賦值為0,此時秒表4(時位)開始增加;當秒表4(時位)加到10時,重新賦值為0。
定時器0函數每溢出10次Time0_bit取反一次,時間間隔為0.5秒閃爍一次,以達到時間設置模式時,分和時的閃爍。
3.3中斷服務程序
中斷服務程序的作用是進行計時操作,定時器0和定時器1都選擇第1種工作方式。定時器0和定時器1裝初值,定時50ms。
中斷服務程序流程圖如下:
圖3.3 中斷程序流程圖
第4章 調試4.1系統調試方法本次課程設計采用的是Proteus仿真軟件進行電路的仿真,編程使用Keil生成可執行文件加載到單片機中,通過對各個模塊程序的單步或跟蹤調試,使程序正確,最后統調程序,并生成相應的*.hex文件。進行程序的運行和調試,觀察顯示結果,根據顯示的結果和課題的要求再修改程序,再運行查找錯誤,直到滿足要求。
4.2調試結果K1鍵表示模式選擇,可以讓時鐘、秒表、時間設置及秒表的記錄進行切換;
K2表示加一、開始及暫停,設置時間設置時可以調節時間,秒表記錄時可以開始和暫停;
K3表示切換和清零,當需要設置時間時,按下K3可以切換‘時’和‘分’;當顯示秒表時,K3具有清零功能;
K4表示記錄秒表,電路為秒表功能時,按下K4可以記錄一組秒表數據。
圖4.2.1 秒表時的調試結果
圖4.2.2 時鐘調試結果
4.3調試中遇到的問題及其解決方法按下K4記錄秒表數據時,當記錄次數大于20時,還是會繼續保存數據,但由于AT89C52單片機內存不夠,保存次數多了就會出現亂碼。發現這個問題后小組成員檢查程序是否有錯,然后在同學的幫助下修改了程序。
總結在課程設計第一天,老師帶領我們焊電路板,為之后的實物連接做準備,有了上學期電子實習的經驗,這次焊接很迅速,半天就焊好了兩塊電路板,在老師的幫助下順利仿真。
課程設計開始幾天,基本上沒有收獲,不知從何下手,不知所措。為了看得更遠,,不妨站在前人的肩膀上,我在整體思路模糊的情況下,在網上找資料。也自己研究了一下Proteus仿真軟件的使用,仔細研究AT89C52芯片的主要功能及管腳接法,這也就為后面比較成功的仿真出結果打下了基礎。隨著涉獵的點滴積累,我對電子跑表的設計方案已經慢慢醞釀而成,有了方向和不少知識儲備后,在接下來的幾天,幾乎每天都有突破,雖然有時只是一句程序的修改或誕生,但那種收獲一直激勵著我。當然在設計過程中也遇到了一些問題,比如秒表記錄次數超過20次后會出現亂碼情況,在老師的指導下,經過一次又一次的思考,一遍又一遍的檢查,我終于發現了問題所在,也暴露了前期我在這方面的知識欠缺和經驗不足。實踐才是檢驗真理的唯一標準,唯有通過親自動手才能令我們掌握的知識不再是紙上談兵的東西。
經過一周的課程設計,我收獲頗多,有深刻的心得體會,實踐讓我們受益匪淺。首先是單片機方面,為了順利完成程序的編寫,我又撿起了大一所學習的C語言知識。其次鍛煉了小組合作的能力,合理的分工讓我們組的課程設計按時完成,并對本專業的課程充滿了濃厚的興趣,相信有了興趣,我在以后對本專業的學習會更加得心應手。在這次過程中我們也曾灰心也曾茫然,也曾不知所措,從一開始的自信滿滿,到最后的緊張繁雜,所有這些都令我回味無窮,這已經成為我人生道路上的寶藏。我想今后的學習和工作也是這樣的,汗水見證成功。
附錄一