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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

19、</p><p>  控制電路是搶答器所必要的部分,它由主持人控制,用于控制開始/停止搶答、搶答時間和答題時間的調整。采用功能按鍵實現(xiàn),如圖3-4所示。</p><p>  圖3-4 主持人控制電路</p><p><b>  3.3顯示驅動電路</b></p><p>  驅動顯示部分是本設計一個重要部分,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>  在單片機設計中,LED數(shù)碼管的顯示方式有靜態(tài)顯示、動態(tài)顯示兩種,由于靜態(tài)顯示數(shù)碼管的每一個LED需要占用單片機的一條端口線實現(xiàn)顯示控制,而單片機端口有限,所以采用動態(tài)控制顯示方式。&

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

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

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

24、3.5電源電路</b></p><p>  80C51單片機正常工作電壓范圍為直流+4.5V至+6V,標準電壓為+5V。實際應用時,可采用3節(jié)1.5V干電池串聯(lián)構成4.5V或三端集成穩(wěn)壓器構成+5V直流電壓源。若采用后者,可用220V市電經(jīng)整流、濾波、穩(wěn)壓后輸出穩(wěn)定的+5V的直流電為其供電。+5V穩(wěn)壓器采用CW7805,其應用電路如圖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單片機內部信息分析</p><p>  首先主持人按下復位按鍵,單片機進行內部掃描的同時主持人可以調節(jié)

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

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

28、機內專用寄存器的設定,單片機工作方式及各端口的工作狀態(tài)的規(guī)定流程圖如圖4-1所示。</p><p>  圖4-1 主要流程圖</p><p>  4.2.2中斷程序流程</p><p>  時間調節(jié)采用中斷來實現(xiàn),流程圖如圖4-2所示,如果想調節(jié)搶答時間或答題時間,按“搶答時間調節(jié)”鍵或“答題時間調節(jié)”鍵進入調節(jié)狀態(tài),此時會顯示現(xiàn)在設定的搶答時間或回答時間值,如想加

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

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

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

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

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

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

35、;/p><p>  OK EQU 20H;搶答開始標志位</p><p>  RING EQU 22H;響鈴標志位</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;初設搶答時間為30s</p><p>  MOV R2,#60;初設答題

38、時間為60s</p><p>  MOV TMOD,#11H;設置未定時器/模式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;允許四個中斷,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;一開始就運行定

41、時器,以開始顯示FFF.如果想重新計數(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、搶答時候顯示FFF</p><p>  JB P3.0,NEXT;ddddddd</p><p>  ACALL DELAY</p><p>  JB P3.0,NEXT;去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到非法搶答查詢</p><p>  ACALL BARK;按鍵發(fā)聲</p><p>

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

44、  MOV R3,#0AH;搶答只顯示計時,滅號數(shù)</p><p>  AJMP COUNT;進入倒計時程序,"查詢有效搶答的程序"在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(搶答時間R1調整程序)=====</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;先在兩個時間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(回答時間R2調整程序)=====</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>  ;=====倒計時程序(搶答倒計時和回答倒計時都跳到改程序)=====</p><p>  REPEAT:MOV A,R2

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

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

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

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

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

65、00H</p><p>  DEC R6;一秒標志減1</p><p>  AJMP CHECK</p><p>  LARGER: MOV A,R0</p><p>  CJNE A,#14H,CHECK;如果1s向下運行,否者跳到查"停/顯示"</p><p>  DEC R6;計時一秒R6自動

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

67、使用錦囊</p><p>  NEXTT: ACALL DISPLAY</p><p>  JB OK,ACCOUT;如果是搶答倒計時,如是則查詢搶答,否者跳過查詢繼續(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;搶答時間R2送R6</p><p>  MOV R3,#01H</p><p>  CLR OK;因為答題的計時不再查詢搶答,所以就鎖了搶答</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向下運行->滅并停響</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,重新計</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>  ;第一個為零,其他與上相同,因為十位如果為零顯示熄滅</p><p>  ;====加減時間延時(起到不會按下就加N個數(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>  ;=====延時4236個機器周期(去抖動用到)=====</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>  ;=====延時4236個機器周期(顯示用到)=====</p><p>  DELAY2: MOV 32H,#43H<

93、;/p><p>  LOOP3: MOV 33H,#1EH</p><p>  MOV A,R7 ;每隔60~70個機器周期讀一次P1口,全為1時為無效數(shù)據(jù),繼續(xù)讀,有一個不為1時,轉到正常搶答處理</p><p>  JNZ AAAA1 ;沒讀到有效數(shù)據(jù)時繼續(xù)轉到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ù)口的時候,單片機首先進入倒計時程序,再調用顯示程序,最后才檢測按鍵口</p><p>  ;然而在檢測按鍵口

95、時動態(tài)掃描要調用三次(4ms)延時程序.這樣就會導致讀數(shù)據(jù)口出現(xiàn)滯后,造成1號優(yōu)先最高.8號最低.</p><p>  ;故采用在延時子程序中加了讀數(shù)據(jù)口程序.保證了靈敏度和可靠性</p><p>  AAAA1: MOV A,P1</p><p>  CJNE A,#0FFH,AA1 ;當不全為1時的數(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標志位為1時候P3.6口不短取反使喇叭發(fā)出一定頻率的聲音</p><p><b>  OUT: RETI</b></p>&

99、lt;p>  ;=====T1溢出中斷(計時程序)=====</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>  參考文獻</b></p><p>  [1]朱永金.成友才.單片機應用技術.北京:中國勞動社會保障出版社,2007</p><p>  [2]何立民.單片機高等教程.北京:航空航天大學出版社,2000</p><p>  [3]雄建

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

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

溫馨提示

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

評論

0/150

提交評論