




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、摘 要設計的反應速度測量器,主要由51單片機、數(shù)碼管和少量的獨立按鍵構成,其中單片機是核心,數(shù)碼管作為顯示設備,獨立按鍵作為控制設備。當測試鍵按下后,測試LED點亮,當定時時間到后,測試LED熄滅,此時測試按鍵才可以松開,否則判斷犯規(guī),通過數(shù)碼管顯示測試結果。關鍵詞:單片機;反應速度;數(shù)碼管AbstractThe design speed measurement device mainly consists of 51 single-chip, digital control and few independent press constitutes, SCM is the core, dig
2、ital tube display device, independent press as a control device. After when the test button is pressed, the test LED lights, when time after time, the test LED is off, when test button can loosen, or judge fouls by digital tube display test results.Keywords: Microcontroller; speed; digital tube目 錄引言
3、11. 設計要求22. 設計方案22.1 系統(tǒng)功能模塊22.2 方案Proteus初步仿真32.3 單片機最小系統(tǒng)72.4 驅動電路72.4 顯示電路82.5 控制電路93. 程序流程圖104. 關鍵部分程序代碼124.1 功能選擇124.2 等待測試鍵按下124.3 等待LED熄滅134.4 LED熄滅,CPU開始計時145. PCB制作小結146. 總結15謝 辭16參考文獻17附錄1元器件清單18附錄2 原理圖19附錄3 PCB20附錄4 完整程序21桂林電子科技大學基礎工程設計論文引言隨著現(xiàn)代科技的發(fā)展,很多東西都走向了電子化,為了準確和方便的測試人的反應速度,人們也就發(fā)明出各種各樣的
4、反應速度測試器,現(xiàn)在的測試器種類越來越多,技術越來越先進。為了讓我們了解反應速度測試器的基本原理,這次課程設計就要求做一個基于單片機的反應速度測試器。通過實踐證明,單片機、數(shù)碼管、獨立按鍵等結合起來可以達到我們目的。1.設計要求(1)測試者按下按鈕,測試指示燈亮起,測試開始。(2)在測試過程中,測試者要集中注意力,一直觀察測試燈,當看到燈滅時,測試者要迅速放開按鈕,從測試燈滅到按鍵彈起的這一段時間,即為反應時間,在4位LED數(shù)碼管上 用毫秒作為單位顯示結果。(3)若測試者在燈滅前放開按鈕,則系統(tǒng)自動判定為犯規(guī),并顯示出錯信息。(4)測試燈亮滅的時間長短可設定及系統(tǒng)自動產生。2.設計方案以單片機
5、作為核心,選擇數(shù)碼管作為輸出設備,獨立按鍵作為輸入設備。因為選擇的數(shù)碼管是共陰的。若直接使用單片機進行驅動,則驅動能力不夠,所以通過控制74LS373來對數(shù)碼管進行驅動。其中數(shù)碼管是通過動態(tài)掃描顯示,雖然也可以選擇靜態(tài)顯示的方式,但是靜態(tài)顯示意味著額外的硬件開銷,而在能達到同樣的效果的前提下,首選開銷小的方案。四個獨立按鍵基本功能是功能鍵1、功能鍵2、確定和測試開始/結束。2.1系統(tǒng)功能模塊單片機最小系統(tǒng)顯示電路驅動電路控制電路電源 圖2.1系統(tǒng)框圖2.2 方案Proteus初步仿真圖2.2初始化完成在Proteus的初步仿真中,單片機通過控制74LS373對數(shù)碼管進行驅動顯示,顯示執(zhí)行到各個
6、階段的提示,比如系統(tǒng)初始化完成提示為FFFF、選擇手動設置熄滅LED的時間提示為A001等等,最后就是測試完成以后顯示測試結果。四個獨立按鍵分別為功能鍵1、功能鍵2、確定鍵和測試開始/結束鍵。如圖2.2所示,現(xiàn)在系統(tǒng)已經初始化完畢。圖2.3選擇手動設置時間系統(tǒng)開始運行時,需要選擇熄滅LED的時間間隔,有兩種選擇:一種是手動設置;一種是系統(tǒng)隨機生成。選擇完后,系統(tǒng)根據(jù)測試者的選擇進行設置熄滅LED時間間隔。之后等待測試者按下測試鍵,開始進行測試。在LED熄滅之前,測試者提前松開測試鍵,數(shù)碼管輸出報錯提示F000,測試結束。如圖2.3所示,現(xiàn)在選擇的是手動設置LED熄滅時間,數(shù)碼管顯示提示代碼A0
7、01,設置為3秒后測試LED熄滅。圖2.4系統(tǒng)設置完成LED熄滅時間在測試者選定好LED熄滅時間后,如圖2.4所示,系統(tǒng)根據(jù)測試者設定的時間間隔進行設置完成后,數(shù)碼管顯示提示代碼B000,表明系統(tǒng)已經進行設置完畢,可以開始進行測試。只要測試者按下測試鍵后,測試立即開始。圖2.5等待LED熄滅如圖2.5所示,等待LED熄滅階段。測試者按下測試鍵以后,如果在LED熄滅之前不松開測試按鍵,則不會報錯,否則報錯輸出提示代碼F000,本次測試失敗。圖2.6 CPU開始計時如圖2.6所示,此時LED已經熄滅,CPU開始計時,只要測試者松開按鍵,經過單片機進行數(shù)據(jù)處理,測試者的反應速度通過數(shù)碼管進行顯示。圖
8、2.7 顯示測試結果如圖2.7所示,當測試LED熄滅后,測試者迅速松開測試鍵,數(shù)碼管顯示出測試者的反應速度時間。若測試者需要繼續(xù)按照原先的設置再次進行一次測試,先按下功能鍵1,再按確定鍵。若要重新進行選擇LED熄滅時間設置,選擇功能鍵2,再按下確定鍵即可。通過Protues進行初步的仿真,可知道這個方案是可行的,而在實際的制板和這個原理圖肯定是有差別的,但是大體上是一樣的。因為在仿真軟件中,部分元件的不存在并不影響單片機的運行,所以在仿真的原理圖中省略了一部分的元件。因為Proteus是仿真的,處于理想條件下的設計,所以在實際中還需要仔細的調試程序和板子才可以真正達到最初的設計目標。所以根據(jù)這
9、個基本的仿真方案,進行了符合實際的修改。2.3 單片機最小系統(tǒng)圖2.8 最小系統(tǒng)單片機的P0口作為數(shù)據(jù)IO口,P3.2P3.6分別控制KEY1KEY4。而P1.51.6和RST引腳用來配合燒錄器進行下載程序進單片機。圖2.8中的C4、C5電容起到穩(wěn)定振蕩頻率的作用。2.4 驅動電路圖2.9 驅動電路當單片機通過74LS373進行驅動數(shù)碼管顯示的時候,因為P0口是一個準雙向的端口,它內部沒有集成上拉電阻,因此它只能輸出低電平,而不能輸出高電平,繼而影響對數(shù)碼管的控制。因此如果想讓它輸出高電平的話,需要接上拉電阻。因此在P0口接到74LS373的數(shù)據(jù)口之間加上上拉電阻,使P0口可以正常的輸出高電平
10、。2.4 顯示電路圖2.10顯示電路驅動芯片74LS373 的Q01Q08分別接到4位7段的數(shù)碼管的引腳18,作為數(shù)據(jù)輸入口。而數(shù)碼管的引腳912分別是決定數(shù)碼管的位選,單片機的P2.0P2.3進行控制。數(shù)碼管的顯示采用動態(tài)掃描進行顯示,相比傳統(tǒng)的靜態(tài)顯示方式,更加節(jié)省資源和可靠。動態(tài)數(shù)碼掃描顯示方式是利用了人眼的視覺暫留效應,把數(shù)碼管按一定順序進行點亮,當點亮的頻率(即掃描頻率)不大時,我們看到的是數(shù)碼管一個個的點亮,然而,當點亮頻率足夠大時,我們看到的不再是一個一個的點亮,而是全部同時顯示(點亮),與傳統(tǒng)方式得到的視覺效果完全一樣。因此我們只要給數(shù)碼管這樣一個掃描頻率,那么就可以實現(xiàn)數(shù)碼管
11、同時點亮。2.5 控制電路圖2.11 控制電路在默認情況下,單片機檢測到按鍵端口為高電平。當按鍵被按下的時候,經過軟件消抖后,檢測到端口變?yōu)榈碗娖?,即認為按鍵被按下。四個按鍵的功能分別為功能鍵1、功能鍵2、確定鍵和測試開始/結束鍵。在系統(tǒng)初始化完畢時,功能鍵1和功能鍵2分別表示手動設置LED熄滅時間和系統(tǒng)隨機生成熄滅時間。而當進入手動設置熄滅時間時,此時功能鍵1和功能鍵2表示為設定秒和設定百毫秒。開始3.程序流程圖系統(tǒng)初始化Y是否使用系統(tǒng)隨機時間?N手動設定時間間隔設定是否完成?NY設置熄滅LED時間N測試開始按鍵是否按下?Y定時時間是否到了?NYLED熄滅,CPU開始進行計時測試開始按鍵是否
12、松開?NY顯示反應時間是否重新設置測試間隔時間?NY圖3.1 程序流程圖因為數(shù)碼管的顯示有限,所以通過顯示以下代碼作為各個運行階段的提示初始化代碼 FFFF手動設置定時熄滅LED時間 A001系統(tǒng)隨機定時熄滅LED時間 A002系統(tǒng)設定完成定時時間 B000在LED熄滅前松開測試鍵報錯 F000CPU計時超時FF004.關鍵部分程序代碼4.1功能選擇while(1)key = KeyScan();/默認返回0Display();if(1 = key)Menu_Choice = 1;/選擇手動設置時間提示代碼 'A001' Dis0 = 1;Dis1 = Dis2 = 0;Dis
13、3 = 10;else if(2 = key)Menu_Choice = 2;/系統(tǒng)隨機設置時間提示代碼 'A002'Dis0 = 2;Dis1 = Dis2 = 0;Dis3 = 10;else if(3 = key)/確定鍵結束選擇break;4.2等待測試鍵按下while(1)Display();if(0 = KEY_4) /等待測試鍵按下Dis_Pos = 0xff;/數(shù)碼管熄滅LED_0 = 0;/點亮測試燈TR0 = 1;/啟動定時器0,開始計時break;/跳出,執(zhí)行下一階段 4.3 等待LED熄滅milsec_time= time_back; /恢復計時時間wh
14、ile(1)if(1 = TF0)-milsec_time;TF0 = 0;TH0 = 0xFC;TL0 = 0x18;if(milsec_time <= 0)LED_0 = 1;/定時時間到,熄滅LEDbreak;if(1 = KEY_4)/判斷是否松開測試按鍵Dis0 = Dis1 = Dis2 = 0;/設置錯誤提示代碼 'F000'Dis3 = 14;Err = 1;break;4.4 LED熄滅,CPU開始計時Reflect_Time = 0;TR0 = 1;/啟動定時器0,開始計時while(0 = KEY_4)if(1 = TF0)/ 1ms為計時單位TF0
15、 = 0;TH0 = 0xFC;TL0 = 0x18;+Reflect_Time;if(Reflect_Time >= 10000) /超出顯示9999最大時間,提示代碼'EE00' 表示超時 ,結束本次測試Reflect_Time = 0;Time_Out = 1;break;5.PCB制作小結因為4位7段的數(shù)碼管和芯片74LS373引腳號都是交叉的,如果想要單面板走線而且不用跳線的情況下是很困難的,而與其選擇跳線,不如直接做雙面板更好,雖然雙面板的制作比單面板來得麻煩點,但是比用跳線更加穩(wěn)定和美觀。此外,在板子腐蝕以后,先鉆孔,再用砂紙磨掉板子上的碳粉,最后涂上松香。
16、但是有一點需要注意的就是,涂的松香不能太薄,否則不能起到防氧化的作用,造成板子光澤顯得很暗淡。對數(shù)碼管進行布局的時候注意引腳位置,仔細對照原理圖,否則很容易放反。最后,在制作雙面板的時候,最重要一步就是對孔,底層和頂層的轉印紙在對孔時候一定盡可能的重合在一起,否則做出來的板子在鉆孔后是不能使用的。而在使用熨斗進行轉印的時候,注意控制時間,時間太長了會帶來腐蝕上的麻煩。6.總結因為預算有限,所以設計的方案使用的是數(shù)碼管作為顯示設備,但其先天不足之處是顯示不夠直觀,只能通過一些固定的提示代碼來說明當前運行情況。如果在預算允許的情況下,使用12864液晶作為顯示設備更加好,能夠使測試者使用起來更加容
17、易,顯示得更加直觀。在制版之前,先進行Proteus仿真,在仿真中進行代碼調試,仿真成功意味已經成功了一半。其中需要注意的就是仿真中的延遲和實際運行的延遲是有區(qū)別的,最好的方法就是使用定時器進行延遲。在Proteus中進行代碼調試的時候,為了方便觀察各個階段執(zhí)行的情況,分別設置不同的提示代碼,確認執(zhí)行的情況是否如預期所想。每完成一個階段的設置,就在數(shù)碼管上顯示當前階段的提示代碼,并且只有當按下確定鍵后,才能執(zhí)行下一個階段設置。這樣有利于測試各個部分代碼的執(zhí)行情況,并且容易定位有問題的地方。雖然通過數(shù)碼管顯示提示代碼,可以具體知道執(zhí)行到那個階段,但是因為數(shù)碼管能顯示的信息有限,所以就算有問題,能
18、了解問題的情況很有限,如果能更換12864液晶顯示,那就更加方便和直觀了。在對板子進行第一次調試的時候,就發(fā)現(xiàn)了問題,數(shù)碼管無法進行正常的顯示和控制,經過檢查PCB和程序,發(fā)現(xiàn)沒有問題,排除了軟件和PCB線路方面的問題。那就剩下是否是元件插反的問題,最后發(fā)現(xiàn)是數(shù)碼管放反了,調整好數(shù)碼管之后,顯示方面的問題解決了。接下來就是軟件部分的調試,首先是檢查按鍵是否能正??刂葡到y(tǒng)的各種功能,這部分在仿真經過仔細的調試,所以在實際板子中也沒有問題。再下來就是檢查各個功能能否正常運行,在檢查到LED熄滅定時部分和CPU計時部分出現(xiàn)了問題。在LED熄滅定時部分,按照預先的設想,當按下測試鍵以后,LED點亮,定
19、時時間到,LED熄滅??墒?,實際上是LED點亮后即使超過了定時時間,也不熄滅。經過分析,問題是出在顯示函數(shù),因為我希望通過數(shù)碼管來了解系統(tǒng)運行到具體那個階段,所以在每個運行階段都添加了顯示函數(shù),而顯示函數(shù)里面需要用到延遲,造成了定時時間出現(xiàn)錯誤。當我把這兩部分里面的顯示函數(shù)都刪掉以后,系統(tǒng)才運行正常。改進的方法是使用LCD1602或者12864液晶顯示,這樣就不必要像數(shù)碼管那樣需要動態(tài)掃描,也就不會需要延遲函數(shù)的調用,繼而就不會造成定時上的誤差了。最后就是整理一下程序代碼,對關鍵部分代碼進行詳細的注釋,刪掉一些測試部分的代碼,優(yōu)化程序,使程序運行得更加快。在隨機設定LED熄滅時間里,隨機時間用
20、的是rand()函數(shù)和srand()函數(shù)配合使用生產隨機數(shù),srand()函數(shù)的隨機種子是根據(jù)上一次生成的隨機數(shù)為基礎的。還有一種方法就是系統(tǒng)運行開始就啟動一個定時器不斷的計數(shù),某一個時刻生成的隨機數(shù)種子以定時器里面的數(shù)值為基礎。最終,經過硬件和軟件的調試,板子運行正常,達到如期的設想。經過本次經歷,了解到了一個完整系統(tǒng)設計的步驟和方法。對于加深了對單片機的認識,加強了對單片機在應用方面的能力,特別是硬件方面的。謝 辭參考文獻1 王選民.智能儀器原理及設計M.清華大學出版社,2010:7678.2 王守中.51單片機開發(fā)入門與典型實例M.人民郵電出版社,2008:4142, 6870.3 白駒
21、珩, 雷曉平.單片計算機及其應用M.高等教育出版社, 電子科技大學出版社,2005:8692 .4 彭偉.基于8051+Proteus仿真M.電子工業(yè)出版社,2012:1321.附錄1元器件清單序 號名 稱數(shù) 量單 價備 注1單片機89C51及底座12圓孔插座*113四位共陰數(shù)碼管14電解電容10uf1574LS373芯片16排阻10K*817LED 5MM18按鍵6MM*6MM59電容30pF210電阻360歐111晶振12MHz112電阻10K113電阻100歐114ISP下載口1151617合計19附錄2 原理圖附錄3 PCB附錄4 完整程序#include <reg52.h>
22、;#include <stdlib.h>typedefunsigned int uint16;typedefunsigned char uint8;#define Dis_Port P0#define Dis_Pos P2/*變量*/char Dis4;char code Seg16 = 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;/共陰char code Seg_Pos4 = 0xf7,0xfb,0xfd,0xfe;uint16 Reflect_Time;uint1
23、6 milsec_time;uint8 seed = 5000; /隨機數(shù)種子/*IO引腳定義*/sbit LED_0 = P32; /測試燈sbit KEY_1 = P33;/秒設置 功能選擇1 手動設置定時sbit KEY_2 = P34;/毫秒設置功能選擇2隨機設置定時sbit KEY_3 = P35;/確定鍵sbit KEY_4 = P36;/測試開始/返回鍵/*函數(shù)定義*/void Display(void);uint8 KeyScan(void);void Delay(uint8 x);void Set_Time(void);void Rand_Time(void);void De
24、lay2(uint8 x);void main()uint8 Menu_Choice = 0;uint8 key, Time_Out, Err, return_key = 0;uint16 time_back = 0;uint8 re_begin = 0;/* 以12MHZ晶振為標準進行定時1MS 定時器0 定時1 初始化 16位計數(shù)器 */*利用軟件TR0 TR1 進行控制定時器啟動*/*其中TR0用于計時,TR1用于延時計時 */ TMOD = 0x11;TH0 = 0xFC;TL0 = 0x18;TH1 = 0xFC;TL1 = 0x18;Err = 0;while(1)/*顯示初始化提
25、示 'FFFF' */Dis0 = Dis1 = Dis2 = Dis3 = 15;Time_Out = 0;LED_0 = 1;if(0 = re_begin)/*進行功能選擇 KEY1進入手動設定時間間隔, KEY2進行系統(tǒng)隨機設定*/while(1)key = KeyScan();/默認返回0Display();if(1 = key)Menu_Choice = 1;/選擇手動設置時間提示代碼 'A001' Dis0 = 1;Dis1 = Dis2 = 0;Dis3 = 10;else if(2 = key)Menu_Choice = 2;/系統(tǒng)隨機設置時間
26、提示代碼 'A002'Dis0 = 2;Dis1 = Dis2 = 0;Dis3 = 10;else if(3 = key)/確定鍵結束選擇break;if(1 = Menu_Choice)/手動設置Set_Time();else/隨機設置Rand_Time();time_back = milsec_time;/存儲定時時間/* 設定完成 提示代碼 'B000'*/Dis0 = Dis1 = Dis2 = 0;Dis3 = 11;/重新開始else/*原來的設置重新進行測試 提示代碼 B000 */Dis0 = Dis1 = Dis2 = 0;Dis3 = 11
27、;/*等待測試開始*/while(1)Display();if(0 = KEY_4)Dis_Pos = 0xff;LED_0 = 0;/點亮測試燈TR0 = 1;/啟動定時器0,開始計時break;milsec_time= time_back; /恢復計時時間while(1)if(1 = TF0)-milsec_time;TF0 = 0;TH0 = 0xFC;TL0 = 0x18;if(milsec_time <= 0)LED_0 = 1;/定時時間到,熄滅LEDbreak;if(1 = KEY_4)/判斷是否松開測試按鍵Dis0 = Dis1 = Dis2 = 0;Dis3 = 15;
28、Err = 1;break;/設置錯誤提示代碼 'F000'TR0 = 0;/關閉定時器0TH0 = 0xFC;TL0 = 0x18;if(0 = Err)Reflect_Time = 0;TR0 = 1;/啟動定時器0,開始計時while(KEY_4 = 0)if(1 = TF0)/ 1ms為計時單位TF0 = 0;TH0 = 0xFC;TL0 = 0x18;+Reflect_Time;if(Reflect_Time >= 10000) /超出顯示9999最大時間,提示代碼'FF00' 表示超時 ,結束本次測試Reflect_Time = 0;Time_
29、Out = 1;break;/*測試結束 顯示測試結果 */TR0 = 0;/關閉定時器0 結束計時if(0 = Time_Out)/處理顯示數(shù)據(jù)Dis0 = Reflect_Time % 10;Reflect_Time /= 10;Dis1 = Reflect_Time % 10;Reflect_Time /= 10;Dis2 = Reflect_Time % 10;Reflect_Time /= 10;Dis3 = Reflect_Time % 10;else/顯示超時錯誤 'FF00'Dis1 = Dis0 = 0;Dis3 = Dis2 = 15;/*確定鍵 開始再一次
30、測試 以原來的設置 測試鍵 重新進行設置 進行測試*/while(1)Display();key = KeyScan();if(1 = key)/保持原來的設置進行測試Err = 0;re_begin = 1;Dis0 = 1;Dis1 = Dis2 = 0;Dis3 = 12;else if(2 = key)/重新選擇設置進行測試Err = 0;re_begin = 0;Dis0 = 2;Dis1 = Dis2 = 0;Dis3 = 12;else if(3 = key)break;/整體while()/*函數(shù)體*/void Delay(uint8 x)uint8 i;TR1 = 1;i = 0;while(i < x)if(1 = TF1)TF1 = 0;TH1 = 0xFC;TL1 = 0x18;+i;TR1 = 0;voi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇揚州歷年中考作文題與審題指導(2006-2023)
- 保時捷應聘測試題及答案
- 2024年紡織品檢驗員學習方法試題及答案
- 張衡傳教學課件
- 服裝與實際穿著體驗的結合試題及答案
- 病原檢測面試題目及答案
- 安全測試面試題目及答案
- 商業(yè)美術設計師市場推廣試題及答案
- 2024年紡織品檢驗員考試亮點試題及答案
- 提升考試水平的國際商業(yè)美術設計師試題及答案
- 小學數(shù)學《分數(shù)除法》50道計算題包含答案
- 仿制藥與原研藥競爭分析
- 腦洞大開背后的創(chuàng)新思維學習通超星期末考試答案章節(jié)答案2024年
- 科傻平差軟件說明指導書
- 臨時聘用司機合同范本
- ipo上市商業(yè)計劃書
- 抖音短陪跑合同范本
- HJ 636-2012 水質 總氮的測定 堿性過硫酸鉀消解紫外分光光度法
- 山東省青島市市北區(qū)2023-2024學年七年級下學期英語期末考試試題
- 現(xiàn)代風險導向審計在天衡會計師事務所的應用研究
- 拔牙技巧必成高手
評論
0/150
提交評論