單片機(jī)反應(yīng)速度器課設(shè)論文_第1頁(yè)
單片機(jī)反應(yīng)速度器課設(shè)論文_第2頁(yè)
單片機(jī)反應(yīng)速度器課設(shè)論文_第3頁(yè)
單片機(jī)反應(yīng)速度器課設(shè)論文_第4頁(yè)
單片機(jī)反應(yīng)速度器課設(shè)論文_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘 要設(shè)計(jì)的反應(yīng)速度測(cè)量器,主要由51單片機(jī)、數(shù)碼管和少量的獨(dú)立按鍵構(gòu)成,其中單片機(jī)是核心,數(shù)碼管作為顯示設(shè)備,獨(dú)立按鍵作為控制設(shè)備。當(dāng)測(cè)試鍵按下后,測(cè)試LED點(diǎn)亮,當(dāng)定時(shí)時(shí)間到后,測(cè)試LED熄滅,此時(shí)測(cè)試按鍵才可以松開,否則判斷犯規(guī),通過數(shù)碼管顯示測(cè)試結(jié)果。關(guān)鍵詞:?jiǎn)纹瑱C(jī);反應(yīng)速度;數(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. 設(shè)計(jì)要求22. 設(shè)計(jì)方案22.1 系統(tǒng)功能模塊22.2 方案Proteus初步仿真32.3 單片機(jī)最小系統(tǒng)72.4 驅(qū)動(dòng)電路72.4 顯示電路82.5 控制電路93. 程序流程圖104. 關(guān)鍵部分程序代碼124.1 功能選擇124.2 等待測(cè)試鍵按下124.3 等待LED熄滅134.4 LED熄滅,CPU開始計(jì)時(shí)145. PCB制作小結(jié)146. 總結(jié)15謝 辭16參考文獻(xiàn)17附錄1元器件清單18附錄2 原理圖19附錄3 PCB20附錄4 完整程序21桂林電子科技大學(xué)基礎(chǔ)工程設(shè)計(jì)論文引言隨著現(xiàn)代科技的發(fā)展,很多東西都走向了電子化,為了準(zhǔn)確和方便的測(cè)試人的反應(yīng)速度,人們也就發(fā)明出各種各樣的

4、反應(yīng)速度測(cè)試器,現(xiàn)在的測(cè)試器種類越來越多,技術(shù)越來越先進(jìn)。為了讓我們了解反應(yīng)速度測(cè)試器的基本原理,這次課程設(shè)計(jì)就要求做一個(gè)基于單片機(jī)的反應(yīng)速度測(cè)試器。通過實(shí)踐證明,單片機(jī)、數(shù)碼管、獨(dú)立按鍵等結(jié)合起來可以達(dá)到我們目的。1.設(shè)計(jì)要求(1)測(cè)試者按下按鈕,測(cè)試指示燈亮起,測(cè)試開始。(2)在測(cè)試過程中,測(cè)試者要集中注意力,一直觀察測(cè)試燈,當(dāng)看到燈滅時(shí),測(cè)試者要迅速放開按鈕,從測(cè)試燈滅到按鍵彈起的這一段時(shí)間,即為反應(yīng)時(shí)間,在4位LED數(shù)碼管上 用毫秒作為單位顯示結(jié)果。(3)若測(cè)試者在燈滅前放開按鈕,則系統(tǒng)自動(dòng)判定為犯規(guī),并顯示出錯(cuò)信息。(4)測(cè)試燈亮滅的時(shí)間長(zhǎng)短可設(shè)定及系統(tǒng)自動(dòng)產(chǎn)生。2.設(shè)計(jì)方案以單片機(jī)

5、作為核心,選擇數(shù)碼管作為輸出設(shè)備,獨(dú)立按鍵作為輸入設(shè)備。因?yàn)檫x擇的數(shù)碼管是共陰的。若直接使用單片機(jī)進(jìn)行驅(qū)動(dòng),則驅(qū)動(dòng)能力不夠,所以通過控制74LS373來對(duì)數(shù)碼管進(jìn)行驅(qū)動(dòng)。其中數(shù)碼管是通過動(dòng)態(tài)掃描顯示,雖然也可以選擇靜態(tài)顯示的方式,但是靜態(tài)顯示意味著額外的硬件開銷,而在能達(dá)到同樣的效果的前提下,首選開銷小的方案。四個(gè)獨(dú)立按鍵基本功能是功能鍵1、功能鍵2、確定和測(cè)試開始/結(jié)束。2.1系統(tǒng)功能模塊單片機(jī)最小系統(tǒng)顯示電路驅(qū)動(dòng)電路控制電路電源 圖2.1系統(tǒng)框圖2.2 方案Proteus初步仿真圖2.2初始化完成在Proteus的初步仿真中,單片機(jī)通過控制74LS373對(duì)數(shù)碼管進(jìn)行驅(qū)動(dòng)顯示,顯示執(zhí)行到各個(gè)

6、階段的提示,比如系統(tǒng)初始化完成提示為FFFF、選擇手動(dòng)設(shè)置熄滅LED的時(shí)間提示為A001等等,最后就是測(cè)試完成以后顯示測(cè)試結(jié)果。四個(gè)獨(dú)立按鍵分別為功能鍵1、功能鍵2、確定鍵和測(cè)試開始/結(jié)束鍵。如圖2.2所示,現(xiàn)在系統(tǒng)已經(jīng)初始化完畢。圖2.3選擇手動(dòng)設(shè)置時(shí)間系統(tǒng)開始運(yùn)行時(shí),需要選擇熄滅LED的時(shí)間間隔,有兩種選擇:一種是手動(dòng)設(shè)置;一種是系統(tǒng)隨機(jī)生成。選擇完后,系統(tǒng)根據(jù)測(cè)試者的選擇進(jìn)行設(shè)置熄滅LED時(shí)間間隔。之后等待測(cè)試者按下測(cè)試鍵,開始進(jìn)行測(cè)試。在LED熄滅之前,測(cè)試者提前松開測(cè)試鍵,數(shù)碼管輸出報(bào)錯(cuò)提示F000,測(cè)試結(jié)束。如圖2.3所示,現(xiàn)在選擇的是手動(dòng)設(shè)置LED熄滅時(shí)間,數(shù)碼管顯示提示代碼A0

7、01,設(shè)置為3秒后測(cè)試LED熄滅。圖2.4系統(tǒng)設(shè)置完成LED熄滅時(shí)間在測(cè)試者選定好LED熄滅時(shí)間后,如圖2.4所示,系統(tǒng)根據(jù)測(cè)試者設(shè)定的時(shí)間間隔進(jìn)行設(shè)置完成后,數(shù)碼管顯示提示代碼B000,表明系統(tǒng)已經(jīng)進(jìn)行設(shè)置完畢,可以開始進(jìn)行測(cè)試。只要測(cè)試者按下測(cè)試鍵后,測(cè)試立即開始。圖2.5等待LED熄滅如圖2.5所示,等待LED熄滅階段。測(cè)試者按下測(cè)試鍵以后,如果在LED熄滅之前不松開測(cè)試按鍵,則不會(huì)報(bào)錯(cuò),否則報(bào)錯(cuò)輸出提示代碼F000,本次測(cè)試失敗。圖2.6 CPU開始計(jì)時(shí)如圖2.6所示,此時(shí)LED已經(jīng)熄滅,CPU開始計(jì)時(shí),只要測(cè)試者松開按鍵,經(jīng)過單片機(jī)進(jìn)行數(shù)據(jù)處理,測(cè)試者的反應(yīng)速度通過數(shù)碼管進(jìn)行顯示。圖

8、2.7 顯示測(cè)試結(jié)果如圖2.7所示,當(dāng)測(cè)試LED熄滅后,測(cè)試者迅速松開測(cè)試鍵,數(shù)碼管顯示出測(cè)試者的反應(yīng)速度時(shí)間。若測(cè)試者需要繼續(xù)按照原先的設(shè)置再次進(jìn)行一次測(cè)試,先按下功能鍵1,再按確定鍵。若要重新進(jìn)行選擇LED熄滅時(shí)間設(shè)置,選擇功能鍵2,再按下確定鍵即可。通過Protues進(jìn)行初步的仿真,可知道這個(gè)方案是可行的,而在實(shí)際的制板和這個(gè)原理圖肯定是有差別的,但是大體上是一樣的。因?yàn)樵诜抡孳浖校糠衷牟淮嬖诓⒉挥绊憜纹瑱C(jī)的運(yùn)行,所以在仿真的原理圖中省略了一部分的元件。因?yàn)镻roteus是仿真的,處于理想條件下的設(shè)計(jì),所以在實(shí)際中還需要仔細(xì)的調(diào)試程序和板子才可以真正達(dá)到最初的設(shè)計(jì)目標(biāo)。所以根據(jù)這

9、個(gè)基本的仿真方案,進(jìn)行了符合實(shí)際的修改。2.3 單片機(jī)最小系統(tǒng)圖2.8 最小系統(tǒng)單片機(jī)的P0口作為數(shù)據(jù)IO口,P3.2P3.6分別控制KEY1KEY4。而P1.51.6和RST引腳用來配合燒錄器進(jìn)行下載程序進(jìn)單片機(jī)。圖2.8中的C4、C5電容起到穩(wěn)定振蕩頻率的作用。2.4 驅(qū)動(dòng)電路圖2.9 驅(qū)動(dòng)電路當(dāng)單片機(jī)通過74LS373進(jìn)行驅(qū)動(dòng)數(shù)碼管顯示的時(shí)候,因?yàn)镻0口是一個(gè)準(zhǔn)雙向的端口,它內(nèi)部沒有集成上拉電阻,因此它只能輸出低電平,而不能輸出高電平,繼而影響對(duì)數(shù)碼管的控制。因此如果想讓它輸出高電平的話,需要接上拉電阻。因此在P0口接到74LS373的數(shù)據(jù)口之間加上上拉電阻,使P0口可以正常的輸出高電平

10、。2.4 顯示電路圖2.10顯示電路驅(qū)動(dòng)芯片74LS373 的Q01Q08分別接到4位7段的數(shù)碼管的引腳18,作為數(shù)據(jù)輸入口。而數(shù)碼管的引腳912分別是決定數(shù)碼管的位選,單片機(jī)的P2.0P2.3進(jìn)行控制。數(shù)碼管的顯示采用動(dòng)態(tài)掃描進(jìn)行顯示,相比傳統(tǒng)的靜態(tài)顯示方式,更加節(jié)省資源和可靠。動(dòng)態(tài)數(shù)碼掃描顯示方式是利用了人眼的視覺暫留效應(yīng),把數(shù)碼管按一定順序進(jìn)行點(diǎn)亮,當(dāng)點(diǎn)亮的頻率(即掃描頻率)不大時(shí),我們看到的是數(shù)碼管一個(gè)個(gè)的點(diǎn)亮,然而,當(dāng)點(diǎn)亮頻率足夠大時(shí),我們看到的不再是一個(gè)一個(gè)的點(diǎn)亮,而是全部同時(shí)顯示(點(diǎn)亮),與傳統(tǒng)方式得到的視覺效果完全一樣。因此我們只要給數(shù)碼管這樣一個(gè)掃描頻率,那么就可以實(shí)現(xiàn)數(shù)碼管

11、同時(shí)點(diǎn)亮。2.5 控制電路圖2.11 控制電路在默認(rèn)情況下,單片機(jī)檢測(cè)到按鍵端口為高電平。當(dāng)按鍵被按下的時(shí)候,經(jīng)過軟件消抖后,檢測(cè)到端口變?yōu)榈碗娖?,即認(rèn)為按鍵被按下。四個(gè)按鍵的功能分別為功能鍵1、功能鍵2、確定鍵和測(cè)試開始/結(jié)束鍵。在系統(tǒng)初始化完畢時(shí),功能鍵1和功能鍵2分別表示手動(dòng)設(shè)置LED熄滅時(shí)間和系統(tǒng)隨機(jī)生成熄滅時(shí)間。而當(dāng)進(jìn)入手動(dòng)設(shè)置熄滅時(shí)間時(shí),此時(shí)功能鍵1和功能鍵2表示為設(shè)定秒和設(shè)定百毫秒。開始3.程序流程圖系統(tǒng)初始化Y是否使用系統(tǒng)隨機(jī)時(shí)間?N手動(dòng)設(shè)定時(shí)間間隔設(shè)定是否完成?NY設(shè)置熄滅LED時(shí)間N測(cè)試開始按鍵是否按下?Y定時(shí)時(shí)間是否到了?NYLED熄滅,CPU開始進(jìn)行計(jì)時(shí)測(cè)試開始按鍵是否

12、松開?NY顯示反應(yīng)時(shí)間是否重新設(shè)置測(cè)試間隔時(shí)間?NY圖3.1 程序流程圖因?yàn)閿?shù)碼管的顯示有限,所以通過顯示以下代碼作為各個(gè)運(yùn)行階段的提示初始化代碼 FFFF手動(dòng)設(shè)置定時(shí)熄滅LED時(shí)間 A001系統(tǒng)隨機(jī)定時(shí)熄滅LED時(shí)間 A002系統(tǒng)設(shè)定完成定時(shí)時(shí)間 B000在LED熄滅前松開測(cè)試鍵報(bào)錯(cuò) F000CPU計(jì)時(shí)超時(shí)FF004.關(guān)鍵部分程序代碼4.1功能選擇while(1)key = KeyScan();/默認(rèn)返回0Display();if(1 = key)Menu_Choice = 1;/選擇手動(dòng)設(shè)置時(shí)間提示代碼 'A001' Dis0 = 1;Dis1 = Dis2 = 0;Dis

13、3 = 10;else if(2 = key)Menu_Choice = 2;/系統(tǒng)隨機(jī)設(shè)置時(shí)間提示代碼 'A002'Dis0 = 2;Dis1 = Dis2 = 0;Dis3 = 10;else if(3 = key)/確定鍵結(jié)束選擇break;4.2等待測(cè)試鍵按下while(1)Display();if(0 = KEY_4) /等待測(cè)試鍵按下Dis_Pos = 0xff;/數(shù)碼管熄滅LED_0 = 0;/點(diǎn)亮測(cè)試燈TR0 = 1;/啟動(dòng)定時(shí)器0,開始計(jì)時(shí)break;/跳出,執(zhí)行下一階段 4.3 等待LED熄滅milsec_time= time_back; /恢復(fù)計(jì)時(shí)時(shí)間wh

14、ile(1)if(1 = TF0)-milsec_time;TF0 = 0;TH0 = 0xFC;TL0 = 0x18;if(milsec_time <= 0)LED_0 = 1;/定時(shí)時(shí)間到,熄滅LEDbreak;if(1 = KEY_4)/判斷是否松開測(cè)試按鍵Dis0 = Dis1 = Dis2 = 0;/設(shè)置錯(cuò)誤提示代碼 'F000'Dis3 = 14;Err = 1;break;4.4 LED熄滅,CPU開始計(jì)時(shí)Reflect_Time = 0;TR0 = 1;/啟動(dòng)定時(shí)器0,開始計(jì)時(shí)while(0 = KEY_4)if(1 = TF0)/ 1ms為計(jì)時(shí)單位TF0

15、 = 0;TH0 = 0xFC;TL0 = 0x18;+Reflect_Time;if(Reflect_Time >= 10000) /超出顯示9999最大時(shí)間,提示代碼'EE00' 表示超時(shí) ,結(jié)束本次測(cè)試Reflect_Time = 0;Time_Out = 1;break;5.PCB制作小結(jié)因?yàn)?位7段的數(shù)碼管和芯片74LS373引腳號(hào)都是交叉的,如果想要單面板走線而且不用跳線的情況下是很困難的,而與其選擇跳線,不如直接做雙面板更好,雖然雙面板的制作比單面板來得麻煩點(diǎn),但是比用跳線更加穩(wěn)定和美觀。此外,在板子腐蝕以后,先鉆孔,再用砂紙磨掉板子上的碳粉,最后涂上松香。

16、但是有一點(diǎn)需要注意的就是,涂的松香不能太薄,否則不能起到防氧化的作用,造成板子光澤顯得很暗淡。對(duì)數(shù)碼管進(jìn)行布局的時(shí)候注意引腳位置,仔細(xì)對(duì)照原理圖,否則很容易放反。最后,在制作雙面板的時(shí)候,最重要一步就是對(duì)孔,底層和頂層的轉(zhuǎn)印紙?jiān)趯?duì)孔時(shí)候一定盡可能的重合在一起,否則做出來的板子在鉆孔后是不能使用的。而在使用熨斗進(jìn)行轉(zhuǎn)印的時(shí)候,注意控制時(shí)間,時(shí)間太長(zhǎng)了會(huì)帶來腐蝕上的麻煩。6.總結(jié)因?yàn)轭A(yù)算有限,所以設(shè)計(jì)的方案使用的是數(shù)碼管作為顯示設(shè)備,但其先天不足之處是顯示不夠直觀,只能通過一些固定的提示代碼來說明當(dāng)前運(yùn)行情況。如果在預(yù)算允許的情況下,使用12864液晶作為顯示設(shè)備更加好,能夠使測(cè)試者使用起來更加容

17、易,顯示得更加直觀。在制版之前,先進(jìn)行Proteus仿真,在仿真中進(jìn)行代碼調(diào)試,仿真成功意味已經(jīng)成功了一半。其中需要注意的就是仿真中的延遲和實(shí)際運(yùn)行的延遲是有區(qū)別的,最好的方法就是使用定時(shí)器進(jìn)行延遲。在Proteus中進(jìn)行代碼調(diào)試的時(shí)候,為了方便觀察各個(gè)階段執(zhí)行的情況,分別設(shè)置不同的提示代碼,確認(rèn)執(zhí)行的情況是否如預(yù)期所想。每完成一個(gè)階段的設(shè)置,就在數(shù)碼管上顯示當(dāng)前階段的提示代碼,并且只有當(dāng)按下確定鍵后,才能執(zhí)行下一個(gè)階段設(shè)置。這樣有利于測(cè)試各個(gè)部分代碼的執(zhí)行情況,并且容易定位有問題的地方。雖然通過數(shù)碼管顯示提示代碼,可以具體知道執(zhí)行到那個(gè)階段,但是因?yàn)閿?shù)碼管能顯示的信息有限,所以就算有問題,能

18、了解問題的情況很有限,如果能更換12864液晶顯示,那就更加方便和直觀了。在對(duì)板子進(jìn)行第一次調(diào)試的時(shí)候,就發(fā)現(xiàn)了問題,數(shù)碼管無法進(jìn)行正常的顯示和控制,經(jīng)過檢查PCB和程序,發(fā)現(xiàn)沒有問題,排除了軟件和PCB線路方面的問題。那就剩下是否是元件插反的問題,最后發(fā)現(xiàn)是數(shù)碼管放反了,調(diào)整好數(shù)碼管之后,顯示方面的問題解決了。接下來就是軟件部分的調(diào)試,首先是檢查按鍵是否能正常控制系統(tǒng)的各種功能,這部分在仿真經(jīng)過仔細(xì)的調(diào)試,所以在實(shí)際板子中也沒有問題。再下來就是檢查各個(gè)功能能否正常運(yùn)行,在檢查到LED熄滅定時(shí)部分和CPU計(jì)時(shí)部分出現(xiàn)了問題。在LED熄滅定時(shí)部分,按照預(yù)先的設(shè)想,當(dāng)按下測(cè)試鍵以后,LED點(diǎn)亮,定

19、時(shí)時(shí)間到,LED熄滅??墒?,實(shí)際上是LED點(diǎn)亮后即使超過了定時(shí)時(shí)間,也不熄滅。經(jīng)過分析,問題是出在顯示函數(shù),因?yàn)槲蚁Mㄟ^數(shù)碼管來了解系統(tǒng)運(yùn)行到具體那個(gè)階段,所以在每個(gè)運(yùn)行階段都添加了顯示函數(shù),而顯示函數(shù)里面需要用到延遲,造成了定時(shí)時(shí)間出現(xiàn)錯(cuò)誤。當(dāng)我把這兩部分里面的顯示函數(shù)都刪掉以后,系統(tǒng)才運(yùn)行正常。改進(jìn)的方法是使用LCD1602或者12864液晶顯示,這樣就不必要像數(shù)碼管那樣需要?jiǎng)討B(tài)掃描,也就不會(huì)需要延遲函數(shù)的調(diào)用,繼而就不會(huì)造成定時(shí)上的誤差了。最后就是整理一下程序代碼,對(duì)關(guān)鍵部分代碼進(jìn)行詳細(xì)的注釋,刪掉一些測(cè)試部分的代碼,優(yōu)化程序,使程序運(yùn)行得更加快。在隨機(jī)設(shè)定LED熄滅時(shí)間里,隨機(jī)時(shí)間用

20、的是rand()函數(shù)和srand()函數(shù)配合使用生產(chǎn)隨機(jī)數(shù),srand()函數(shù)的隨機(jī)種子是根據(jù)上一次生成的隨機(jī)數(shù)為基礎(chǔ)的。還有一種方法就是系統(tǒng)運(yùn)行開始就啟動(dòng)一個(gè)定時(shí)器不斷的計(jì)數(shù),某一個(gè)時(shí)刻生成的隨機(jī)數(shù)種子以定時(shí)器里面的數(shù)值為基礎(chǔ)。最終,經(jīng)過硬件和軟件的調(diào)試,板子運(yùn)行正常,達(dá)到如期的設(shè)想。經(jīng)過本次經(jīng)歷,了解到了一個(gè)完整系統(tǒng)設(shè)計(jì)的步驟和方法。對(duì)于加深了對(duì)單片機(jī)的認(rèn)識(shí),加強(qiáng)了對(duì)單片機(jī)在應(yīng)用方面的能力,特別是硬件方面的。謝 辭參考文獻(xiàn)1 王選民.智能儀器原理及設(shè)計(jì)M.清華大學(xué)出版社,2010:7678.2 王守中.51單片機(jī)開發(fā)入門與典型實(shí)例M.人民郵電出版社,2008:4142, 6870.3 白駒

21、珩, 雷曉平.單片計(jì)算機(jī)及其應(yīng)用M.高等教育出版社, 電子科技大學(xué)出版社,2005:8692 .4 彭偉.基于8051+Proteus仿真M.電子工業(yè)出版社,2012:1321.附錄1元器件清單序 號(hào)名 稱數(shù) 量單 價(jià)備 注1單片機(jī)89C51及底座12圓孔插座*113四位共陰數(shù)碼管14電解電容10uf1574LS373芯片16排阻10K*817LED 5MM18按鍵6MM*6MM59電容30pF210電阻360歐111晶振12MHz112電阻10K113電阻100歐114ISP下載口1151617合計(jì)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; /隨機(jī)數(shù)種子/*IO引腳定義*/sbit LED_0 = P32; /測(cè)試燈sbit KEY_1 = P33;/秒設(shè)置 功能選擇1 手動(dòng)設(shè)置定時(shí)sbit KEY_2 = P34;/毫秒設(shè)置功能選擇2隨機(jī)設(shè)置定時(shí)sbit KEY_3 = P35;/確定鍵sbit KEY_4 = P36;/測(cè)試開始/返回鍵/*函數(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晶振為標(biāo)準(zhǔn)進(jìn)行定時(shí)1MS 定時(shí)器0 定時(shí)1 初始化 16位計(jì)數(shù)器 */*利用軟件TR0 TR1 進(jìn)行控制定時(shí)器啟動(dòng)*/*其中TR0用于計(jì)時(shí),TR1用于延時(shí)計(jì)時(shí) */ 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)/*進(jìn)行功能選擇 KEY1進(jìn)入手動(dòng)設(shè)定時(shí)間間隔, KEY2進(jìn)行系統(tǒng)隨機(jī)設(shè)定*/while(1)key = KeyScan();/默認(rèn)返回0Display();if(1 = key)Menu_Choice = 1;/選擇手動(dòng)設(shè)置時(shí)間提示代碼 'A001' Dis0 = 1;Dis1 = Dis2 = 0;Dis3 = 10;else if(2 = key)Menu_Choice = 2;/系統(tǒng)隨機(jī)設(shè)置時(shí)間

26、提示代碼 'A002'Dis0 = 2;Dis1 = Dis2 = 0;Dis3 = 10;else if(3 = key)/確定鍵結(jié)束選擇break;if(1 = Menu_Choice)/手動(dòng)設(shè)置Set_Time();else/隨機(jī)設(shè)置Rand_Time();time_back = milsec_time;/存儲(chǔ)定時(shí)時(shí)間/* 設(shè)定完成 提示代碼 'B000'*/Dis0 = Dis1 = Dis2 = 0;Dis3 = 11;/重新開始else/*原來的設(shè)置重新進(jìn)行測(cè)試 提示代碼 B000 */Dis0 = Dis1 = Dis2 = 0;Dis3 = 11

27、;/*等待測(cè)試開始*/while(1)Display();if(0 = KEY_4)Dis_Pos = 0xff;LED_0 = 0;/點(diǎn)亮測(cè)試燈TR0 = 1;/啟動(dòng)定時(shí)器0,開始計(jì)時(shí)break;milsec_time= time_back; /恢復(fù)計(jì)時(shí)時(shí)間while(1)if(1 = TF0)-milsec_time;TF0 = 0;TH0 = 0xFC;TL0 = 0x18;if(milsec_time <= 0)LED_0 = 1;/定時(shí)時(shí)間到,熄滅LEDbreak;if(1 = KEY_4)/判斷是否松開測(cè)試按鍵Dis0 = Dis1 = Dis2 = 0;Dis3 = 15;

28、Err = 1;break;/設(shè)置錯(cuò)誤提示代碼 'F000'TR0 = 0;/關(guān)閉定時(shí)器0TH0 = 0xFC;TL0 = 0x18;if(0 = Err)Reflect_Time = 0;TR0 = 1;/啟動(dòng)定時(shí)器0,開始計(jì)時(shí)while(KEY_4 = 0)if(1 = TF0)/ 1ms為計(jì)時(shí)單位TF0 = 0;TH0 = 0xFC;TL0 = 0x18;+Reflect_Time;if(Reflect_Time >= 10000) /超出顯示9999最大時(shí)間,提示代碼'FF00' 表示超時(shí) ,結(jié)束本次測(cè)試Reflect_Time = 0;Time_

29、Out = 1;break;/*測(cè)試結(jié)束 顯示測(cè)試結(jié)果 */TR0 = 0;/關(guān)閉定時(shí)器0 結(jié)束計(jì)時(shí)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/顯示超時(shí)錯(cuò)誤 'FF00'Dis1 = Dis0 = 0;Dis3 = Dis2 = 15;/*確定鍵 開始再一次

30、測(cè)試 以原來的設(shè)置 測(cè)試鍵 重新進(jìn)行設(shè)置 進(jìn)行測(cè)試*/while(1)Display();key = KeyScan();if(1 = key)/保持原來的設(shè)置進(jìn)行測(cè)試Err = 0;re_begin = 1;Dis0 = 1;Dis1 = Dis2 = 0;Dis3 = 12;else if(2 = key)/重新選擇設(shè)置進(jìn)行測(cè)試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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論