單片機(jī)課程設(shè)計(jì) ---多人比賽智力搶答器系統(tǒng)設(shè)計(jì)_第1頁
已閱讀1頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  1引言</b></p><p>  電子計(jì)算機(jī)的發(fā)展經(jīng)歷了從電子管、晶體管、集成電路到大規(guī)模集成電路共四個(gè)階段,即通常所說的第一代、第二代、第三代和第四代計(jì)算機(jī)。現(xiàn)在廣泛使用的微型計(jì)算機(jī)是大規(guī)模集成電路技術(shù)發(fā)展的產(chǎn)物,因此它屬于第四代計(jì)算機(jī),而單片機(jī)則是微型計(jì)算機(jī)的一個(gè)分支。從1971年微型計(jì)算機(jī)問世以來,由于實(shí)際應(yīng)用的需要,微型計(jì)算機(jī)向著兩個(gè)不同的方向發(fā)展:一

2、個(gè)是向著高速度、大容量、高性能的高檔微機(jī)方向發(fā)展;而另一個(gè)則是向穩(wěn)定可靠、體積小和價(jià)格廉的單片機(jī)方向發(fā)展。但兩者在原理和技術(shù)上是緊密聯(lián)系的。單片機(jī)因?qū)⑵渲饕M成部分集成在一個(gè)芯片上而得名,具體說就是把中央處理器、隨機(jī)存儲(chǔ)器、只讀存儲(chǔ)器、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器以及I/O口電路等主要微型機(jī)部件,集成在一塊芯片上。雖然單片機(jī)只是一塊芯片,但從功能和組成上,它已具有了計(jì)算機(jī)的屬性,為此它稱為單片微型機(jī)。</p><p>

3、;  單片機(jī)有很多的特點(diǎn),主要表現(xiàn)在:體積小、功耗低、價(jià)格廉、控制功能強(qiáng)、應(yīng)用現(xiàn)場環(huán)境惡劣等。</p><p>  本設(shè)計(jì)的核心采用了AT89C51單片機(jī)。80C51單片機(jī)系列是在MCS—51系列的基礎(chǔ)上發(fā)展起來的,早期的80C51只是系列眾多芯片中的一類,但是隨著后來的發(fā)展,80C51已經(jīng)形成獨(dú)立的系列,并且成為當(dāng)前8位單片機(jī)的典型代表。</p><p>  80C51芯片為40引腳雙列

4、直插封裝,單一的+5V電源,它具有3個(gè)可編程I/O口,其中2個(gè)口(A和B)為8位口,1個(gè)口(C)為6位口。此外還有128單元的RAM和1個(gè)14位計(jì)數(shù)結(jié)構(gòu)的定時(shí)器/計(jì)數(shù)器。</p><p><b>  2課程設(shè)計(jì)說明</b></p><p><b>  2.1 設(shè)計(jì)任務(wù)</b></p><p>  本設(shè)計(jì)是采用單片機(jī)設(shè)計(jì)的

5、多人比賽智力搶答器系統(tǒng)。它具有電路簡單、功能齊全、制作成本低、性價(jià)比高等特點(diǎn),是一種經(jīng)濟(jì)、實(shí)用的比賽用搶答器。硬件部分主要由單片機(jī)、LED顯示器、LED驅(qū)動(dòng)器、聲音報(bào)警器、主持人操作鍵盤和其它基本外圍電子電路組成。軟件部分采用51系列單片機(jī)通用匯編語言與C語言設(shè)計(jì)編寫。該搶答器不僅能實(shí)現(xiàn)顯示各位搶答選手號,而且具有搶答30秒倒計(jì)時(shí)(可調(diào))、答題60秒倒計(jì)時(shí)(可調(diào))、違例搶答報(bào)警等功能。并且功能增減方便,只需對軟件做相應(yīng)修改即可。<

6、/p><p><b>  2.2總體方案設(shè)計(jì)</b></p><p>  方案一:采用數(shù)字電路實(shí)現(xiàn)</p><p>  定時(shí)搶答器的總體框圖如圖2-1所示,它由主體電路和擴(kuò)展電路兩部分組成。主體電路完成基本的搶答功能,即開始搶答后,當(dāng)選手按動(dòng)搶答按鈕時(shí),能顯示選手的編號,同時(shí)能封鎖輸入電路,禁止其他選手搶答。擴(kuò)展電路完成定時(shí)搶答功能。主要是對秒脈沖

7、產(chǎn)生電路計(jì)算從而達(dá)到定時(shí)功能。</p><p>  圖2-1 數(shù)字搶答器組成框圖</p><p>  定時(shí)搶答器的工作過程是:主持人將開關(guān)置于“清除”位置,搶答器處于禁止工作狀態(tài),定時(shí)顯示器上顯示設(shè)定的時(shí)間,當(dāng)節(jié)目主持人宣布搶答題目后,按下“開始”鍵,揚(yáng)聲器發(fā)出響聲提示,定時(shí)器倒計(jì)時(shí)。當(dāng)定時(shí)時(shí)間到,卻沒有選手搶答,系統(tǒng)報(bào)警,并禁止選手超時(shí)后搶答。當(dāng)選手在定時(shí)時(shí)間內(nèi)搶答時(shí),電路立即分辨出搶答

8、者的編號,由鎖存器進(jìn)行鎖存,然后譯碼顯示電路顯示編號,同時(shí)揚(yáng)聲器發(fā)聲報(bào)警,同時(shí)對輸入編碼電路進(jìn)行封鎖,避免其他選手再次搶答,顯示剩余搶答時(shí)間,并保持到主持人將系統(tǒng)清零為止。當(dāng)選手將問題回答完畢時(shí),主持人操作控制開關(guān),使系統(tǒng)恢復(fù)到禁止工作狀態(tài),以便進(jìn)行下一輪搶答。</p><p>  方案二:采用單片機(jī)實(shí)現(xiàn)</p><p>  相比第一方案而言此方案,采單片機(jī)為控制核心大大簡化了系統(tǒng)電路結(jié)構(gòu)

9、,把各種處理的功能整合在了單片機(jī)內(nèi)部。此設(shè)計(jì)方案把軟件的設(shè)計(jì)作為設(shè)計(jì)重點(diǎn),在原始的單一功能上添加了倒計(jì)時(shí)搶答、答題倒計(jì)時(shí)、顯示選手號等新穎的附屬功能,并保留了傳統(tǒng)的報(bào)警部分,電路還較簡單,具體方框圖如2-2所示。</p><p>  圖2-2 方案二框圖</p><p>  這是一種單片機(jī)控制的智能化搶答器,該搶答器可以克服普通搶答器存在的各種缺陷。本系統(tǒng)的功能是通過按下?lián)尨疰I的按鈕使單片

10、機(jī)相應(yīng)的端口線讀入信號,經(jīng)過處理后輸出顯示所按下的鍵號。本系統(tǒng)還具備篩選第一有效搶答信號、顯示超前違規(guī)搶答信號、以及可變的搶答倒計(jì)時(shí)信號和答題倒計(jì)時(shí)信號等功能。</p><p>  3搶答器硬件電路設(shè)計(jì)</p><p>  3.1單片機(jī)最小系統(tǒng)</p><p>  單片機(jī)使用51系列的AT89C51單片機(jī),該單片機(jī)應(yīng)用廣泛,技術(shù)成熟。AT89C51單片機(jī)是一個(gè)低電壓

11、,高性能CMOS8位單片機(jī),片內(nèi)含4kbytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和128bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM)。</p><p>  AT89C51有40個(gè)引腳,32個(gè)外部雙向輸入/輸出(I/O)端口,同時(shí)內(nèi)含2個(gè)外中斷口,2個(gè)16位可編程定時(shí)計(jì)數(shù)器,2個(gè)全雙工串行通信口,AT89C51可以按照常規(guī)方法進(jìn)行編程,也可以在線編程。AT89C51單片機(jī)引腳見圖3-1所示:</p>

12、<p>  圖3-1 AT89C51引腳圖</p><p>  3.1.1單片機(jī)時(shí)鐘電路</p><p>  AT89C51單片機(jī)中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反向放大器,引腳XTAL1和XTAL2分別為反向放大器的輸入和輸出,這個(gè)放大器作為反饋元件的片外石英晶體振蕩或陶瓷諧振器一起構(gòu)成自激振蕩器。外接石英晶體及電容、接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。對于外接電容、雖

13、然沒有十分嚴(yán)格的要求,但電容容量的大小會(huì)輕微影響振蕩頻率的高低、振蕩器的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性。一般使用石英晶體,電容使用30pF±10pF,而如使用陶瓷諧振器,最好選擇40pF±10pF。</p><p>  3.1.2單片機(jī)復(fù)位電路</p><p>  復(fù)位是單片機(jī)的重要操作內(nèi)容,復(fù)位功能是系統(tǒng)正常運(yùn)行的先決條件。在簡單的復(fù)位電路中,只要在微處理芯片的R

14、ST引腳保持高電平達(dá)2個(gè)以上的機(jī)器周期,即可完成一次復(fù)位操作??紤]到電源的穩(wěn)定時(shí)間,參數(shù)漂移,晶振穩(wěn)定時(shí)間以及復(fù)位的可靠性等因素,一般只要在RST引腳出現(xiàn)10ms以上的高電平,就能使單片機(jī)有效復(fù)位。</p><p>  復(fù)位是由外部電路來實(shí)現(xiàn)的,按功能分為以下兩種方式:上電自動(dòng)復(fù)位方式和人工復(fù)位方式。</p><p>  上電自動(dòng)復(fù)位電路雖然能實(shí)現(xiàn)上電復(fù)位功能,但對干擾沒有抵抗作用,不能保

15、證復(fù)位電路任何時(shí)候都能可靠地工作。</p><p>  人工復(fù)位將一個(gè)按鈕開關(guān)并聯(lián)于上電復(fù)位電路中。按一下開關(guān)會(huì)在RST端出現(xiàn)一段時(shí)間的高電平,使單片機(jī)復(fù)位,安全可靠,所以選擇人工復(fù)位電路。見圖3-2所示。</p><p>  圖3-2 單片機(jī)最小系統(tǒng)電路原理圖</p><p><b>  3.2鍵盤電路設(shè)計(jì)</b></p>&l

16、t;p>  鍵盤是單片機(jī)應(yīng)用系統(tǒng)最常用的輸入設(shè)備,操作人員可以通過鍵盤向單片機(jī)系統(tǒng)輸入指令、地址和數(shù)據(jù),實(shí)現(xiàn)簡單的人機(jī)通信。</p><p>  3.2.1選手搶答電路</p><p>  本設(shè)計(jì)要求設(shè)計(jì)可供8名選手搶答的搶答器,可選用矩陣鍵盤獨(dú)立式行列鍵盤。</p><p>  獨(dú)立式按鍵就是各按鍵相互獨(dú)立,每個(gè)按鍵單獨(dú)占用一根I/O口線,每根I/O口線的按

17、鍵工作狀態(tài)不會(huì)影響其他I/O口線上的工作狀態(tài)。因此,通過檢測輸入線的電平狀態(tài)可以很容易判斷哪個(gè)按鍵被按下了。</p><p>  優(yōu)點(diǎn):電路配置靈活,軟件結(jié)構(gòu)簡單。</p><p>  缺點(diǎn):每個(gè)按鍵需占用一根I/O口線,在按鍵數(shù)量較多時(shí),I/O口浪費(fèi)大,電路結(jié)構(gòu)顯得復(fù)雜。因此,此鍵盤是用于按鍵較少或操作速度較高的場合。</p><p>  矩陣鍵盤與獨(dú)立式按鍵鍵盤

18、相比,硬件電路大大節(jié)省??赏ㄟ^軟件的方法讓一鍵具有多功能。它適用于按鍵數(shù)量較多的場合,由行列線組成,按鍵位于行列的交叉點(diǎn)上,節(jié)省I/O口。但是需要大量掃描、譯碼程序設(shè)計(jì)對于我們來說有些困難,考慮到本設(shè)計(jì)只需8名選手搶答,所以采用獨(dú)立式行列按鍵,S1-S8分別是選手1至選手8的搶答按鍵,如圖3-3所示。</p><p>  圖3-3 選手搶答電路</p><p>  3.2.2主持人控制電路

19、</p><p>  控制電路是搶答器所必要的部分,它由主持人控制,用于控制開始/停止搶答、搶答時(shí)間和答題時(shí)間的調(diào)整。采用功能按鍵實(shí)現(xiàn),如圖3-4所示。</p><p>  圖3-4 主持人控制電路</p><p><b>  3.3顯示驅(qū)動(dòng)電路</b></p><p>  驅(qū)動(dòng)顯示部分是本設(shè)計(jì)一個(gè)重要部分,LED數(shù)碼管

20、分為共陰極7段數(shù)碼管如圖3-5所示,共陽極7段數(shù)碼管如圖3-6所示。</p><p>  圖3-5 共陰極7段數(shù)碼管</p><p>  圖3-6 共陽極7段數(shù)碼管</p><p>  在單片機(jī)設(shè)計(jì)中,LED數(shù)碼管的顯示方式有靜態(tài)顯示、動(dòng)態(tài)顯示兩種,由于靜態(tài)顯示數(shù)碼管的每一個(gè)LED需要占用單片機(jī)的一條端口線實(shí)現(xiàn)顯示控制,而單片機(jī)端口有限,所以采用動(dòng)態(tài)控制顯示方式。&

21、lt;/p><p>  將幾只數(shù)碼管的a-h分別連在一起與單片機(jī)段碼控制端P0口連在一起,作為數(shù)碼管段碼控制。P2口的P2.0—P2.2與數(shù)碼管公共端連在一起作為位碼選擇控制,使每只數(shù)碼管可以單獨(dú)顯示。由于單片機(jī)端口驅(qū)動(dòng)能力不足,數(shù)碼管的電流較大,所以在P0口接上拉電阻增加驅(qū)動(dòng)能力,P2口作為位碼控制端驅(qū)動(dòng)共陰型數(shù)碼管顯示。如圖3-7所示。</p><p>  圖3-7 驅(qū)動(dòng)顯示電路</

22、p><p><b>  3.4蜂鳴電路</b></p><p>  蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。</p><p>  電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性的振動(dòng)發(fā)聲。</p>

23、<p>  壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。它的發(fā)聲原理是電流通過電磁線圈,使電磁線圈產(chǎn)生磁場來驅(qū)動(dòng)振動(dòng)膜發(fā)聲的,因此需要一定的電流才能驅(qū)動(dòng),本設(shè)計(jì)采用I/O口(P3.6)向揚(yáng)聲器送高電平來控制揚(yáng)聲器發(fā)聲。如圖3-8所示。</p><p><b>  圖3-8 蜂鳴電路</b></p><p><b>  

24、3.5電源電路</b></p><p>  80C51單片機(jī)正常工作電壓范圍為直流+4.5V至+6V,標(biāo)準(zhǔn)電壓為+5V。實(shí)際應(yīng)用時(shí),可采用3節(jié)1.5V干電池串聯(lián)構(gòu)成4.5V或三端集成穩(wěn)壓器構(gòu)成+5V直流電壓源。若采用后者,可用220V市電經(jīng)整流、濾波、穩(wěn)壓后輸出穩(wěn)定的+5V的直流電為其供電。+5V穩(wěn)壓器采用CW7805,其應(yīng)用電路如圖3-9所示。圖中濾波電容C2和C4的值約為1000μF,C3和C5為

25、0.33μF。發(fā)光二極管D6的作用是顯示讀寫器的電源是否接通,若接通則D6燈亮,無接通則D6燈滅。</p><p>  圖3-9 電源電路原理圖</p><p><b>  4軟件部分</b></p><p>  4.1單片機(jī)內(nèi)部信息分析</p><p>  首先主持人按下復(fù)位按鍵,單片機(jī)進(jìn)行內(nèi)部掃描的同時(shí)主持人可以調(diào)節(jié)

26、搶答時(shí)間和允許答題時(shí)間,在整定的時(shí)間當(dāng)中如果沒有調(diào)節(jié)搶答時(shí)間和答題時(shí)間,則搶答器工作為設(shè)置的默認(rèn)值(搶答時(shí)間30s,答題時(shí)間60s)。如倒計(jì)時(shí)期間,主持人想停止倒計(jì)時(shí)可以隨時(shí)按“停止”按鍵,系統(tǒng)會(huì)自動(dòng)進(jìn)入準(zhǔn)備狀態(tài),等待主持人按“搶答開始鍵”進(jìn)入下次搶答計(jì)時(shí)。同時(shí)在主持人未按下開始搶答按鈕的時(shí)候有選手搶答,則單片機(jī)發(fā)出一個(gè)選手犯規(guī)信號送入揚(yáng)聲器,同時(shí)在LED數(shù)碼管上顯示選手號,以便主持人記錄。只有當(dāng)主持人按下開始搶答按鈕,此時(shí)單片機(jī)開始倒

27、計(jì)時(shí)并送到數(shù)碼管顯示,與此同時(shí)單片機(jī)向揚(yáng)聲器發(fā)一個(gè)提示信號驅(qū)動(dòng)揚(yáng)聲器發(fā)聲,此時(shí)選手才能開始搶答。</p><p><b>  4.2主要程序流程</b></p><p>  4.2.1系統(tǒng)主程序流程</p><p>  系統(tǒng)主程序控制單片機(jī)系統(tǒng)按預(yù)定的操作方式運(yùn)行,它是單片機(jī)系統(tǒng)程序的框架。系統(tǒng)上電后,對系統(tǒng)進(jìn)行初始化。初始化程序主要完成對單片

28、機(jī)內(nèi)專用寄存器的設(shè)定,單片機(jī)工作方式及各端口的工作狀態(tài)的規(guī)定流程圖如圖4-1所示。</p><p>  圖4-1 主要流程圖</p><p>  4.2.2中斷程序流程</p><p>  時(shí)間調(diào)節(jié)采用中斷來實(shí)現(xiàn),流程圖如圖4-2所示,如果想調(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í)間值,如想加

29、一秒按一下“加1s”鍵,如果想減一秒按一下“-1s”鍵,時(shí)間LED上會(huì)顯示改變后的時(shí)間,調(diào)整范圍為0s~99s,0s時(shí)再減1s會(huì)跳到99s,99s時(shí)再加1s會(huì)變到0s。</p><p>  圖4-2 中斷流程圖</p><p><b>  5仿真及調(diào)試</b></p><p><b>  5.1軟件仿真</b></p

30、><p>  首先安裝keil C51軟件,建立工程,在工程目錄下建立項(xiàng)目,在項(xiàng)目下編輯程序,保存在工程項(xiàng)目中,注意一定要設(shè)置文件后輟名,匯編語言程序?yàn)?ASM,C語言程序?yàn)?C,然后編譯仿真直到0錯(cuò)誤,0警告,最后生成hex文件以備后用,如圖5-1所示。</p><p>  圖5-1 程序仿真完成</p><p><b>  5.2軟件調(diào)試</b>

31、;</p><p>  安裝硬件調(diào)試軟件Proteus ISIS,在原理圖編輯區(qū)畫好硬件電路圖,設(shè)置好相應(yīng)參數(shù),導(dǎo)入hex文件。具體功能仿真如下:</p><p>  電路初始化,顯示FF F等待主持人按下開始鍵,如圖5-2所示。</p><p>  圖5-2 電路初始化</p><p>  搶答時(shí)間調(diào)至72秒時(shí),如圖5-3所示。</p

32、><p>  圖5-3 搶答時(shí)間調(diào)至72秒</p><p>  答題時(shí)間調(diào)至67秒時(shí),如圖5-4所示。</p><p>  圖5-4 答題時(shí)間調(diào)至67秒</p><p>  在主持人未按下開始鍵時(shí)3號選手搶答犯規(guī),顯示器顯示選手號并閃爍,同時(shí)揚(yáng)聲器發(fā)聲報(bào)警,如圖5-5所示。</p><p>  圖5-5 3號選手搶答犯規(guī)&

33、lt;/p><p>  主持人按下開始鍵,倒計(jì)時(shí)到21秒都無人搶答,顯示器顯示倒計(jì)時(shí),如圖5-6所示。</p><p>  圖5-6 無人搶答倒計(jì)時(shí)到21秒</p><p>  主持人按下開始鍵,4號選手成功搶答,顯示器顯示4號選手號,同時(shí)揚(yáng)聲器短暫發(fā)聲報(bào)警,如圖5-7所示。</p><p>  圖5-7 4號選手成功搶答</p>

34、<p>  經(jīng)過調(diào)試此設(shè)計(jì)除了滿足顯示、報(bào)警、控制等設(shè)計(jì)要求外,還具有顯示犯規(guī)選手號并閃爍提示、搶答時(shí)間答題時(shí)間可調(diào)等新穎的功能。還需要改進(jìn)的地方是在搶答期間或答題期間主持人按“停止”按鍵,終止搶答和答題時(shí),揚(yáng)聲器不能報(bào)警。</p><p><b>  附錄1:整機(jī)電路圖</b></p><p><b>  附錄2:源程序</b><

35、;/p><p>  OK EQU 20H;搶答開始標(biāo)志位</p><p>  RING EQU 22H;響鈴標(biāo)志位</p><p><b>  ORG 0000H</b></p><p><b>  AJMP MAIN</b></p><p><b>  ORG 000

36、3H</b></p><p>  AJMP INT0SUB</p><p><b>  ORG 000BH</b></p><p>  AJMP T0INT</p><p><b>  ORG 0013H</b></p><p>  AJMP INT1SUB<

37、;/p><p><b>  ORG 001BH</b></p><p>  AJMP T1INT</p><p><b>  ORG 0040H</b></p><p>  MAIN: MOV R1,#30;初設(shè)搶答時(shí)間為30s</p><p>  MOV R2,#60;初設(shè)答題

38、時(shí)間為60s</p><p>  MOV TMOD,#11H;設(shè)置未定時(shí)器/模式1</p><p>  MOV TH0,#0F0H</p><p>  MOV TL0,#0FFH;越高發(fā)聲頻率越高,越尖</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H;50ms為一次溢出中斷

39、</p><p><b>  SETB EA</b></p><p><b>  SETB ET0</b></p><p><b>  SETB ET1</b></p><p><b>  SETB EX0</b></p><p>

40、  SETB EX1;允許四個(gè)中斷,T0/T1/INT0/INT1</p><p><b>  CLR OK</b></p><p><b>  CLR RING</b></p><p><b>  SETB TR1</b></p><p>  SETB TR0;一開始就運(yùn)行定

41、時(shí)器,以開始顯示FFF.如果想重新計(jì)數(shù),重置TH1/TL1就可以了</p><p>  ;=====查詢程序=====</p><p>  START: MOV R5,#0BH</p><p>  MOV R4,#0BH</p><p>  MOV R3,#0BH</p><p>  ACALL DISPLAY;未開始

42、搶答時(shí)候顯示FFF</p><p>  JB P3.0,NEXT;ddddddd</p><p>  ACALL DELAY</p><p>  JB P3.0,NEXT;去抖動(dòng),如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢</p><p>  ACALL BARK;按鍵發(fā)聲</p><p>

43、<b>  MOV A,R1</b></p><p>  MOV R6,A;送R1->R6,因?yàn)镽1中保存了搶答時(shí)間</p><p>  SETB OK;搶答標(biāo)志位,用于COUNT只程序中判斷是否查詢搶答</p><p>  MOV R7,#01H ;讀搶答鍵數(shù)據(jù)信號標(biāo)志,這里表示只讀一次有用信號</p><p>

44、  MOV R3,#0AH;搶答只顯示計(jì)時(shí),滅號數(shù)</p><p>  AJMP COUNT;進(jìn)入倒計(jì)時(shí)程序,"查詢有效搶答的程序"在COUNT里面</p><p>  NEXT: JNB P1.0,FALSE1</p><p>  JNB P1.1,FALSE2</p><p>  JNB P1.2,FALSE3<

45、/p><p>  JNB P1.3,FALSE4</p><p>  JNB P1.4,FALSE5</p><p>  JNB P1.5,FALSE6</p><p>  JNB P1.6,FALSE7</p><p>  JNB P1.7,FALSE8</p><p>  AJMP START&

46、lt;/p><p>  ;=====非法搶答處理程序=====</p><p>  FALSE1: MOV R3,#01H</p><p>  AJMP ERROR</p><p>  FALSE2: MOV R3,#02H</p><p>  AJMP ERROR</p><p>  FALSE3

47、: MOV R3,#03H</p><p>  AJMP ERROR</p><p>  FALSE4: MOV R3,#04H</p><p>  AJMP ERROR</p><p>  FALSE5: MOV R3,#05H</p><p>  AJMP ERROR</p><p>  F

48、ALSE6: MOV R3,#06H</p><p>  AJMP ERROR</p><p>  FALSE7: MOV R3,#07H</p><p>  AJMP ERROR</p><p>  FALSE8: MOV R3,#08H</p><p>  AJMP ERROR</p><p&g

49、t;  ;=====INT0(搶答時(shí)間R1調(diào)整程序)=====</p><p>  INT0SUB:MOV A,R1</p><p>  MOV B,#0AH</p><p><b>  DIV AB</b></p><p><b>  MOV R5,A</b></p><p&g

50、t;<b>  MOV R4,B</b></p><p>  MOV R3,#0AH</p><p>  ACALL DISPLAY;先在兩個(gè)時(shí)間LED上顯示R1</p><p>  JNB P3.4,INC0;P3.4為+1s鍵,如按下跳到INCO</p><p>  JNB P3.5,DEC0;P3.5為-1s鍵,如

51、按下跳到DECO</p><p>  JNB P3.1,BACK0;P3.1為確定鍵,如按下跳到BACKO</p><p>  AJMP INT0SUB</p><p>  INC0: MOV A,R1</p><p>  CJNE A,#63H,ADD0;如果不是99,R2加1,如果加到99,R1就置0,重新加起。</p>&

52、lt;p>  MOV R1,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  ADD0: INC R1</p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  D

53、EC0: MOV A,R1</p><p>  JZ SETR1;如果R1為0, R1就置99,</p><p><b>  DEC R1</b></p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  SETR1: MOV R1,#63H&

54、lt;/p><p>  ACALL DELAY1</p><p>  AJMP INT0SUB</p><p>  BACK0: RETI </p><p>  ;=====INT1(回答時(shí)間R2調(diào)整程序)=====</p><p>  INT1SUB:MOV A,R2</p><p>  MOV

55、B,#0AH</p><p><b>  DIV AB</b></p><p><b>  MOV R5,A</b></p><p><b>  MOV R4,B</b></p><p>  MOV R3,#0AH</p><p>  ACALL DIS

56、PLAY</p><p>  JNB P3.4,INC1</p><p>  JNB P3.5,DEC1</p><p>  JNB P3.1,BACK1</p><p>  AJMP INT1SUB</p><p>  INC1: MOV A,R2</p><p>  CJNE A,#63H,

57、ADD1</p><p>  MOV R2,#00H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  ADD1: INC R2</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p&

58、gt;<p>  DEC1: MOV A,R2</p><p><b>  JZ SETR2</b></p><p><b>  DEC R2</b></p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p> 

59、 SETR2: MOV R2,#63H</p><p>  ACALL DELAY1</p><p>  AJMP INT1SUB</p><p>  BACK1: RETI </p><p>  ;=====倒計(jì)時(shí)程序(搶答倒計(jì)時(shí)和回答倒計(jì)時(shí)都跳到改程序)=====</p><p>  REPEAT:MOV A,R2

60、 ;使用錦囊時(shí)重新計(jì)時(shí)</p><p><b>  MOV R6,A</b></p><p><b>  CLR RING </b></p><p>  COUNT: MOV R0,#00H;重置定時(shí)器中斷次數(shù)</p><p>  MOV TH1,#3CH</p><p> 

61、 MOV TL1,#0B0H;重置定時(shí)器</p><p>  RECOUNT:MOV A,R6;R6保存了倒計(jì)時(shí)的時(shí)間,之前先將搶答時(shí)間或回答時(shí)間給R6</p><p>  MOV B,#0AH</p><p>  DIV AB;除十分出個(gè)位/十位</p><p>  MOV 30H,A;十位存于(30H)</p><p&

62、gt;  MOV 31H,B;個(gè)位存于(31H)</p><p>  MOV R5,30H;取十位</p><p>  MOV R4,31H;取個(gè)位</p><p><b>  MOV A,R6</b></p><p>  SUBB A,#07H</p><p>  JNC LARGER;大于5s

63、跳到LARGER,小于等于5s會(huì)提醒</p><p><b>  MOV A,R0</b></p><p>  CJNE A,#0AH,FULL;1s中0.5s向下運(yùn)行</p><p><b>  CLR RING </b></p><p>  AJMP CHECK</p><p

64、>  FULL: CJNE A,#14H,CHECK;下面是1s的情況,響并顯示號數(shù)并清R0,重新計(jì)</p><p><b>  SETB RING</b></p><p><b>  MOV A,R6</b></p><p>  JZ QUIT;計(jì)時(shí)完畢</p><p>  MOV R0,#

65、00H</p><p>  DEC R6;一秒標(biāo)志減1</p><p>  AJMP CHECK</p><p>  LARGER: MOV A,R0</p><p>  CJNE A,#14H,CHECK;如果1s向下運(yùn)行,否者跳到查"停/顯示"</p><p>  DEC R6;計(jì)時(shí)一秒R6自動(dòng)

66、減1</p><p>  MOV R0,#00H</p><p>  CHECK: JNB P3.1,QUIT;如按下停止鍵退出</p><p>  JNB OK,CHECKK ;只在回答倒計(jì)時(shí)才有效</p><p>  AJMP NEXTT</p><p>  CHECKK:JNB P3.0,REPEAT ;判斷是否

67、使用錦囊</p><p>  NEXTT: ACALL DISPLAY</p><p>  JB OK,ACCOUT;如果是搶答倒計(jì)時(shí),如是則查詢搶答,否者跳過查詢繼續(xù)倒數(shù)(這里起到鎖搶答作用)</p><p>  AJMP RECOUNT</p><p><b>  ACCOUT:</b></p><

68、;p><b>  MOV A,36H</b></p><p>  JNB ACC.0,TRUE1</p><p>  JNB ACC.1,TRUE2</p><p>  JNB ACC.2,TRUE3</p><p>  JNB ACC.3,TRUE4</p><p>  JNB ACC.4

69、,TRUE5</p><p>  JNB ACC.5,TRUE6</p><p>  JNB ACC.6,TZ1</p><p>  JNB ACC.7,TZ2</p><p>  AJMP RECOUNT</p><p>  TZ1:JMP TRUE7</p><p>  TZ2:JMP TR

70、UE8 </p><p>  QUIT: CLR OK;如果按下了"停止鍵"執(zhí)行的程序</p><p><b>  CLR RING</b></p><p>  AJMP START</p><p>  ;=====正常搶答處理程序=====</p><p>  TRUE1:

71、ACALL BARK</p><p><b>  MOV A,R2</b></p><p>  MOV R6,A;搶答時(shí)間R2送R6</p><p>  MOV R3,#01H</p><p>  CLR OK;因?yàn)榇痤}的計(jì)時(shí)不再查詢搶答,所以就鎖了搶答</p><p>  AJMP COUNT&

72、lt;/p><p>  TRUE2:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#02H</p><p><b>  CLR OK</b>

73、</p><p>  AJMP COUNT</p><p>  TRUE3:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#03H</p>&l

74、t;p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE4:ACALL BARK</p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p>&l

75、t;p>  MOV R3,#04H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE5:ACALL BARK </p><p><b>  MOV A,R2</b></p><p><b>

76、;  MOV R6,A</b></p><p>  MOV R3,#05H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE6: ACALL BARK </p><p><b>  MOV A,R2<

77、;/b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#06H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p><p>  TRUE7:ACALL BARK </p&g

78、t;<p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#07H</p><p><b>  CLR OK</b></p><p>  AJMP COUNT</p>&

79、lt;p>  TRUE8:ACALL BARK </p><p><b>  MOV A,R2</b></p><p><b>  MOV R6,A</b></p><p>  MOV R3,#08H</p><p><b>  CLR OK</b></p>

80、<p>  AJMP COUNT</p><p>  ;=====犯規(guī)搶答程序=====</p><p>  ERROR: MOV R0,#00H</p><p>  MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p>  MOV 34H,R3;犯規(guī)號數(shù)暫存與(34H)

81、</p><p>  HERE: MOV A,R0</p><p>  CJNE A,#06H,FLASH;0.3s向下運(yùn)行->滅并停響</p><p><b>  CLR RING </b></p><p>  MOV R3,#0AH</p><p>  MOV R4,#0AH</p

82、><p>  MOV R5,#0AH;三燈全滅</p><p>  AJMP CHECK1</p><p>  FLASH: CJNE A,#0CH,CHECK1;下面是0.8s的情況,響并顯示號數(shù)并清R0,重新計(jì)</p><p><b>  SETB RING</b></p><p>  MOV R

83、0,#00H</p><p>  MOV R3,34H;取回號數(shù)</p><p>  MOV R5,#0BH</p><p>  MOV R4,#0BH;顯示FF和號數(shù)</p><p>  AJMP CHECK1</p><p>  CHECK1: JNB P3.1,QUIT1</p><p>

84、  ACALL DISPLAY</p><p><b>  AJMP HERE</b></p><p>  QUIT1: CLR RING</p><p><b>  CLR OK</b></p><p>  AJMP START</p><p>  ;=====顯示程序==

85、===</p><p>  DISPLAY:MOV DPTR,#DAT1;查表顯示程序,利用P0口做段選碼口輸出/P2低三位做位選碼輸出,</p><p><b>  MOV A,R3</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#0feH</p><p

86、><b>  MOV P0,A</b></p><p>  ACALL DELAY2</p><p>  MOV DPTR,#DAT2</p><p><b>  MOV A,R5</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P

87、2,#0fdH</p><p><b>  MOV P0,A</b></p><p>  ACALL DELAY2</p><p><b>  MOV A,R4</b></p><p>  MOVC A,@A+DPTR</p><p>  MOV P2,#0fbH</p

88、><p><b>  MOV P0,A</b></p><p>  ACALL DELAY2</p><p><b>  RET</b></p><p>  DAT1:DB 00h,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,00H,71H </p><p

89、>  ;"滅","1","2","3","4","5","6","7","8","9","滅","F"</p><p>  DAT2:DB 3fh,06h,5bh,4fh

90、,66h,6dh,7dh,07h,7fh,6fh,00H,71H</p><p>  ;第一個(gè)為零,其他與上相同,因?yàn)槭蝗绻麨榱泔@示熄滅</p><p>  ;====加減時(shí)間延時(shí)(起到不會(huì)按下就加N個(gè)數(shù))======</p><p>  DELAY1: MOV 35H,#08H</p><p>  LOOP0: ACALL DISPLAY

91、</p><p>  DJNZ 35H,LOOP0</p><p><b>  RET</b></p><p>  ;=====延時(shí)4236個(gè)機(jī)器周期(去抖動(dòng)用到)=====</p><p>  DELAY: MOV 32H,#12H</p><p>  LOOP: MOV 33H,#0AFH&l

92、t;/p><p>  LOOP1: DJNZ 33H,LOOP1</p><p>  DJNZ 32H,LOOP</p><p><b>  RET</b></p><p>  ;=====延時(shí)4236個(gè)機(jī)器周期(顯示用到)=====</p><p>  DELAY2: MOV 32H,#43H<

93、;/p><p>  LOOP3: MOV 33H,#1EH</p><p>  MOV A,R7 ;每隔60~70個(gè)機(jī)器周期讀一次P1口,全為1時(shí)為無效數(shù)據(jù),繼續(xù)讀,有一個(gè)不為1時(shí),轉(zhuǎn)到正常搶答處理</p><p>  JNZ AAAA1 ;沒讀到有效數(shù)據(jù)時(shí)繼續(xù)轉(zhuǎn)到AAAA1</p><p>  LOOP2: DJNZ 33H,LOOP2<

94、/p><p>  DJNZ 32H,LOOP3</p><p><b>  RET</b></p><p>  ;=====讀搶答按鍵數(shù)據(jù)口程序=====</p><p>  ;由于在讀搶答數(shù)據(jù)口的時(shí)候,單片機(jī)首先進(jìn)入倒計(jì)時(shí)程序,再調(diào)用顯示程序,最后才檢測按鍵口</p><p>  ;然而在檢測按鍵口

95、時(shí)動(dòng)態(tài)掃描要調(diào)用三次(4ms)延時(shí)程序.這樣就會(huì)導(dǎo)致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號優(yōu)先最高.8號最低.</p><p>  ;故采用在延時(shí)子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性</p><p>  AAAA1: MOV A,P1</p><p>  CJNE A,#0FFH,AA1 ;當(dāng)不全為1時(shí)的數(shù)據(jù)為有效數(shù)據(jù)</p><p>  AA

96、0: MOV 36H,A ;將有效數(shù)據(jù)送到36H暫存</p><p>  AJMP LOOP2</p><p>  AA1: DEC R7 </p><p><b>  AJMP AA0</b></p><p>  ;=====發(fā)聲程序=====</p><p>  BARK: SETB RING

97、</p><p>  ACALL DELAY1</p><p>  ACALL DELAY1</p><p>  CLR RING;按鍵發(fā)聲</p><p><b>  RET</b></p><p>  ;=====TO溢出中斷(響鈴程序)=====</p><p>  

98、T0INT: MOV TH0,#0ECH</p><p>  MOV TL0,#0FFH</p><p>  JNB RING,OUT;</p><p>  CPL P3.6;RING標(biāo)志位為1時(shí)候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音</p><p><b>  OUT: RETI</b></p>&

99、lt;p>  ;=====T1溢出中斷(計(jì)時(shí)程序)=====</p><p>  T1INT: MOV TH1,#3CH</p><p>  MOV TL1,#0B0H</p><p><b>  INC R0</b></p><p><b>  RETI</b></p><

100、;p><b>  END</b></p><p><b>  參考文獻(xiàn)</b></p><p>  [1]朱永金.成友才.單片機(jī)應(yīng)用技術(shù).北京:中國勞動(dòng)社會(huì)保障出版社,2007</p><p>  [2]何立民.單片機(jī)高等教程.北京:航空航天大學(xué)出版社,2000</p><p>  [3]雄建

101、云.Protel99 se EDA技術(shù)及應(yīng)用.北京:機(jī)械工業(yè)出版社,2007</p><p>  [4]林春方.電子線路學(xué)習(xí)指導(dǎo)與實(shí)訓(xùn).北京:電子工業(yè)出版社,2004</p><p><b>  致謝</b></p><p>  一個(gè)人在兩星期內(nèi)完成這次設(shè)計(jì)不可謂不艱辛,然而,我卻從這兩星內(nèi)學(xué)到了許多,而且在實(shí)踐中運(yùn)用,更是令我印象深刻,<

102、;/p><p>  深切體會(huì)到單片機(jī)課程并非以前所想像的那樣紙上談兵。所有理論、都是為實(shí)踐操作而誕生的。</p><p>  慶幸自己終于認(rèn)真獨(dú)立地做了一次全面的單片機(jī)課程設(shè)計(jì),真的,從中學(xué)到了很多很容易被忽視的問題、知識(shí)點(diǎn),甚至還培養(yǎng)了自己的耐心細(xì)心用心的性格。從一頁頁復(fù)習(xí)課本,一遍遍修改草圖,一遍遍打印裝配圖,這些都是我從來未曾獨(dú)立做過的。我想,這對于明年的畢業(yè)設(shè)計(jì)肯定有莫大的幫助。<

溫馨提示

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

評論

0/150

提交評論