單片機課程設(shè)計報告多路搶答器的設(shè)計_第1頁
單片機課程設(shè)計報告多路搶答器的設(shè)計_第2頁
單片機課程設(shè)計報告多路搶答器的設(shè)計_第3頁
單片機課程設(shè)計報告多路搶答器的設(shè)計_第4頁
單片機課程設(shè)計報告多路搶答器的設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、單片機課程設(shè)計報告 題目: 多路搶答器的設(shè)計 專業(yè): 電氣工程及其自動化 班級: 電氣 081 學(xué)號: 學(xué)生姓名: 指導(dǎo)教師: 2010 年 秋季 學(xué)期起止時間:2010年12月27日至2011年1月7日平時(10%)任務(wù)完成(30%)答辯(30%)課設(shè)報告(30%)總評成績目 錄一、設(shè)計目的32、 設(shè)計的主要內(nèi)容要求3三、整體設(shè)計33.1設(shè)計思路3.2總體方框圖3.3模塊介紹四、硬件電路的設(shè)計54.1硬件總體電路圖4.2硬件分塊電路介紹五、軟件設(shè)計105.1主程序系統(tǒng)流程圖5.2系統(tǒng)程序5.3定時分析6、 系統(tǒng)仿真及使用說明247、 設(shè)計心得25八、致謝26 九、參考文獻(xiàn)26 多路搶答器的設(shè)

2、計一·設(shè)計目的1.熟悉單片機控制系統(tǒng),并了解系統(tǒng)設(shè)計的一般規(guī)律。2.掌握proteus軟件的使用,學(xué)會仿真。3.熟悉模擬用于娛樂或比賽搶答器的實現(xiàn)方法。二·設(shè)計的主要內(nèi)容和要求1·設(shè)計一款八路搶答器;2·設(shè)計一個搶答器控制開關(guān)(開始搶答后才允許答題者搶答),供主持人用;3·數(shù)碼管顯示當(dāng)前答題者號數(shù);4·答題開始后,數(shù)碼管顯示倒計時時間;5·附加功能:(1)搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在led數(shù)碼管上顯示,同時揚聲器發(fā)出報警聲響提示。選手搶答實行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)

3、清除為止。(2)搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如10秒)。當(dāng)主持人啟動"開始"鍵后,定時器進(jìn)行減計時,同時揚聲器發(fā)出短暫的聲響,聲響持續(xù)的時間0.5秒左右。主持人可以控制搶答的開始和結(jié)束,若主持人沒有按開始按鈕選手搶答,則會顯示犯規(guī)選手號,在時間顯示數(shù)碼管中顯示ff,并報警,直到主持人選擇停止。如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示f ff (3)參賽選手在設(shè)定的時間內(nèi)進(jìn)行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。(4)主持人可以調(diào)整搶答倒計時時間和答題倒

4、計時時間,以停止按鈕為確定。三·整體設(shè)計3·1 設(shè)計思路 設(shè)計一個智力競賽搶答器,可同時供8名選手或者8個代表隊參加比賽,他們的編號分別為1,2,3,4,5,6,7,8,各用一個搶答器按鈕,按鈕的編號與選手的編號相對應(yīng),分別設(shè)為1,2,3,4,5,6,7,8。節(jié)目主持人設(shè)置一個開始控制開關(guān),用來控制系統(tǒng)的清零和搶答器的開始。并且搶答器具有數(shù)據(jù)鎖存和顯示的功能,搶答開始手,若有選手按動搶答按鈕,編號立即鎖存,并在led數(shù)碼管上顯示出選手的編號,同時蜂鳴器給出音響提示,此外,要封鎖輸入電路,禁止其他選手搶答,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清零為止。主持人按控制開始,開

5、始搶答倒計時,在此期間選手可以搶答,搶答成功后開始答題倒計時,若在搶答倒計時期間無人搶答,則表示棄權(quán),此題作廢,主持人開始下一道題目。若在主持人沒有按下開始按鈕時有選手搶答,則顯示選手號,在時間顯示欄顯示ff,報警,表示該選手犯規(guī)。由主持人停止報警,開始下一題。搶答倒計時以及答題倒計時都可以由主持人控制和調(diào)節(jié),當(dāng)按下停止按鈕時,表示確定設(shè)置。3.2 總體方框圖 顯示 電路 外部復(fù) 位電路at89c51控制電路at主持人控制電路及發(fā)聲電路 搶答 電路3.3 模塊介紹 由于是軟件仿真的多路搶答器,故在原理上比較簡單。主要由外部復(fù)位控制電路,搶答電路,at89c51控制電路,顯示電路以及主持人控制電

6、路和報警電路五大模塊構(gòu)成。 由于系統(tǒng)內(nèi)部有時鐘控制,所以可以省去外部振蕩源電路,時鐘由內(nèi)部控制發(fā)生。 外部復(fù)位控制電路,可以手動操作,來從硬件上實現(xiàn)對整個電路的復(fù)位控制,實現(xiàn)系統(tǒng)的初始化。 通過搶答電路,八位選手可以進(jìn)行對題目的搶答,先搶答的選手獲得答題權(quán),此時其他選手沒有搶答權(quán)。 at89c51控制電路是整個電路的核心,它控制著整個電路的工作,內(nèi)部時鐘提供整個工作的時鐘,內(nèi)部定時器實現(xiàn)對搶答倒計時和答題倒計時的控制,通過管腳的選擇,選擇不同的功能來控制其他模塊電路的工作。 顯示電路用的是共陰極的多位數(shù)碼管,第一位用來顯示選手的號碼,后兩位來顯示倒計時時間的變化。主持人控制電路,可以通過手動來

7、控制搶答的開始及結(jié)束,還可以實現(xiàn)對搶答倒計時時間和答題倒計時時間的調(diào)整。當(dāng)發(fā)生錯誤或者搶答成功以及倒計時時間在五秒之內(nèi)的時候,報警電路會工作,發(fā)出蜂鳴聲。四· 硬件電路的設(shè)計4.1 硬件總體電路圖 在整個電路中,用到了以下元器件:開關(guān)按鈕button:15個:電阻10k:8個;四位共陰極數(shù)碼顯示管:1個;揚聲器sreaker:1個;at89c51單片機:1個。 其工作原理為:接通電源后,主持人將開關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號顯示器滅燈,定時器顯示設(shè)定時間;主持人將開關(guān)置,“開始”狀態(tài),宣布“開始”搶答器工作,倒計時開始。揚聲器給出聲響提示。搶答器完成:優(yōu)先判斷、編號鎖

8、存、編號顯示、揚聲器提示。當(dāng)一輪搶答之后,定時器停止、禁止二次搶答。如果再次搶答必須由主持人再次操作“開始、停止”狀態(tài)開關(guān)。若有選手在主持人沒有按下開始按鈕時進(jìn)行了搶答,則會出現(xiàn)犯規(guī)提示。而且主持可以靈活調(diào)節(jié)搶答倒計時時間和答題倒計時時間。 4.2 硬件分塊電路介紹4.2.1 復(fù)位電路 單片機的第9腳rst為硬件復(fù)位端,只要將該端持續(xù)4個機器周期的高電平即可實現(xiàn)復(fù)位,復(fù)位后單片機的各狀態(tài)都恢復(fù)到初始化狀態(tài),其電路圖如圖 值得注意的是,在設(shè)計當(dāng)中使用到了硬件復(fù)位和軟件復(fù)位兩種功能,由上面的硬件復(fù)位后的各狀態(tài)可知寄存器及存儲器的值都恢復(fù)到了初始值,而前面的功能介紹中提到了倒計時時間的記憶功能,該功

9、能的實現(xiàn)的前提條件就是不能對單片機進(jìn)行硬件復(fù)位,所以設(shè)定了軟復(fù)位功能。軟復(fù)位實際上就是當(dāng)程序執(zhí)行完畢之后,將程序指針通過一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到程序執(zhí)行的起始地址。4.2.2 顯示電路顯示功能與硬件關(guān)系極大,當(dāng)硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來解決。 復(fù)位時,數(shù)碼管顯示f ff,數(shù)碼管的第一位顯示的是搶答選手的號數(shù),數(shù)碼管的最后兩位顯示的是倒計時的時間。當(dāng)出現(xiàn)犯規(guī)操作的時候,數(shù)碼管閃爍。4.2.3 鍵盤掃描電路鍵盤掃描電路主要有八個按鈕來實現(xiàn),每一個按鈕對應(yīng)著相應(yīng)的選手,號碼對應(yīng)。選手按下按鈕,實現(xiàn)搶答。鍵盤掃描電路可以實現(xiàn)優(yōu)先搶答和鎖存,鎖存第一個按下?lián)?/p>

10、答按鈕的選手號,這樣,其他選手在有選手搶答成功的情況下沒有搶答權(quán)利。鍵盤是人與微機系統(tǒng)打交道的主要設(shè)備。關(guān)于鍵盤硬件電路的設(shè)計方法也可以在文獻(xiàn)和書籍中找到,配合各種不同的硬件電路,這些書籍中一般也提供了相應(yīng)的鍵盤掃描程序。站在系統(tǒng)監(jiān)控軟件設(shè)計的立場上來看,僅僅完成鍵盤掃描,讀取當(dāng)前時刻的鍵盤狀態(tài)是不夠的,還有不少問題需要妥善解決,否則,人們在操作鍵盤就容易引起誤操作和操作失控現(xiàn)象。 在單片機應(yīng)用中鍵盤用得最多的形式是獨立鍵盤及矩陣鍵盤。它們各有自己的特點,其中獨立鍵盤硬件電路簡單,而且在程序設(shè)計上也不復(fù)雜,一般用在對硬件電路要求不高的簡單電路中;矩陣鍵盤與獨立鍵盤有很大區(qū)別,首先在硬件電路上它

11、要比獨立鍵盤復(fù)雜得多,而且在程序算法上比它要煩瑣,但它在節(jié)省端口資源上有優(yōu)勢得多,因此它更適合于多按鍵電路。其次就是消除在按鍵過程中產(chǎn)生的“毛刺”現(xiàn)象。4.2.4 發(fā)聲電路我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào),使喇叭發(fā)出不同的聲音。發(fā)聲電路在搶答成功的時候,選手非法搶答的時候,倒計時時間在五秒之內(nèi)的時候,都會發(fā)出聲音來提示主持人和選手。 4.2.5 系統(tǒng)復(fù)位使cpu進(jìn)入初始狀態(tài),從000

12、0h地址開始執(zhí)行程序的過程叫系統(tǒng)復(fù)位。從實現(xiàn)系統(tǒng)復(fù)位的方法來看,系統(tǒng)復(fù)位可分為硬件復(fù)位和軟件復(fù)位。硬件復(fù)位必須通過cpu外部的硬件電路給cpu的reset端加上足夠時間的高電位才能實現(xiàn)。上電復(fù)位,人工按鈕復(fù)位和硬件看門狗復(fù)位均為硬件復(fù)位。硬件復(fù)位后,各專用寄存器的狀態(tài)均被初始化,且對片內(nèi)通用寄存器的內(nèi)容沒有影響。但是,硬件復(fù)位還能自動清除中斷激活標(biāo)志,使中斷系統(tǒng)能夠正常工作,這樣一個事實卻容易為不少編碼人員所忽視。軟件復(fù)位就是用一系列指令來模擬硬件復(fù)位功能,最后通過轉(zhuǎn)移指令使程序從0000h地址開始執(zhí)行。對各專用寄存器的復(fù)位操作是容易的,也沒有必要完全模擬,可根據(jù)實際需要去主程序初始化過程中完

13、成。而對中斷激活標(biāo)志的清除工作常被遺忘,因為它沒有明確的位地址可供編程。有的編程人員用020000(ljmp 0000h)作為軟件陷阱,認(rèn)為直接轉(zhuǎn)向0000h地址就完成了軟件復(fù)位,就是這類錯誤的典型代表。軟件復(fù)位是使用軟件陷阱和軟件看門狗后必須進(jìn)行的工作,這時程序出錯完全有可能發(fā)生在中斷子程序中,中斷激活標(biāo)志已置位,它將阻止同級中斷響應(yīng)。由于軟件看門是高級中斷,它將阻止說要中斷響應(yīng),由此可見清除中斷激活標(biāo)志的重要性。在所有的指令中,只有reti指令能夠清除中斷激活標(biāo)志。前文各處提案到的出錯處理程序err主要完成這一功能,其他的善后工作交由復(fù)位后的系統(tǒng)去完成。這部分程序如下: power dat

14、a 67h ;上電標(biāo)志存放單元 err: clr ea ;關(guān)中斷 mov dptr,#err1 ;準(zhǔn)備返回地址 push dpl push dph reti ;清除高級中斷激活標(biāo)志err1: mov power,#0aah ;重建上電標(biāo)志 clr a ;準(zhǔn)備復(fù)位地址 push acc ;壓入復(fù)位地址0000h reti ;清除低級中斷激活標(biāo)志,從程序0000h開始執(zhí)行。這段程序先關(guān)中斷,以便后續(xù)處理能順利進(jìn)行,然后用兩個reti指令代替兩個ljmp指令,從而清除了兩級中斷激活標(biāo)志。有相應(yīng)軟件陷阱捕捉來的程序可能沒有全部激活兩個標(biāo)志,這也無妨。五·軟件設(shè)計5.1 主程序系統(tǒng)流程圖 開始

15、 初始化 顯示fff開始n y加一搶答成功非法搶答調(diào)節(jié)搶答倒計時 y n顯示搶答顯示犯規(guī)調(diào)節(jié)答題倒計時 減一n y n5.2 系統(tǒng)程序;=;=單片機八路搶答器程序 =;= ok equ 20h ;搶答開始標(biāo)志位 ring equ 22h ;響鈴標(biāo)志位 org 0000h ajmp main org 0003h ajmp int0sub org 000bh ajmp t0int org 0013h ajmp int1sub org 001bh ajmp t1int org 0040hmain: mov r1,#0ah ;初設(shè)搶答時間為10s mov r2,#1eh ;初設(shè)答題時間為30s mov

16、 tmod,#11h ;設(shè)置未定時器/模式1 mov th0,#0f0h mov tl0,#0ffh ;越高發(fā)聲頻率越高,越尖;0.3841s mov th1,#3ch mov tl1,#0b0h ;50ms為一次溢出中斷 setb ea ;cpu中斷允許 setb et0 ;t0中斷允許 setb et1 setb ex0 ;外部中斷允許 setb ex1 ;允許四個中斷,t0/t1/int0/int1 clr ok clr ring setb tr1 setb tr0 ;一開始就運行定時器,以開始顯示fff.如果想重新計數(shù),重置th1/tl1就可以了;=查詢程序=start: mov r5

17、,#0bh mov r4,#0bh mov r3,#0bh acall display ;未開始搶答時候顯示fff jb p3.0,next ;p3.0=1時跳轉(zhuǎn) acall delay jb p3.0,next ;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢 acall bark ;按鍵發(fā)聲 mov a,r1 mov r6,a ;送r1->r6,因為r1中保存了搶答時間 setb ok ;搶答標(biāo)志位,用于count只程序中判斷是否查詢搶答 mov r7,#01h ;讀搶答鍵數(shù)據(jù)信號標(biāo)志,這里表示只讀一次有用信號 mov r3,#0ah ;搶答只顯示計時

18、,滅號數(shù) ajmp count ;進(jìn)入倒計時程序,"查詢有效搶答的程序"在count里面next: jnb p1.0,false1 jnb p1.1,false2 jnb p1.2,false3 jnb p1.3,false4 jnb p1.4,false5 jnb p1.5,false6 jnb p1.6,false7 jnb p1.7,false8 ajmp start ;絕對轉(zhuǎn)移;=非法搶答處理程序=false1: mov r3,#01h ajmp errorfalse2: mov r3,#02h ajmp errorfalse3: mov r3,#03h ajmp

19、errorfalse4: mov r3,#04h ajmp errorfalse5: mov r3,#05h ajmp errorfalse6: mov r3,#06h ajmp errorfalse7: mov r3,#07h ajmp errorfalse8: mov r3,#08h ajmp error;=int0(搶答時間r1調(diào)整程序)=int0sub:mov a,r1 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display ;先在兩個時間led上顯示r1 jnb p3.4,inc0 ;p3.4為+1s鍵,如按下跳到i

20、nco jnb p3.5,dec0 ;p3.5為-1s鍵,如按下跳到deco jnb p3.1,back0 ;p3.1為確定鍵,如按下跳到backo ajmp int0subinc0: mov a,r1 cjne a,#63h,add0 ;如果不是99,r2加1,如果加到99,r1就置0,重新加起。 mov r1,#00h acall delay1 ajmp int0subadd0: inc r1 acall delay1 ajmp int0subdec0: mov a,r1 jz setr1 ;如果r1為0, r1就置99, dec r1 acall delay1 ajmp int0subs

21、etr1: mov r1,#63h acall delay1 ajmp int0subback0: reti ;=int1(回答時間r2調(diào)整程序)=int1sub:mov a,r2 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display jnb p3.4,inc1 jnb p3.5,dec1 jnb p3.1,back1 ajmp int1subinc1: mov a,r2 cjne a,#63h,add1 mov r2,#00h acall delay1 ajmp int1subadd1: inc r2 acall dela

22、y1 ajmp int1subdec1: mov a,r2 jz setr2 dec r2 acall delay1 ajmp int1subsetr2: mov r2,#63h acall delay1 ajmp int1subback1: reti ;=倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=repeat: mov a,r2 ;使用錦囊時重新計時 mov r6,a clr ring count: mov r0,#00h ;重置定時器中斷次數(shù) mov th1,#3ch mov tl1,#0b0h ;重置定時器recount:mov a,r6 ;r6保存了倒計時的時間,之前先將搶答時

23、間或回答時間給r6 mov b,#0ah div ab ;除十分出個位/十位 mov 30h,a ;十位存于(30h) mov 31h,b ;個位存于(31h) mov r5,30h ;取十位 mov r4,31h ;取個位 mov a,r6 subb a,#07h ; jnc larger ;c=0跳轉(zhuǎn),大于5s跳到larger,小于等于5s會提醒 mov a,r0 cjne a,#0ah,full ;1s中0.5s向下運行 clr ring ajmp checkfull: cjne a,#14h,check ;下面是1s的情況,響并顯示號數(shù)并清r0,重新計 setb ring mov a,

24、r6 jz quit ;計時完畢 mov r0,#00h dec r6 ;一秒標(biāo)志減1 ajmp checklarger: mov a,r0 cjne a,#14h,check ;如果1s向下運行,否者跳到查"停/顯示" dec r6 ;計時一秒r6自動減1 mov r0,#00hcheck: jnb p3.1,quit ;如按下停止鍵退出 jnb ok,checkk ;只在回答倒計時才有效 ajmp nexttcheckk: jnb p3.0,repeat ;判斷是否使用錦囊nextt: acall display jb ok,accout ;如果是搶答倒計時,如是則查詢

25、搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用) ajmp recountaccout: mov a,36h jnb acc.0,true1 jnb acc.1,true2 jnb acc.2,true3 jnb acc.3,true4 jnb acc.4,true5 jnb acc.5,true6 jnb acc.6,tz1 jnb acc.7,tz2 ajmp recount tz1: jmp true7 tz2: jmp true8 quit: clr ok ;如果按下了"停止鍵"執(zhí)行的程序 clr ring ajmp start;=正常搶答處理程序=true1: a

26、call bark mov a,r2 mov r6,a ;搶答時間r2送r6 mov r3,#01h clr ok ;因為答題的計時不再查詢搶答,所以就鎖了搶答 ajmp counttrue2: acall bark mov a,r2 mov r6,a mov r3,#02h clr ok ajmp counttrue3: acall bark mov a,r2 mov r6,a mov r3,#03h clr ok ajmp counttrue4: acall bark mov a,r2 mov r6,a mov r3,#04h clr ok ajmp counttrue5: acall b

27、ark mov a,r2 mov r6,a mov r3,#05h clr ok ajmp counttrue6: acall bark mov a,r2 mov r6,a mov r3,#06h clr ok ajmp counttrue7: acall bark mov a,r2 mov r6,a mov r3,#07h clr ok ajmp counttrue8: acall bark mov a,r2 mov r6,a mov r3,#08h clr ok ajmp count;=犯規(guī)搶答程序=error: mov r0,#00h mov th1,#3ch mov tl1,#0b0h

28、 mov 34h,r3 ;犯規(guī)號數(shù)暫存與(34h)here: mov a,r0 cjne a,#06h,flash ;累加器內(nèi)容和立即數(shù)不等時跳轉(zhuǎn),0.5s向下運行->滅并停響 clr ring mov r3,#0ah mov r4,#0ah mov r5,#0ah ;三燈全滅 ajmp check1flash: cjne a,#0ch,check1 ;下面是0.8s的情況,響并顯示號數(shù)并清r0,重新計 setb ring ;報警 mov r0,#00h mov r3,34h ;取回號數(shù) mov r5,#0bh mov r4,#0bh ;顯示ff和號數(shù) ajmp check1check1

29、: jnb p3.1,quit1 ;停止未按下時跳轉(zhuǎn) acall display ajmp herequit1: clr ring clr ok ajmp start;=顯示程序=display:mov dptr,#dat1 ;查表顯示程序,利用p0口做段選碼口輸出/p2低三位做位選碼輸出, mov a,r3 movc a,a+dptr mov p2,#0feh mov p0,a acall delay2 mov dptr,#dat2 mov a,r5 movc a,a+dptr mov p2,#0fdh mov p0,a acall delay2 mov a,r4 movc a,a+dptr

30、 mov p2,#0fbh mov p0,a acall delay2 retdat1: db 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00h,71h ;"滅","1","2","3","4","5","6","7","8","9","滅","f"dat2: db 3fh,06h,5bh,4fh,66h,6dh,7dh

31、,07h,7fh,6fh,00h,71h ;第一個為零,其他與上相同,因為十位如果為零顯示熄滅;=加減時間延時(起到不會按下就加n個數(shù))=delay1: mov 35h,#08hloop0: acall display djnz 35h,loop0 ret;=延時4236個機器周期(去抖動用到)=delay: mov 32h,#12hloop: mov 33h,#0afhloop1: djnz 33h,loop1 djnz 32h,loop ret;=延時4236個機器周期(顯示用到)=delay2: mov 32h,#43h ;67loop3: mov 33h,#1eh ;30 mov a,

32、r7 ;每隔6070個機器周期讀一次p1口,全為1時為無效數(shù)據(jù),繼續(xù)讀,有一個不為1時,轉(zhuǎn)到正常搶答處理 jnz aaaa1 ;沒讀到有效數(shù)據(jù)時繼續(xù)轉(zhuǎn)到aaaa1loop2: djnz 33h,loop2 djnz 32h,loop3 ret;=讀搶答按鍵數(shù)據(jù)口程序=;由于在讀搶答數(shù)據(jù)口的時候,單片機首先進(jìn)入倒計時程序,再調(diào)用顯示程序,最后才檢測按鍵口;然而在檢測按鍵口時動態(tài)掃描要調(diào)用三次(4ms)延時程序.這樣就會導(dǎo)致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號優(yōu)先最高.8號最低.;故采用在延時子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性aaaa1: mov a,p1 cjne a,#0ffh,aa1 ;當(dāng)

33、不全為1時的數(shù)據(jù)為有效數(shù)據(jù)aa0: mov 36h,a ;將有效數(shù)據(jù)送到36h暫存 ajmp loop2aa1: dec r7 ajmp aa0 ;=發(fā)聲程序=bark: setb ring acall delay1 acall delay1 clr ring ;按鍵發(fā)聲 ret;=to溢出中斷(響鈴程序)=t0int: mov th0,#0ech mov tl0,#0ffh jnb ring,out; cpl p3.6 ;ring標(biāo)志位為1時候p3.6口不短取反使喇叭發(fā)出一定頻率的聲音out: reti;=t1溢出中斷(計時程序)=t1int: mov th1,#3ch mov tl1,#0

34、b0h inc r0 retiend5.3. 定時分析主持人按下“開始”按鈕后10 秒內(nèi),若無人搶答,單片機會控制讓顯示器顯示fff,主持人可按下“開始”按鈕進(jìn)行下一題的搶答。為了實現(xiàn)這個10 秒的時間限制,當(dāng)主持人按下“開始”按鈕后應(yīng)進(jìn)行10秒定時。由于定時間隔太長,可使定時器t0工作在方式一,得到50 ms的定時間隔,再進(jìn)行軟件計數(shù)200次,便可實現(xiàn)10秒的定時。若單片機晶振頻率為12 mhz,則機器周期為1us,則要實現(xiàn)50ms的定時,定時器t0在50 ms內(nèi)需要計數(shù)n次:n=50ms/1us=50 000次定時器t0工作在方式一 下的計數(shù)初值x為:x=最大計數(shù)值m-計數(shù)次數(shù)n=6553

35、6-50000=15536=3cb0h即向th0寫入計數(shù)初值3ch,向tl0寫入計數(shù)初值0b0h。方式寄存器tmod初始化,tmod=00000001b=01h,to為方式一定時。用于設(shè)置t1用于設(shè)置t0gatec/tm1m0gatec/tm1m0000 1000 1 tcon初始化:tr0=1,啟動t0。tf1tr1tf0tr0ie1it1ie1ie001010000ie初始化:開放中斷ea=1,中斷et0=1,允許定時器t0中斷。ea-et2eset1exet0ex010001111六·系統(tǒng)仿真及使用說明1、 具有清零裝置和搶答控制,可由主持人操縱避免有人在主持人說“開始”前提前

36、搶答違反規(guī)則,若有選手在未開始之前搶答,會出現(xiàn)犯規(guī)警告。2、 具有定時功能,在10秒內(nèi)無人搶答表示所有參賽選手獲參賽隊對本題棄權(quán),由主持人開始下一題。選手回答題目的時間也有限制,選手答題時間為30秒。搶答時間和答題時間剩下5秒的時候,都會出現(xiàn)蜂鳴提示。3、10秒時仍無人搶答其報警電路工作表示搶答時間耗盡并禁止搶答。4、如果想調(diào)節(jié)搶答時間或答題時間,按"搶答時間調(diào)節(jié)"鍵或"答題時間調(diào)節(jié)" 鍵進(jìn)入調(diào)節(jié)狀態(tài),此時會顯示現(xiàn)在設(shè)定的搶答時間或回答時間值,如想加一秒按一下"加1s"鍵,如果想減一秒按一下"-1s"鍵,時間數(shù)碼管

37、上會顯示改變后的時間,調(diào)整范圍為0s99s, 0s時再減1s會跳到99,99s時再加1s會變到0s。 5、主持人按"搶答開始"鍵,會有提示音,并立刻進(jìn)入搶答倒計時(預(yù)設(shè)10s搶答時間),如有選手搶答,會有提示音,并會顯示其號數(shù)并立刻進(jìn)入回答倒計時(預(yù)設(shè)30s搶答時間),不進(jìn)行搶答查詢,所以只有第一個按搶答的選手有效。倒數(shù)時間到小于5s會每秒響一下提示音。 6、如倒計時期間,主持人想停止倒計時可以隨時按"停止"按鍵,系統(tǒng)會自動進(jìn)入準(zhǔn)備狀態(tài),等待主持人按"搶答開始"進(jìn)入下次搶答計時。 7、如果主持人未按"搶答開始"鍵,而有人

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論