




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、單片機(jī)課程設(shè)計(jì)報(bào)告 題目: 多路搶答器的設(shè)計(jì) 專業(yè): 電氣工程及其自動(dòng)化 班級(jí): 電氣 081 學(xué)號(hào): 學(xué)生姓名: 指導(dǎo)教師: 2010 年 秋季 學(xué)期起止時(shí)間:2010年12月27日至2011年1月7日平時(shí)(10%)任務(wù)完成(30%)答辯(30%)課設(shè)報(bào)告(30%)總評(píng)成績(jī)目 錄一、設(shè)計(jì)目的32、 設(shè)計(jì)的主要內(nèi)容要求3三、整體設(shè)計(jì)33.1設(shè)計(jì)思路3.2總體方框圖3.3模塊介紹四、硬件電路的設(shè)計(jì)54.1硬件總體電路圖4.2硬件分塊電路介紹五、軟件設(shè)計(jì)105.1主程序系統(tǒng)流程圖5.2系統(tǒng)程序5.3定時(shí)分析6、 系統(tǒng)仿真及使用說(shuō)明247、 設(shè)計(jì)心得25八、致謝26 九、參考文獻(xiàn)26 多路搶答器的設(shè)
2、計(jì)一·設(shè)計(jì)目的1.熟悉單片機(jī)控制系統(tǒng),并了解系統(tǒng)設(shè)計(jì)的一般規(guī)律。2.掌握proteus軟件的使用,學(xué)會(huì)仿真。3.熟悉模擬用于娛樂(lè)或比賽搶答器的實(shí)現(xiàn)方法。二·設(shè)計(jì)的主要內(nèi)容和要求1·設(shè)計(jì)一款八路搶答器;2·設(shè)計(jì)一個(gè)搶答器控制開(kāi)關(guān)(開(kāi)始搶答后才允許答題者搶答),供主持人用;3·數(shù)碼管顯示當(dāng)前答題者號(hào)數(shù);4·答題開(kāi)始后,數(shù)碼管顯示倒計(jì)時(shí)時(shí)間;5·附加功能:(1)搶答器具有鎖存與顯示功能。即選手按動(dòng)按鈕,鎖存相應(yīng)的編號(hào),并在led數(shù)碼管上顯示,同時(shí)揚(yáng)聲器發(fā)出報(bào)警聲響提示。選手搶答實(shí)行優(yōu)先鎖存,優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)
3、清除為止。(2)搶答器具有定時(shí)搶答功能,且一次搶答的時(shí)間由主持人設(shè)定(如10秒)。當(dāng)主持人啟動(dòng)"開(kāi)始"鍵后,定時(shí)器進(jìn)行減計(jì)時(shí),同時(shí)揚(yáng)聲器發(fā)出短暫的聲響,聲響持續(xù)的時(shí)間0.5秒左右。主持人可以控制搶答的開(kāi)始和結(jié)束,若主持人沒(méi)有按開(kāi)始按鈕選手搶答,則會(huì)顯示犯規(guī)選手號(hào),在時(shí)間顯示數(shù)碼管中顯示ff,并報(bào)警,直到主持人選擇停止。如果定時(shí)時(shí)間已到,無(wú)人搶答,本次搶答無(wú)效,系統(tǒng)報(bào)警并禁止搶答,定時(shí)顯示器上顯示f ff (3)參賽選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器上顯示選手的編號(hào)和搶答的時(shí)間,并保持到主持人將系統(tǒng)清除為止。(4)主持人可以調(diào)整搶答倒計(jì)時(shí)時(shí)間和答題倒
4、計(jì)時(shí)時(shí)間,以停止按鈕為確定。三·整體設(shè)計(jì)3·1 設(shè)計(jì)思路 設(shè)計(jì)一個(gè)智力競(jìng)賽搶答器,可同時(shí)供8名選手或者8個(gè)代表隊(duì)參加比賽,他們的編號(hào)分別為1,2,3,4,5,6,7,8,各用一個(gè)搶答器按鈕,按鈕的編號(hào)與選手的編號(hào)相對(duì)應(yīng),分別設(shè)為1,2,3,4,5,6,7,8。節(jié)目主持人設(shè)置一個(gè)開(kāi)始控制開(kāi)關(guān),用來(lái)控制系統(tǒng)的清零和搶答器的開(kāi)始。并且搶答器具有數(shù)據(jù)鎖存和顯示的功能,搶答開(kāi)始手,若有選手按動(dòng)搶答按鈕,編號(hào)立即鎖存,并在led數(shù)碼管上顯示出選手的編號(hào),同時(shí)蜂鳴器給出音響提示,此外,要封鎖輸入電路,禁止其他選手搶答,優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清零為止。主持人按控制開(kāi)始,開(kāi)
5、始搶答倒計(jì)時(shí),在此期間選手可以搶答,搶答成功后開(kāi)始答題倒計(jì)時(shí),若在搶答倒計(jì)時(shí)期間無(wú)人搶答,則表示棄權(quán),此題作廢,主持人開(kāi)始下一道題目。若在主持人沒(méi)有按下開(kāi)始按鈕時(shí)有選手搶答,則顯示選手號(hào),在時(shí)間顯示欄顯示ff,報(bào)警,表示該選手犯規(guī)。由主持人停止報(bào)警,開(kāi)始下一題。搶答倒計(jì)時(shí)以及答題倒計(jì)時(shí)都可以由主持人控制和調(diào)節(jié),當(dāng)按下停止按鈕時(shí),表示確定設(shè)置。3.2 總體方框圖 顯示 電路 外部復(fù) 位電路at89c51控制電路at主持人控制電路及發(fā)聲電路 搶答 電路3.3 模塊介紹 由于是軟件仿真的多路搶答器,故在原理上比較簡(jiǎn)單。主要由外部復(fù)位控制電路,搶答電路,at89c51控制電路,顯示電路以及主持人控制電
6、路和報(bào)警電路五大模塊構(gòu)成。 由于系統(tǒng)內(nèi)部有時(shí)鐘控制,所以可以省去外部振蕩源電路,時(shí)鐘由內(nèi)部控制發(fā)生。 外部復(fù)位控制電路,可以手動(dòng)操作,來(lái)從硬件上實(shí)現(xiàn)對(duì)整個(gè)電路的復(fù)位控制,實(shí)現(xiàn)系統(tǒng)的初始化。 通過(guò)搶答電路,八位選手可以進(jìn)行對(duì)題目的搶答,先搶答的選手獲得答題權(quán),此時(shí)其他選手沒(méi)有搶答權(quán)。 at89c51控制電路是整個(gè)電路的核心,它控制著整個(gè)電路的工作,內(nèi)部時(shí)鐘提供整個(gè)工作的時(shí)鐘,內(nèi)部定時(shí)器實(shí)現(xiàn)對(duì)搶答倒計(jì)時(shí)和答題倒計(jì)時(shí)的控制,通過(guò)管腳的選擇,選擇不同的功能來(lái)控制其他模塊電路的工作。 顯示電路用的是共陰極的多位數(shù)碼管,第一位用來(lái)顯示選手的號(hào)碼,后兩位來(lái)顯示倒計(jì)時(shí)時(shí)間的變化。主持人控制電路,可以通過(guò)手動(dòng)來(lái)
7、控制搶答的開(kāi)始及結(jié)束,還可以實(shí)現(xiàn)對(duì)搶答倒計(jì)時(shí)時(shí)間和答題倒計(jì)時(shí)時(shí)間的調(diào)整。當(dāng)發(fā)生錯(cuò)誤或者搶答成功以及倒計(jì)時(shí)時(shí)間在五秒之內(nèi)的時(shí)候,報(bào)警電路會(huì)工作,發(fā)出蜂鳴聲。四· 硬件電路的設(shè)計(jì)4.1 硬件總體電路圖 在整個(gè)電路中,用到了以下元器件:開(kāi)關(guān)按鈕button:15個(gè):電阻10k:8個(gè);四位共陰極數(shù)碼顯示管:1個(gè);揚(yáng)聲器sreaker:1個(gè);at89c51單片機(jī):1個(gè)。 其工作原理為:接通電源后,主持人將開(kāi)關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號(hào)顯示器滅燈,定時(shí)器顯示設(shè)定時(shí)間;主持人將開(kāi)關(guān)置,“開(kāi)始”狀態(tài),宣布“開(kāi)始”搶答器工作,倒計(jì)時(shí)開(kāi)始。揚(yáng)聲器給出聲響提示。搶答器完成:優(yōu)先判斷、編號(hào)鎖
8、存、編號(hào)顯示、揚(yáng)聲器提示。當(dāng)一輪搶答之后,定時(shí)器停止、禁止二次搶答。如果再次搶答必須由主持人再次操作“開(kāi)始、停止”狀態(tài)開(kāi)關(guān)。若有選手在主持人沒(méi)有按下開(kāi)始按鈕時(shí)進(jìn)行了搶答,則會(huì)出現(xiàn)犯規(guī)提示。而且主持可以靈活調(diào)節(jié)搶答倒計(jì)時(shí)時(shí)間和答題倒計(jì)時(shí)時(shí)間。 4.2 硬件分塊電路介紹4.2.1 復(fù)位電路 單片機(jī)的第9腳rst為硬件復(fù)位端,只要將該端持續(xù)4個(gè)機(jī)器周期的高電平即可實(shí)現(xiàn)復(fù)位,復(fù)位后單片機(jī)的各狀態(tài)都恢復(fù)到初始化狀態(tài),其電路圖如圖 值得注意的是,在設(shè)計(jì)當(dāng)中使用到了硬件復(fù)位和軟件復(fù)位兩種功能,由上面的硬件復(fù)位后的各狀態(tài)可知寄存器及存儲(chǔ)器的值都恢復(fù)到了初始值,而前面的功能介紹中提到了倒計(jì)時(shí)時(shí)間的記憶功能,該功
9、能的實(shí)現(xiàn)的前提條件就是不能對(duì)單片機(jī)進(jìn)行硬件復(fù)位,所以設(shè)定了軟復(fù)位功能。軟復(fù)位實(shí)際上就是當(dāng)程序執(zhí)行完畢之后,將程序指針通過(guò)一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到程序執(zhí)行的起始地址。4.2.2 顯示電路顯示功能與硬件關(guān)系極大,當(dāng)硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來(lái)解決。 復(fù)位時(shí),數(shù)碼管顯示f ff,數(shù)碼管的第一位顯示的是搶答選手的號(hào)數(shù),數(shù)碼管的最后兩位顯示的是倒計(jì)時(shí)的時(shí)間。當(dāng)出現(xiàn)犯規(guī)操作的時(shí)候,數(shù)碼管閃爍。4.2.3 鍵盤(pán)掃描電路鍵盤(pán)掃描電路主要有八個(gè)按鈕來(lái)實(shí)現(xiàn),每一個(gè)按鈕對(duì)應(yīng)著相應(yīng)的選手,號(hào)碼對(duì)應(yīng)。選手按下按鈕,實(shí)現(xiàn)搶答。鍵盤(pán)掃描電路可以實(shí)現(xiàn)優(yōu)先搶答和鎖存,鎖存第一個(gè)按下?lián)?/p>
10、答按鈕的選手號(hào),這樣,其他選手在有選手搶答成功的情況下沒(méi)有搶答權(quán)利。鍵盤(pán)是人與微機(jī)系統(tǒng)打交道的主要設(shè)備。關(guān)于鍵盤(pán)硬件電路的設(shè)計(jì)方法也可以在文獻(xiàn)和書(shū)籍中找到,配合各種不同的硬件電路,這些書(shū)籍中一般也提供了相應(yīng)的鍵盤(pán)掃描程序。站在系統(tǒng)監(jiān)控軟件設(shè)計(jì)的立場(chǎng)上來(lái)看,僅僅完成鍵盤(pán)掃描,讀取當(dāng)前時(shí)刻的鍵盤(pán)狀態(tài)是不夠的,還有不少問(wèn)題需要妥善解決,否則,人們?cè)诓僮麈I盤(pán)就容易引起誤操作和操作失控現(xiàn)象。 在單片機(jī)應(yīng)用中鍵盤(pán)用得最多的形式是獨(dú)立鍵盤(pán)及矩陣鍵盤(pán)。它們各有自己的特點(diǎn),其中獨(dú)立鍵盤(pán)硬件電路簡(jiǎn)單,而且在程序設(shè)計(jì)上也不復(fù)雜,一般用在對(duì)硬件電路要求不高的簡(jiǎn)單電路中;矩陣鍵盤(pán)與獨(dú)立鍵盤(pán)有很大區(qū)別,首先在硬件電路上它
11、要比獨(dú)立鍵盤(pán)復(fù)雜得多,而且在程序算法上比它要煩瑣,但它在節(jié)省端口資源上有優(yōu)勢(shì)得多,因此它更適合于多按鍵電路。其次就是消除在按鍵過(guò)程中產(chǎn)生的“毛刺”現(xiàn)象。4.2.4 發(fā)聲電路我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來(lái)控制單片機(jī)某個(gè)口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的矩形波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時(shí)程序控制“高”“低”電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變音調(diào),使喇叭發(fā)出不同的聲音。發(fā)聲電路在搶答成功的時(shí)候,選手非法搶答的時(shí)候,倒計(jì)時(shí)時(shí)間在五秒之內(nèi)的時(shí)候,都會(huì)發(fā)出聲音來(lái)提示主持人和選手。 4.2.5 系統(tǒng)復(fù)位使cpu進(jìn)入初始狀態(tài),從000
12、0h地址開(kāi)始執(zhí)行程序的過(guò)程叫系統(tǒng)復(fù)位。從實(shí)現(xiàn)系統(tǒng)復(fù)位的方法來(lái)看,系統(tǒng)復(fù)位可分為硬件復(fù)位和軟件復(fù)位。硬件復(fù)位必須通過(guò)cpu外部的硬件電路給cpu的reset端加上足夠時(shí)間的高電位才能實(shí)現(xiàn)。上電復(fù)位,人工按鈕復(fù)位和硬件看門(mén)狗復(fù)位均為硬件復(fù)位。硬件復(fù)位后,各專用寄存器的狀態(tài)均被初始化,且對(duì)片內(nèi)通用寄存器的內(nèi)容沒(méi)有影響。但是,硬件復(fù)位還能自動(dòng)清除中斷激活標(biāo)志,使中斷系統(tǒng)能夠正常工作,這樣一個(gè)事實(shí)卻容易為不少編碼人員所忽視。軟件復(fù)位就是用一系列指令來(lái)模擬硬件復(fù)位功能,最后通過(guò)轉(zhuǎn)移指令使程序從0000h地址開(kāi)始執(zhí)行。對(duì)各專用寄存器的復(fù)位操作是容易的,也沒(méi)有必要完全模擬,可根據(jù)實(shí)際需要去主程序初始化過(guò)程中完
13、成。而對(duì)中斷激活標(biāo)志的清除工作常被遺忘,因?yàn)樗鼪](méi)有明確的位地址可供編程。有的編程人員用020000(ljmp 0000h)作為軟件陷阱,認(rèn)為直接轉(zhuǎn)向0000h地址就完成了軟件復(fù)位,就是這類錯(cuò)誤的典型代表。軟件復(fù)位是使用軟件陷阱和軟件看門(mén)狗后必須進(jìn)行的工作,這時(shí)程序出錯(cuò)完全有可能發(fā)生在中斷子程序中,中斷激活標(biāo)志已置位,它將阻止同級(jí)中斷響應(yīng)。由于軟件看門(mén)是高級(jí)中斷,它將阻止說(shuō)要中斷響應(yīng),由此可見(jiàn)清除中斷激活標(biāo)志的重要性。在所有的指令中,只有reti指令能夠清除中斷激活標(biāo)志。前文各處提案到的出錯(cuò)處理程序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 ;清除高級(jí)中斷激活標(biāo)志err1: mov power,#0aah ;重建上電標(biāo)志 clr a ;準(zhǔn)備復(fù)位地址 push acc ;壓入復(fù)位地址0000h reti ;清除低級(jí)中斷激活標(biāo)志,從程序0000h開(kāi)始執(zhí)行。這段程序先關(guān)中斷,以便后續(xù)處理能順利進(jìn)行,然后用兩個(gè)reti指令代替兩個(gè)ljmp指令,從而清除了兩級(jí)中斷激活標(biāo)志。有相應(yīng)軟件陷阱捕捉來(lái)的程序可能沒(méi)有全部激活兩個(gè)標(biāo)志,這也無(wú)妨。五·軟件設(shè)計(jì)5.1 主程序系統(tǒng)流程圖 開(kāi)始
15、 初始化 顯示fff開(kāi)始n y加一搶答成功非法搶答調(diào)節(jié)搶答倒計(jì)時(shí) y n顯示搶答顯示犯規(guī)調(diào)節(jié)答題倒計(jì)時(shí) 減一n y n5.2 系統(tǒng)程序;=;=單片機(jī)八路搶答器程序 =;= ok equ 20h ;搶答開(kāi)始標(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è)搶答時(shí)間為10s mov r2,#1eh ;初設(shè)答題時(shí)間為30s mov
16、 tmod,#11h ;設(shè)置未定時(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 ;允許四個(gè)中斷,t0/t1/int0/int1 clr ok clr ring setb tr1 setb tr0 ;一開(kāi)始就運(yùn)行定時(shí)器,以開(kāi)始顯示fff.如果想重新計(jì)數(shù),重置th1/tl1就可以了;=查詢程序=start: mov r5
17、,#0bh mov r4,#0bh mov r3,#0bh acall display ;未開(kāi)始搶答時(shí)候顯示fff jb p3.0,next ;p3.0=1時(shí)跳轉(zhuǎn) acall delay jb p3.0,next ;去抖動(dòng),如果"開(kāi)始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢 acall bark ;按鍵發(fā)聲 mov a,r1 mov r6,a ;送r1->r6,因?yàn)閞1中保存了搶答時(shí)間 setb ok ;搶答標(biāo)志位,用于count只程序中判斷是否查詢搶答 mov r7,#01h ;讀搶答鍵數(shù)據(jù)信號(hào)標(biāo)志,這里表示只讀一次有用信號(hào) mov r3,#0ah ;搶答只顯示計(jì)時(shí)
18、,滅號(hào)數(shù) ajmp count ;進(jìn)入倒計(jì)時(shí)程序,"查詢有效搶答的程序"在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 ;絕對(duì)轉(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(搶答時(shí)間r1調(diào)整程序)=int0sub:mov a,r1 mov b,#0ah div ab mov r5,a mov r4,b mov r3,#0ah acall display ;先在兩個(gè)時(shí)間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(回答時(shí)間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 ;=倒計(jì)時(shí)程序(搶答倒計(jì)時(shí)和回答倒計(jì)時(shí)都跳到改程序)=repeat: mov a,r2 ;使用錦囊時(shí)重新計(jì)時(shí) mov r6,a clr ring count: mov r0,#00h ;重置定時(shí)器中斷次數(shù) mov th1,#3ch mov tl1,#0b0h ;重置定時(shí)器recount:mov a,r6 ;r6保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)
23、間或回答時(shí)間給r6 mov b,#0ah div ab ;除十分出個(gè)位/十位 mov 30h,a ;十位存于(30h) mov 31h,b ;個(gè)位存于(31h) mov r5,30h ;取十位 mov r4,31h ;取個(gè)位 mov a,r6 subb a,#07h ; jnc larger ;c=0跳轉(zhuǎn),大于5s跳到larger,小于等于5s會(huì)提醒 mov a,r0 cjne a,#0ah,full ;1s中0.5s向下運(yùn)行 clr ring ajmp checkfull: cjne a,#14h,check ;下面是1s的情況,響并顯示號(hào)數(shù)并清r0,重新計(jì) setb ring mov a,
24、r6 jz quit ;計(jì)時(shí)完畢 mov r0,#00h dec r6 ;一秒標(biāo)志減1 ajmp checklarger: mov a,r0 cjne a,#14h,check ;如果1s向下運(yùn)行,否者跳到查"停/顯示" dec r6 ;計(jì)時(shí)一秒r6自動(dòng)減1 mov r0,#00hcheck: jnb p3.1,quit ;如按下停止鍵退出 jnb ok,checkk ;只在回答倒計(jì)時(shí)才有效 ajmp nexttcheckk: jnb p3.0,repeat ;判斷是否使用錦囊nextt: acall display jb ok,accout ;如果是搶答倒計(jì)時(shí),如是則查詢
25、搶答,否者跳過(guò)查詢繼續(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 ;搶答時(shí)間r2送r6 mov r3,#01h clr ok ;因?yàn)榇痤}的計(jì)時(shí)不再查詢搶答,所以就鎖了搶答 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ī)號(hào)數(shù)暫存與(34h)here: mov a,r0 cjne a,#06h,flash ;累加器內(nèi)容和立即數(shù)不等時(shí)跳轉(zhuǎn),0.5s向下運(yùn)行->滅并停響 clr ring mov r3,#0ah mov r4,#0ah mov r5,#0ah ;三燈全滅 ajmp check1flash: cjne a,#0ch,check1 ;下面是0.8s的情況,響并顯示號(hào)數(shù)并清r0,重新計(jì) setb ring ;報(bào)警 mov r0,#00h mov r3,34h ;取回號(hào)數(shù) mov r5,#0bh mov r4,#0bh ;顯示ff和號(hào)數(shù) ajmp check1check1
29、: jnb p3.1,quit1 ;停止未按下時(shí)跳轉(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 ;第一個(gè)為零,其他與上相同,因?yàn)槭蝗绻麨榱泔@示熄滅;=加減時(shí)間延時(shí)(起到不會(huì)按下就加n個(gè)數(shù))=delay1: mov 35h,#08hloop0: acall display djnz 35h,loop0 ret;=延時(shí)4236個(gè)機(jī)器周期(去抖動(dòng)用到)=delay: mov 32h,#12hloop: mov 33h,#0afhloop1: djnz 33h,loop1 djnz 32h,loop ret;=延時(shí)4236個(gè)機(jī)器周期(顯示用到)=delay2: mov 32h,#43h ;67loop3: mov 33h,#1eh ;30 mov a,
32、r7 ;每隔6070個(gè)機(jī)器周期讀一次p1口,全為1時(shí)為無(wú)效數(shù)據(jù),繼續(xù)讀,有一個(gè)不為1時(shí),轉(zhuǎn)到正常搶答處理 jnz aaaa1 ;沒(méi)讀到有效數(shù)據(jù)時(shí)繼續(xù)轉(zhuǎn)到aaaa1loop2: djnz 33h,loop2 djnz 32h,loop3 ret;=讀搶答按鍵數(shù)據(jù)口程序=;由于在讀搶答數(shù)據(jù)口的時(shí)候,單片機(jī)首先進(jìn)入倒計(jì)時(shí)程序,再調(diào)用顯示程序,最后才檢測(cè)按鍵口;然而在檢測(cè)按鍵口時(shí)動(dòng)態(tài)掃描要調(diào)用三次(4ms)延時(shí)程序.這樣就會(huì)導(dǎo)致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號(hào)優(yōu)先最高.8號(hào)最低.;故采用在延時(shí)子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性aaaa1: mov a,p1 cjne a,#0ffh,aa1 ;當(dāng)
33、不全為1時(shí)的數(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時(shí)候p3.6口不短取反使喇叭發(fā)出一定頻率的聲音out: reti;=t1溢出中斷(計(jì)時(shí)程序)=t1int: mov th1,#3ch mov tl1,#0
34、b0h inc r0 retiend5.3. 定時(shí)分析主持人按下“開(kāi)始”按鈕后10 秒內(nèi),若無(wú)人搶答,單片機(jī)會(huì)控制讓顯示器顯示fff,主持人可按下“開(kāi)始”按鈕進(jìn)行下一題的搶答。為了實(shí)現(xiàn)這個(gè)10 秒的時(shí)間限制,當(dāng)主持人按下“開(kāi)始”按鈕后應(yīng)進(jìn)行10秒定時(shí)。由于定時(shí)間隔太長(zhǎng),可使定時(shí)器t0工作在方式一,得到50 ms的定時(shí)間隔,再進(jìn)行軟件計(jì)數(shù)200次,便可實(shí)現(xiàn)10秒的定時(shí)。若單片機(jī)晶振頻率為12 mhz,則機(jī)器周期為1us,則要實(shí)現(xiàn)50ms的定時(shí),定時(shí)器t0在50 ms內(nèi)需要計(jì)數(shù)n次:n=50ms/1us=50 000次定時(shí)器t0工作在方式一 下的計(jì)數(shù)初值x為:x=最大計(jì)數(shù)值m-計(jì)數(shù)次數(shù)n=6553
35、6-50000=15536=3cb0h即向th0寫(xiě)入計(jì)數(shù)初值3ch,向tl0寫(xiě)入計(jì)數(shù)初值0b0h。方式寄存器tmod初始化,tmod=00000001b=01h,to為方式一定時(shí)。用于設(shè)置t1用于設(shè)置t0gatec/tm1m0gatec/tm1m0000 1000 1 tcon初始化:tr0=1,啟動(dòng)t0。tf1tr1tf0tr0ie1it1ie1ie001010000ie初始化:開(kāi)放中斷ea=1,中斷et0=1,允許定時(shí)器t0中斷。ea-et2eset1exet0ex010001111六·系統(tǒng)仿真及使用說(shuō)明1、 具有清零裝置和搶答控制,可由主持人操縱避免有人在主持人說(shuō)“開(kāi)始”前提前
36、搶答違反規(guī)則,若有選手在未開(kāi)始之前搶答,會(huì)出現(xiàn)犯規(guī)警告。2、 具有定時(shí)功能,在10秒內(nèi)無(wú)人搶答表示所有參賽選手獲參賽隊(duì)對(duì)本題棄權(quán),由主持人開(kāi)始下一題。選手回答題目的時(shí)間也有限制,選手答題時(shí)間為30秒。搶答時(shí)間和答題時(shí)間剩下5秒的時(shí)候,都會(huì)出現(xiàn)蜂鳴提示。3、10秒時(shí)仍無(wú)人搶答其報(bào)警電路工作表示搶答時(shí)間耗盡并禁止搶答。4、如果想調(diào)節(jié)搶答時(shí)間或答題時(shí)間,按"搶答時(shí)間調(diào)節(jié)"鍵或"答題時(shí)間調(diào)節(jié)" 鍵進(jìn)入調(diào)節(jié)狀態(tài),此時(shí)會(huì)顯示現(xiàn)在設(shè)定的搶答時(shí)間或回答時(shí)間值,如想加一秒按一下"加1s"鍵,如果想減一秒按一下"-1s"鍵,時(shí)間數(shù)碼管
37、上會(huì)顯示改變后的時(shí)間,調(diào)整范圍為0s99s, 0s時(shí)再減1s會(huì)跳到99,99s時(shí)再加1s會(huì)變到0s。 5、主持人按"搶答開(kāi)始"鍵,會(huì)有提示音,并立刻進(jìn)入搶答倒計(jì)時(shí)(預(yù)設(shè)10s搶答時(shí)間),如有選手搶答,會(huì)有提示音,并會(huì)顯示其號(hào)數(shù)并立刻進(jìn)入回答倒計(jì)時(shí)(預(yù)設(shè)30s搶答時(shí)間),不進(jìn)行搶答查詢,所以只有第一個(gè)按搶答的選手有效。倒數(shù)時(shí)間到小于5s會(huì)每秒響一下提示音。 6、如倒計(jì)時(shí)期間,主持人想停止倒計(jì)時(shí)可以隨時(shí)按"停止"按鍵,系統(tǒng)會(huì)自動(dòng)進(jìn)入準(zhǔn)備狀態(tài),等待主持人按"搶答開(kāi)始"進(jìn)入下次搶答計(jì)時(shí)。 7、如果主持人未按"搶答開(kāi)始"鍵,而有人
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程中介合同協(xié)議書(shū)
- 教育行業(yè)教務(wù)管理操作手冊(cè)
- 機(jī)械設(shè)備融資租賃協(xié)議書(shū)6篇
- 危險(xiǎn)貨物運(yùn)輸合同標(biāo)準(zhǔn)
- 《初高中英語(yǔ)語(yǔ)法講解與練習(xí)課教案》
- 2025年湖北怎么考貨運(yùn)從業(yè)資格證
- 2025年臨汾貨運(yùn)從業(yè)資格證考試內(nèi)容
- 2025年商鋪轉(zhuǎn)讓合同8篇
- 雙方付款合同范本
- 廠地合作合同范本
- DB34∕T 1644-2012 南方紅豆杉用材林栽培技術(shù)規(guī)程
- 《中華人民共和國(guó)道路運(yùn)輸條例》知識(shí)專題培訓(xùn)
- 直腸癌課件完整版本
- 2024年山東省青島市普通高中自主招生物理試卷(含解析)
- 【三菱】M800M80系列使用說(shuō)明書(shū)
- 【Z精密零部件公司企業(yè)文化建設(shè)問(wèn)題及優(yōu)化建議14000字(論文)】
- 2024-2030年紅茶行業(yè)市場(chǎng)深度調(diào)研及發(fā)展趨勢(shì)與投資戰(zhàn)略研究報(bào)告
- 2024年山東能源棗莊礦業(yè)集團(tuán)公司定向培養(yǎng)井下高技能員工招生200人高頻考題難、易錯(cuò)點(diǎn)模擬試題(共500題)附帶答案詳解
- 2024Growatt 15000-25000UE古瑞瓦特光伏逆變器用戶手冊(cè)
- 交管12123學(xué)法減分考試題庫(kù)及答案
- 2024年遼寧石化職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)必考題
評(píng)論
0/150
提交評(píng)論