單片機(jī)課程設(shè)計(jì)--八路智力競賽搶答器_第1頁
已閱讀1頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  一 緒論</b></p><p>  《單片機(jī)原理及應(yīng)用技術(shù)》是一門技術(shù)性,應(yīng)用性、實(shí)踐性很強(qiáng)的學(xué)科。課程設(shè)計(jì)是學(xué)好本門課程的又一重要實(shí)踐性教學(xué)環(huán)節(jié),課程設(shè)計(jì)的目的和任務(wù)就是配合單片機(jī)的教學(xué)和平時(shí)實(shí)驗(yàn),以達(dá)到鞏固消化課程的內(nèi)容,進(jìn)一步加強(qiáng)綜合應(yīng)用能力及單片機(jī)應(yīng)用系統(tǒng)開發(fā)和設(shè)計(jì)能力的訓(xùn)練,啟發(fā)創(chuàng)新思維,使之具有獨(dú)立單片機(jī)產(chǎn)品和科研的基本技能,是以培養(yǎng)學(xué)生綜合運(yùn)

2、用所學(xué)知識(shí)的過程,是知識(shí)轉(zhuǎn)化為能力和能力轉(zhuǎn)化為工程素質(zhì)的重要階段。在實(shí)際生活中有好多地方都用到了單片機(jī),因此學(xué)習(xí)好這門課程有著十分重要的意義。</p><p>  隨著科學(xué)技術(shù)的不斷發(fā)展,促使人們學(xué)科學(xué)、學(xué)技術(shù)、學(xué)知識(shí)的手段多種多樣。搶答器作為一種工具,已廣泛應(yīng)用于各種智力和知識(shí)競賽場合。搶答器是為智力競賽參賽者答題時(shí)進(jìn)行搶答而設(shè)計(jì)的一種優(yōu)先判決器電路,廣泛應(yīng)用于各種知識(shí)競賽、文娛活動(dòng)等場合。能夠?qū)崿F(xiàn)搶答器功能的

3、方式有多種,可以采用前期的模擬電路、數(shù)字電路或模擬與數(shù)字電路相結(jié)合的方式,但這種方式制作過程復(fù)雜,而且準(zhǔn)確性與可靠性不高,成品面積大,安裝、維護(hù)困難。本節(jié)介紹一種利用51單片機(jī)作為核心部件進(jìn)行邏輯控制及信號(hào)產(chǎn)生的八路搶答器。近年來,隨著單片機(jī)檔次的不斷提高,功能的不斷完善,其應(yīng)用日趨成熟、應(yīng)用領(lǐng)域日趨擴(kuò)大,特別是工業(yè)測控、尖端武器和日用家電等領(lǐng)域更是因?yàn)橛辛藛纹瑱C(jī)而生輝增色。單片機(jī)應(yīng)用技術(shù)已成為一項(xiàng)新的工程應(yīng)用技術(shù)。本次課程設(shè)計(jì)我們做的

4、是八路搶答器,我們采用AT89C51單片機(jī)實(shí)現(xiàn)搶答功能,性能更穩(wěn)定,更易操作調(diào)試。</p><p>  目前大多數(shù)搶答器均使用單片機(jī)及外圍接口實(shí)現(xiàn),基于單片機(jī)的智力競賽搶答器系統(tǒng)框圖如下圖所示。</p><p><b>  1.2設(shè)計(jì)目的</b></p><p>  通過設(shè)計(jì)學(xué)習(xí)單片機(jī)最小系統(tǒng)的基本設(shè)計(jì)方法,掌握單片機(jī)應(yīng)用系統(tǒng)的開發(fā)調(diào)試過程。&

5、lt;/p><p>  (1)學(xué)習(xí)單片機(jī)開發(fā)工具功能、特點(diǎn)和使用方法。</p><p> ?。?)學(xué)會(huì)單片機(jī)控制系統(tǒng)程序的編制和編制和調(diào)試方法。</p><p> ?。?)設(shè)計(jì)單片機(jī)搶答器硬件電路,繪制出電路原理圖。</p><p> ?。?)編制并調(diào)試出鍵盤掃描程序和顯示驅(qū)動(dòng)程序。</p><p> ?。?)掌握單片機(jī)定

6、時(shí)器的基本用法,編制出定時(shí)器的中斷程序。</p><p>  二 設(shè)計(jì)任務(wù)和要求</p><p><b>  2.1基本要求</b></p><p>  智力競賽搶答器的設(shè)計(jì)</p><p>  設(shè)計(jì)一個(gè)供8 名選手參加比賽的智力競賽搶答器,要求:</p><p> ?。?)每名選手有一個(gè)搶答

7、按鈕,按鈕的編號(hào)與選手的編號(hào)相對應(yīng);</p><p> ?。?)搶答器具有第一個(gè)搶答信號(hào)的鑒別和數(shù)據(jù)鎖存、顯示的功能。搶答開始后,若有選手按搶答按鈕,則該選手指示燈亮,并在數(shù)碼管上顯示相應(yīng)編號(hào),揚(yáng)聲器發(fā)出音響提示。同時(shí),電路應(yīng)具備自鎖功能,禁止其他選手再搶答,優(yōu)先搶答選手的編號(hào)一直保持到主持人將系統(tǒng)清0 為止;</p><p> ?。?)搶答器具有計(jì)分、顯示功能。預(yù)置分?jǐn)?shù)可由主持人設(shè)定,并

8、顯示在每名選手的計(jì)</p><p>  分牌上,選手答對加10 分,答錯(cuò)扣10 分;</p><p>  (4)搶答器具有定時(shí)搶答的功能。一次搶答的時(shí)間由主持人設(shè)定,在主持人發(fā)出搶答</p><p>  指令后,定時(shí)器立即進(jìn)行減計(jì)時(shí),并在顯示器上顯示,同時(shí)揚(yáng)聲器發(fā)出短暫聲響,</p><p>  聲響時(shí)間持續(xù)0.5s 左右;</p>

9、;<p>  (5)選手在設(shè)定的時(shí)間內(nèi)進(jìn)行搶答,搶答有效,定時(shí)器停止工作,顯示器顯示選手編</p><p>  號(hào)和搶答時(shí)刻的時(shí)間,并保持到主持人將系統(tǒng)清0 為止;</p><p> ?。?)如果定時(shí)搶答的時(shí)間已到,卻沒有選手搶答時(shí),本次搶答無效,系統(tǒng)進(jìn)行短暫的</p><p>  報(bào)警,并禁止選手超時(shí)后搶答,定時(shí)顯示器上顯示00;</p>

10、<p>  (7)搶答器具有犯規(guī)提示功能。對提前搶答和超時(shí)搶答的選手,揚(yáng)聲器發(fā)出報(bào)警信號(hào),</p><p>  并在顯示器上顯示其編號(hào)。</p><p><b>  三 設(shè)計(jì)方案</b></p><p><b>  3.1方案論證</b></p><p>  智力競賽搶答器用單片機(jī)

11、來設(shè)計(jì)制作完成,由于其功能的實(shí)現(xiàn)主要通過軟件編程來完成, 采用單片機(jī)AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲(chǔ)器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。該智力競賽搶答器的準(zhǔn)確度很高,其誤差主要由晶振自身的誤差所造成。</p><p>  3.2硬件設(shè)計(jì)方案 </p><p>  設(shè)計(jì)根據(jù)課程設(shè)計(jì)要求可以大概構(gòu)思出硬件電路圖:發(fā)光二極管與單片機(jī)的 P

12、1.0——P1.7 口相連接;P3.2 口與蜂鳴器相連接;</p><p>  用以 AT89C51 為核心的單片機(jī)控制方案,通過相應(yīng)的程序,并通過按鍵來進(jìn)行電平 識(shí)別,再由單片機(jī)輸出相應(yīng)的程序,并將相應(yīng)數(shù)值通過數(shù)碼來顯示。用單片機(jī)來制作的 搶答器,硬件電路主要是用8279鍵盤顯示接口電路,極大地減輕了單片機(jī)的負(fù)荷。</p><p>  3.3 軟件設(shè)計(jì)方案</p><

13、p>  1)鍵盤掃描及鎖存功能的實(shí)現(xiàn) </p><p>  方案一: 利用外部中斷法,將鍵盤接至外部中斷P3.2或P3.1,當(dāng)有鍵盤按下后,進(jìn)入中斷程序,用軟件編寫進(jìn)行相關(guān)操作來控制各個(gè)按鍵怎樣按下。對于這種方法,當(dāng)要鎖存電路時(shí),在中斷程序中關(guān)中斷即可實(shí)現(xiàn)鎖存功能。 </p><p>  方案二:采用讀鍵值函數(shù)掃描法,建一個(gè)讀鍵值函數(shù),每當(dāng)要查詢鍵盤時(shí)調(diào)用此函數(shù),讀取一次鍵值,由于

14、程序是循環(huán)執(zhí)行的,這樣即使本次調(diào)用此函數(shù)沒有讀取到鍵值,但循環(huán)執(zhí)行,調(diào)用讀鍵值函數(shù)很快,相當(dāng)于在掃描鍵盤。對于此種方案,當(dāng)讀取以為選手鍵值后,設(shè)定一個(gè)標(biāo)志值,使在下次循環(huán)程序執(zhí)行到此處時(shí),先查詢此標(biāo)志是否已被設(shè)置,一旦設(shè)置,則跳過此段讀取鍵值函數(shù),直接進(jìn)行下一步處理。實(shí)現(xiàn)了鎖存電路的功能。</p><p>  顯然,方案一雖然看上去思路明了,但由于根據(jù)按下鍵值不同,相應(yīng)處理不一樣,所以中斷執(zhí)行程序會(huì)很復(fù)雜,甚是麻

15、煩。而方案二只需要根據(jù)讀鍵值函數(shù)返回值不同,直接在主程序中用選擇語句來分路執(zhí)行即可,因此選擇方案二。</p><p><b>  定時(shí)功能的實(shí)現(xiàn)</b></p><p>  采用定時(shí)器T0中斷實(shí)現(xiàn)定時(shí)功能,設(shè)初值為50毫秒。循環(huán)20次就減一秒,知道秒數(shù)為零后執(zhí)行相應(yīng)報(bào)警操作。</p><p><b>  數(shù)碼管的顯示 </b&g

16、t;</p><p>  方案一:采用靜態(tài)顯示,是指當(dāng)數(shù)碼管顯示某一字符時(shí),七段數(shù)碼管的對應(yīng)段的發(fā) 光二極管被選中,在這種顯示方式下,每段 LED 都對應(yīng)一個(gè)單片機(jī)口線。 </p><p>  方案二:采用動(dòng)態(tài)顯示,對于多位數(shù)碼管顯示時(shí),每一位數(shù)碼管輪流顯示,當(dāng)顯示間隔時(shí)間較短時(shí)人眼就分辨不出是動(dòng)態(tài)顯示,而是每一位都是一直都在顯示。 </p><p>  比較二者,

17、靜態(tài)顯示主要的優(yōu)點(diǎn)是顯示穩(wěn)定,在發(fā)光二極管導(dǎo)通電流一定的情況下 顯示器的亮度大,系統(tǒng)運(yùn)行過程中,在需要更新顯示內(nèi)容時(shí),CPU 才去執(zhí)行顯示更新子 程序,這樣既節(jié)約了 CPU 的時(shí)間,又提高了 CPU 的工作效率。其不足之處是在需要用于 顯示的數(shù)碼管較多時(shí)占用硬件資源較多,每個(gè) LED 數(shù)碼管需要獨(dú)占 8 條輸出線。隨著顯示器位數(shù)的增加,需要的 I/O 口線也將增加。動(dòng)態(tài)顯示器的優(yōu)點(diǎn)是節(jié)省硬件資源,成本 較低,但是要保證顯示器正常顯示,C

18、PU 必需每隔一段時(shí)間執(zhí)行一次顯示子程序,占用 CPU 大量時(shí)間,降低了 CPU 的工作效率,同時(shí)顯示亮度較靜態(tài)顯示器低。 通過以上分析,結(jié)合本課題只提供八位數(shù)碼管,所以采用方案二。</p><p>  4)搶答信號(hào)指示燈 </p><p>  對于這八位 LED 燈的閃爍可以通過軟件程序的編寫, 當(dāng)P1管腳送出電平高低控制其滅亮。</p><p><b>

19、;  3.2設(shè)計(jì)原理</b></p><p>  搶答器的工作原理是采用單片機(jī)最小系統(tǒng),用程序查詢方式采用動(dòng)態(tài)顯示組號(hào)。主持人按下開始搶答鍵才可以搶答。主持人沒有按下開始搶答按紐,有人搶答則搶答違規(guī),報(bào)警并顯示組號(hào),主持人按下開始搶答開關(guān)重新?lián)尨?。主持人按下開始搶答按紐后,數(shù)碼管30秒倒計(jì)時(shí)搶答,30秒內(nèi)有人搶答,則蜂鳴器響聲提示并顯示他的組號(hào),并且 開始60秒倒計(jì)時(shí)(60秒內(nèi)必須回答完問題),最后五

20、秒倒計(jì)時(shí)警報(bào)。單片機(jī)最小系統(tǒng)、搶答按鍵模塊(四位并行數(shù)碼顯示)、顯示模塊、顯示驅(qū)動(dòng)模塊、搶答開關(guān)模塊、蜂鳴器音頻輸出模塊。</p><p>  四硬件系統(tǒng)說明與電路原理圖</p><p>  4.1控制系統(tǒng)及所需元件 </p><p>  控制系統(tǒng)主要由單片機(jī)應(yīng)用電路、存儲(chǔ)器接口電路、鍵盤顯示接口電路組成。其中單片機(jī)AT89C51和8279是系統(tǒng)工作的核心,它們主要

21、負(fù)責(zé)控制各個(gè)部分協(xié)調(diào)工作和電路的主要功能。</p><p>  1.AT89C51單片機(jī)由微處理器,存儲(chǔ)器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲(chǔ)器在物理上設(shè)計(jì)成程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器兩個(gè)獨(dú)立的空間,片內(nèi)程序存儲(chǔ)器的容量為4KB,片內(nèi)數(shù)據(jù)存儲(chǔ)器為128個(gè)字節(jié)。89C51單片機(jī)有4個(gè)8位的并行I/O口:P0口,P1口,P2口和P3口。各個(gè)接口均由接口鎖存器,輸出驅(qū)動(dòng)器,和輸入緩沖器組成。P1口是唯一的單

22、功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí),P0可作為分時(shí)復(fù)用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時(shí)為閃爍編程和編程校驗(yàn)接收一些控制信號(hào)。</p><p>  本次實(shí)驗(yàn)中P1.0-P1.

23、7同于控制八位選手對應(yīng)的指示燈亮或滅。P3.2用蜂鳴器的控制口 。 </p><p>  2. 8279可按其功能分為:鍵盤功能塊、顯示功能塊、控制功能塊;</p><p>  與CPU接口功能塊控制功能塊包括控制和定時(shí)寄存器,定時(shí)和控制,掃描計(jì)數(shù)器三部分,它主要用來控制鍵盤和顯示功能塊工作.   </p><p>  控制和定時(shí)寄存器:用于存貯來

24、自CPU的編程命令,CPU對8279編程以確定鍵盤與顯示器工作方式和其它工作條件時(shí),先把命令控制數(shù)據(jù)放到數(shù)據(jù)總線上,然后使A0=1,WR=0CS=0,并在WR 上升沿把命令鍵存在控制和定時(shí)寄存器中,并經(jīng)譯碼,建立適當(dāng)?shù)墓δ?</p><p>  定時(shí)和控制:它含基本的定時(shí)計(jì)數(shù)器,第一個(gè)計(jì)數(shù)器是一個(gè)分頻系數(shù)為2-31的前置定時(shí)器, 分頻系數(shù)可由程序預(yù)置,使內(nèi)部頻率為100KHz,從而能給出5.1ms鍵盤掃描時(shí)間和1

25、0.3ms反跳時(shí)間,其它計(jì)數(shù)器將此基本頻率分頻后,提供適當(dāng)?shù)陌存I掃描.行掃描.</p><p>  鍵盤陣列掃描.以及顯示器掃描次數(shù).掃描計(jì)數(shù)器:掃描計(jì)數(shù)器有兩種工作方式,在編碼工作方式時(shí),計(jì)數(shù)器提供一種二進(jìn)制計(jì)數(shù), 通過管腳SL0-SL3輸出后經(jīng)外部譯碼才能提供給鍵盤和顯示器的掃描作用,在譯碼工作方式時(shí),掃描計(jì)數(shù)器對最低二位進(jìn)行譯碼,SL0-SL3輸出4選1的譯碼信號(hào),作為顯示器和鍵盤的譯碼掃描.</p&

26、gt;<p>  鍵盤功能塊包括:返回緩沖器,鍵盤反跳及控制,8x8 FIFO傳感器RAM,FIFO/傳感器RAM狀態(tài). </p><p><b>  蜂鳴器</b></p><p>  當(dāng)至P3.2低電平有效。</p><p>  8279鍵盤及顯示電路</p><p><b>  發(fā)光二極管電

27、路</b></p><p>  晶振的頻率為12MHZ,提供89C51的時(shí)鐘脈沖使89C51工作,在此次課程設(shè)計(jì)電路中當(dāng)一個(gè)問題結(jié)束主持人后按下復(fù)位開關(guān)后進(jìn)行下一題的準(zhǔn)備。</p><p><b>  6.系統(tǒng)電路原理圖</b></p><p><b>  五 軟件系統(tǒng)設(shè)計(jì)</b></p>&l

28、t;p>  智力競賽搶答器要求有計(jì)時(shí)記憶功能,一次時(shí)間設(shè)置完, 復(fù)位后不需重新進(jìn)行時(shí)間設(shè)定,通過鍵盤掃描輸出按鍵信息,再通過單片機(jī)將它轉(zhuǎn)換成能在七段數(shù)碼管上顯示字型碼.</p><p>  當(dāng)搶答完畢時(shí),會(huì)在數(shù)碼管上顯示搶答者數(shù)字號(hào)碼提示以表示搶答成功.同時(shí)顯示其分?jǐn)?shù),分?jǐn)?shù)的加減可由裁判手動(dòng)進(jìn)行. 采用2*8式鍵盤,可實(shí)現(xiàn)8路搶答. 在顯示時(shí)使用的是七段數(shù)碼管顯示在本設(shè)計(jì)中根據(jù)實(shí)際情況采用的是動(dòng)態(tài)顯示方法.

29、 并通過查表法 將其在數(shù)碼管上顯示出來,硬件去抖動(dòng),如果"開始鍵"按下就向下執(zhí)行,否者跳到開始。采用倒計(jì)時(shí)程序,使其具有倒計(jì)時(shí)功能?;卮鸬褂?jì)時(shí)90秒。搶答時(shí)間30秒。采用發(fā)聲警報(bào)起到報(bào)警作用。</p><p>  1、如果想調(diào)節(jié)選手分?jǐn)?shù),則按"A(加分)"鍵或"B(減分)"鍵進(jìn)入調(diào)節(jié)狀態(tài),此時(shí)會(huì)顯示當(dāng)前選手的分?jǐn)?shù)值,同時(shí)LED上同步顯示剩余的時(shí)間。<

30、;/p><p>  2.主持人按"搶答開始"鍵,會(huì)有提示音,并立刻進(jìn)入搶答倒計(jì)時(shí)(預(yù)設(shè)30s搶答時(shí)間),如有選手搶答,會(huì)有提示音,并會(huì)顯示其號(hào)數(shù)與分?jǐn)?shù)并立刻進(jìn)入回答倒計(jì)時(shí)(預(yù)設(shè)90s搶答時(shí)間),此時(shí)封鎖其他選手按鍵,即不進(jìn)行搶答查詢,所以只有第一個(gè)按搶答的選手有效。倒數(shù)時(shí)間到小于10s會(huì)每秒響一下提示音。</p><p>  3.如倒計(jì)時(shí)期間,主持人想停止倒計(jì)時(shí)可以隨時(shí)按&

31、quot;F(復(fù)位)"鍵,系統(tǒng)會(huì)自動(dòng)進(jìn)入準(zhǔn)備狀態(tài),等待主持人按"搶答開始"進(jìn)入下次搶答計(jì)時(shí)。 </p><p>  4、如果主持人未按"搶答開始"鍵,而有人按了搶答按鍵,犯規(guī)搶答,LED上顯示犯規(guī)選手編號(hào),對應(yīng)犯規(guī)選手面前的燈會(huì)亮,直到按下"停止" 鍵為止。</p><p>  5、p1.0-p1.7為八路搶答者的顯示燈

32、,蜂鳴器輸出為P3.2口。</p><p><b>  5.1 系統(tǒng)流程圖</b></p><p>  搶答成功流程圖 中斷服務(wù)流程圖</p><p><b>  5.2程序代碼</b></p><p>  #include<reg51.h></p>

33、<p>  #include<absacc.h></p><p>  #include<intrins.h></p><p>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define D8279

34、 XBYTE[0x5EFF] //8279 數(shù)據(jù)口地址</p><p>  #define C8279 XBYTE[0x5FFF] //8279 狀態(tài)/命令口地址</p><p>  sbit beep=P3^2; //蜂鳴器</p><p>  sbit l1=P1^0;//8個(gè)發(fā)光二極管</p><p>  sbit l

35、2=P1^1;</p><p>  sbit l3=P1^2;</p><p>  sbit l4=P1^3;</p><p>  sbit l5=P1^4;</p><p>  sbit l6=P1^5;</p><p>  sbit l7=P1^6;</p><p>  sbit l8=P1

36、^7;</p><p>  uchar code ledseg[] = {0xc0,0xf9,0xa4,0xb0,0x99,</p><p>  0x92,0x82,0xf8,0x80,0x90,</p><p>  0x88,0x83,0xc6,0xa1,0x86,</p><p>  0x8e,0x8c,0xc1,0x89,0xc7,&

37、lt;/p><p>  0xbf,0x91,0x00,0xff};//LED顯示常數(shù)表</p><p>  uchar xuanshou,second,count;//</p><p>  uchar score1,score2,score3,score4,score5,score6,score7,score8,score,xianshi;//選手1~8的分?jǐn)?shù)</

38、p><p>  uint t,m,n,a1,a2,a3,a4,a5,a6,a7,a8,i;</p><p>  uchar idata huanchong[5]={0,0,0,0,0};//顯示緩沖shijian,fenshu,xuanshou</p><p>  bit bdata kbz; ///anjiabniaoszhii</p><p&g

39、t;  void delay(uint z);</p><p>  void Timer();</p><p>  void disled(void);</p><p>  void dis();</p><p>  void init();</p><p>  uchar getkey();</p>&

40、lt;p>  void delay(uint z) //延時(shí)函數(shù)</p><p><b>  {</b></p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  {for(y=110;y>0;y--);}

41、</p><p><b>  }</b></p><p>  uchar getkey() //讀鍵值函數(shù)</p><p><b>  {</b></p><p>  uchar key;</p><p>  if((C8279&0x07)==0x00)</p

42、><p>  {kbz=0;} //無鍵按下,置標(biāo)志</p><p><b>  else</b></p><p><b>  { kbz=1;</b></p><p>  C8279=0x40; //讀FIFO RAM命令</p><p>  key=D8279

43、;</p><p>  key=(key&0x0f); //取鍵盤數(shù)據(jù)4?位</p><p>  return(key);</p><p><b>  } </b></p><p><b>  }</b></p><p>  void tim(void) int

44、errupt 1 using 1 //為定時(shí)中斷TR0</p><p><b>  {</b></p><p>  TH0=0x3c; //重新賦值</p><p><b>  TL0=0xb0;</b></p><p><b>  count++;</b></p&g

45、t;<p>  if(count==20) //20*50ms=1秒</p><p><b>  {</b></p><p><b>  count=0;</b></p><p>  second--; //秒減1</p><p>  if(second<=10&&

46、;m==1){beep=1;delay(500);beep=0;}</p><p><b>  }</b></p><p>  if(getkey()==0x0f){TR0=0;xuanshou=0;t=0;beep=1;score=0;second=29;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=

47、1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;m=1;n=1;}</p><p><b>  }</b></p><p>  void disled(void) //將緩沖區(qū)值顯示出來 </p><p>  { C8279=0x92;</p&

48、gt;<p>  for(i=0;i<5;i++)</p><p>  { xianshi=huanchong[i];</p><p>  D8279=ledseg[xianshi];}</p><p><b>  }</b></p><p>  //-----顯示處理-----</p>

49、<p>  void dis()</p><p>  { huanchong[4]=xuanshou;//shijian gewei</p><p>  huanchong[3]=score/10;//shijian shiwei</p><p>  huanchong[2]=score%10;//fenshi gewei</p><

50、;p>  huanchong[1]=second/10;//fenshu shiwei</p><p>  huanchong[0]=second%10;//xuanshouhao</p><p><b>  disled();</b></p><p><b>  }</b></p><p>

51、  void init() //初始化函數(shù)</p><p><b>  { t=0;</b></p><p><b>  beep=1;</b></p><p>  xuanshou=0;</p><p><b>  score=0;</b></p>&l

52、t;p>  second=29;</p><p>  score1=10;score2=10;score3=10;score4=10;score5=10;score6=10;score7=10;score8=10;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3

53、=1;l4=1;l5=1;l6=1;l7=1;l8=1;</p><p><b>  n=1;m=1;</b></p><p>  C8279=0xDC; //清除 LED 顯示</p><p><b>  delay(1);</b></p><p>  TMOD|=0x01;</p&

54、gt;<p>  TH0=0x3c; //初值55536,計(jì)數(shù)10000次,每次1US,總計(jì)10ms</p><p><b>  TL0=0xb0;</b></p><p>  IE=0x82; //這里是中斷優(yōu)先級控制EA=1(開總中斷),ET0=1(定時(shí)器0允許中斷),這里用定時(shí)器0來定時(shí)</p><p>  C8279=

55、0x02; //置8279工作方式////youduaua//shuru</p><p>  C8279=0x34; //置鍵盤掃描速率 </p><p><b>  PX1=1;</b></p><p><b>  PT0=1;</b></p><p><b>  

56、ET1=1;</b></p><p>  xianshi=0;</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  init();//初始化,</p><

57、;p><b>  while(1)</b></p><p>  { if(getkey()==0x0f)//查詢是否有犯規(guī)按鍵</p><p>  {TR0=0;xuanshou=0;t=0;beep=0;delay(200);beep=1;score=0;second=29;m=1;n=1; </p><p>  a1=1;a2=1

58、;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();</p><p>  } </p><p>  if(getkey()==0x01&&n==1) {xuanshou=1;sco

59、re=score1;dis();l1=0;beep=0;}</p><p>  else if(getkey()==0x02&&n==1) {xuanshou=2;score=score2;dis();l2=0;beep=0;}</p><p>  else if(getkey()==0x03&&n==1) {xuanshou=3;score=score

60、3;dis();l3=0;beep=0;}</p><p>  else if(getkey()==0x04&&n==1) {xuanshou=4;score=score4;dis();l4=0;beep=0;}</p><p>  else if(getkey()==0x05&&n==1) {xuanshou=5;score=score5;dis();

61、l5=0;beep=0;}</p><p>  else if(getkey()==0x06&&n==1) {xuanshou=6;score=score6;dis();l6=0;beep=0;}</p><p>  else if(getkey()==0x07&&n==1) {xuanshou=7;score=score7;dis();l7=0;bee

62、p=0;}</p><p>  else if(getkey()==0x08&&n==1) {xuanshou=8;score=score8;dis();l8=0;beep=0;}</p><p>  else if(getkey()==0x0e) {beep=0;delay(200);beep=1;TR0=1; m=0;n=0;}//若有開始鍵,則初始化&

63、lt;/p><p><b>  if(n==0)</b></p><p><b>  { </b></p><p>  if(m==0)dis();</p><p>  if(second==0) { t=0;</p><p>  beep=1;delay(500);beep

64、=0;//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1</p><p><b>  dis();</b></p><p>  if(getkey()==0x0f){TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;//

65、是否有復(fù)位鍵</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();}</p><p><b>  }</b></p><p>  if(m==0)//m等于零即

66、處于搶答狀態(tài),查詢選手鍵</p><p><b>  {</b></p><p>  if(getkey()==0x01) t=1;</p><p>  else if(getkey()==0x02) t=2;</p><p>  else if(getkey()==0x03) t=3;</p>

67、<p>  else if(getkey()==0x04) t=4;</p><p>  else if(getkey()==0x05) t=5;</p><p>  else if(getkey()==0x06) t=6;</p><p>  else if(getkey()==0x07) t=7;</p><p>  else

68、if(getkey()==0x08) t=8;</p><p>  else if(getkey()==0x0f){TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><

69、;p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();} </p><p><b>  }</b></p><p><b>  while(t)</b></p><p>  { if(getkey()==0x0f){xuanshou=0;TR0=0;i=0;t=0;be

70、ep=0;delay(200);beep=1;score=0;second=29;m=1;n=1;//</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis(); }</p><p>  if(m==0) //開

71、關(guān),保證程序只執(zhí)行一次</p><p><b>  {</b></p><p><b>  switch(t)</b></p><p><b>  {</b></p><p>  case 1:{TR0=0;xuanshou=1;second=0;beep=0;delay(50

72、0);beep=1;</p><p>  a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l1=0;second=89;TR0=1;break;}//跳出循環(huán)}</p><p>  case 2:{TR0=0;xuanshou=2;second=0;beep=0;delay(500);beep=1;</p><p>  a2

73、=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l2=0;second=89;TR0=1;break;}</p><p>  case 3:{TR0=0;xuanshou=3;second=0;beep=0;delay(500);beep=1;</p><p>  a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;l

74、3=0;second=89;TR0=1;break;}</p><p>  case 4:{TR0=0;xuanshou=4;second=0;beep=0;delay(500);beep=1;</p><p>  a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;l4=0;second=89;TR0=1;break;}</p><

75、;p>  case 5:{TR0=0;xuanshou=5;second=0;beep=0;delay(500);beep=1;</p><p>  a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;l5=0;second=89;TR0=1;break;}</p><p>  case 6:{TR0=0;xuanshou=6;second=0;

76、beep=0;delay(500);beep=1;</p><p>  a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;l6=0;second=89;TR0=1;break;}</p><p>  case 7:{TR0=0;xuanshou=7;second=0;beep=0;delay(500);beep=1;</p><p&

77、gt;  a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;l7=0;second=89;TR0=1;break;}</p><p>  case 8:{TR0=0;xuanshou=8;second=0;beep=0;delay(500);beep=1;</p><p>  a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7

78、=1;m=1;l8=0;second=89;TR0=1;break;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(a1==0) //選手1的分?jǐn)?shù)</p><p><b>  { dis();</b></p

79、><p>  if(second==0){//定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p>  if(getkey()==0x0f){TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>

80、;  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();</p><p><b>  } </b></p><p><b>  }</b></p><p>

81、  if(getkey()==0x0a) {beep=0;delay(100);beep=1;score1+=1;}</p><p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score1-=1;}</p><p>  score=score1;</p><p><b>  dis(); <

82、;/b></p><p><b>  }</b></p><p>  else if(a2==0)</p><p><b>  { dis();</b></p><p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中

83、斷,并使n等于1,禁止搶答</p><p>  if(getkey()==0x0f)//若此時(shí)再按下開始鍵,響鈴提示,定時(shí)30s,</p><p>  {TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1

84、;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();</p><p><b>  } </b></p><p><b>  }</b></p><p>  if(getkey()==0x0a) {beep=

85、0;delay(100);beep=1;score2+=1;}</p><p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score2-=1;}</p><p>  score=score2;</p><p>  dis(); </p><p><b&g

86、t;  }</b></p><p>  else if(a3==0)</p><p><b>  { dis();</b></p><p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p> 

87、 if(getkey()==0x0f)//若此時(shí)再按下開始鍵,響鈴提示,定時(shí)30s,</p><p>  {TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p&g

88、t;  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();</p><p><b>  } </b></p><p><b>  }</b></p><p>  if(getkey()==0x0a) {beep=0;delay(100);beep=1;score3+=1;}<

89、/p><p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score3-=1;}</p><p>  score=score3;</p><p>  dis(); </p><p><b>  } </b></p><p&g

90、t;  else if(a4==0)</p><p><b>  { dis();</b></p><p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p>  if(getkey()==0x0f)//若此時(shí)再按下開始鍵,響鈴提

91、示,定時(shí)30s,</p><p>  {TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;

92、l7=1;l8=1;dis();} </p><p><b>  }</b></p><p>  if(getkey()==0x0a) {beep=0;delay(100);beep=1;score4+=1;}</p><p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score4-

93、=1;}</p><p>  score=score4;</p><p>  dis(); </p><p><b>  }</b></p><p>  else if(a5==0)</p><p><b>  { dis();</b></p>

94、;<p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p>  if(getkey()==0x0f)//若此時(shí)再按下開始鍵,響鈴提示,定時(shí)30s,</p><p>  {TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1

95、;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();} </p><p><b>  }</b></p><

96、p>  if(getkey()==0x0a) {beep=0;delay(100);beep=1;score5+=1;}</p><p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score5-=1;}</p><p>  score=score5;</p><p>  dis();

97、 </p><p><b>  }</b></p><p>  else if(a6==0)</p><p><b>  { dis();</b></p><p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并

98、使n等于1,禁止搶答</p><p>  if(getkey()==0x0f)//若此時(shí)再按下開始鍵,響鈴提示,定時(shí)30s,</p><p>  {TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6

99、=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();} </p><p><b>  }</b></p><p>  if(getkey()==0x0a) {beep=0;delay(100);beep=1;score6+=1;}</p>&l

100、t;p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score6-=1;}</p><p>  score=score6;</p><p>  dis(); </p><p><b>  }</b></p><p>  else if

101、(a7==0)</p><p><b>  { dis();</b></p><p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p>  if(getkey()==0x0f)</p><p>  {xu

102、anshou=0;TR0=0;i=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();</p>&l

103、t;p><b>  }</b></p><p><b>  }</b></p><p>  if(getkey()==0x0a) {beep=0;delay(100);beep=1;score7+=1;}</p><p>  else if(getkey()==0x0b) {beep=0;delay(100);bee

104、p=1;score7-=1;}</p><p>  score=score7;</p><p>  dis(); </p><p><b>  } </b></p><p>  else if(a8==0)</p><p><b>  { dis();</b&

105、gt;</p><p>  if(second==0) {//30秒定時(shí)到</p><p>  TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p>  if(getkey()==0x0f){TR0=0;xuanshou=0;t=0;beep=0;delay(500);beep=1;score=0;second=29;m=1;n=1;</p&

106、gt;<p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis();}</p><p><b>  }</b></p><p>  if(getkey()==0x0a) {beep=0;d

107、elay(100);beep=1;score8+=1;}</p><p>  else if(getkey()==0x0b) {beep=0;delay(100);beep=1;score8-=1;}</p><p>  score=score8;</p><p>  dis(); </p><p><b> 

108、 }</b></p><p>  if(getkey()==0x0f){xuanshou=0;TR0=0;i=0;t=0;beep=0;delay(200);beep=1;score=0;second=29;m=1;n=1;//</p><p>  a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;</p><p>  l

109、1=1;l2=1;l3=1;l4=1;l5=1;l6=1;l7=1;l8=1;dis(); }</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b

110、></p><p><b>  六 課程設(shè)計(jì)總結(jié)</b></p><p>  單片機(jī)課程設(shè)計(jì)是一門很實(shí)用,很難的設(shè)計(jì)。這個(gè)設(shè)計(jì)用到了單片機(jī),電路等方面的知識(shí),通過這次課程設(shè)計(jì),使我對單片機(jī)及其附屬電路有了一定的了解,對課本上的知識(shí)有了近一步的掌握,也深刻明白了自己的不足。</p><p>  完成本次課程設(shè)計(jì)的過程,是一個(gè)從無到有的過程

111、,經(jīng)歷了興奮、自信、失落、奮發(fā)、所悟、完成幾個(gè)過程。剛做做課程設(shè)計(jì)時(shí),仔細(xì)閱讀設(shè)計(jì)的題目和要求,以為沒什么困難的,所用的知識(shí)書上都有??墒钱?dāng)我動(dòng)手開始做的時(shí)候,才發(fā)現(xiàn)其中的算法,設(shè)計(jì)是那么繁瑣。經(jīng)過一天的努力,毫無結(jié)果。失落的心情油然而生。于是,再到網(wǎng)上查找資料,在經(jīng)過借鑒很多類似的資料,文獻(xiàn)后,總算是有點(diǎn)眉目了。埋頭苦干的過程是痛苦的,尤其是在思考算法和程序框架時(shí),迷茫,煩躁,特別是當(dāng)苦思出來一個(gè)結(jié)果,又被自己推翻,心痛的無法言繪。在

112、痛苦中掙扎,建立,推翻,參考別人的思路,建立,再次在推翻,在這不斷循環(huán)中,終于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知領(lǐng)域”的困難。但當(dāng)課程設(shè)計(jì)完成時(shí),那感覺是甜蜜的,沒有耕耘,哪來得收獲的喜悅,不懂付出怎么能知道回報(bào)的快樂,一分耕耘一分收獲,有付出才會(huì)有回報(bào),就在這樣的痛與快樂的交換中,我學(xué)到了知識(shí), 學(xué)到了做人的道理。</p><p>  同時(shí)我也感覺到自己從課本上學(xué)到的理論知識(shí)和實(shí)踐仍有

113、很大的差距。最少很多元器件根本不知道有什么功效,在仿真儀器中是什么代碼。所以在此期間學(xué)會(huì)了怎么看書怎么看有用的信息。有的知識(shí),自己感覺已經(jīng)掌握得差不多了,但是實(shí)際操作起來就有問題出現(xiàn)了。我遇到了不少問題,花費(fèi)了很多的時(shí)間。這讓我重新反思我們的學(xué)習(xí),深刻領(lǐng)悟到我們這個(gè)專業(yè)動(dòng)手,實(shí)踐的重要性。理論不經(jīng)過實(shí)踐考驗(yàn),是沒法實(shí)施的,就像我們編的程序,很多方面考慮的都不夠,幾乎沒有涉及到實(shí)際應(yīng)用時(shí)的防范方法措施。</p><p&

114、gt;  這次的課程設(shè)計(jì),對我來說最大的收獲是:對設(shè)計(jì)大程序時(shí),思路一定要很清新,特別是這種循環(huán)掃描程序,一定要搞清楚本次循環(huán)掃描到某個(gè)鍵值后要設(shè)置一定的標(biāo)志,防止下次循環(huán)時(shí)重復(fù)掃描鍵盤,同時(shí)對8279鍵盤,顯示器,有了一定了解,同時(shí)讓我學(xué)會(huì)了怎樣在keil軟件中怎么使用C語言。</p><p><b>  七 參考文獻(xiàn)</b></p><p>  王瓊 單片機(jī)原

115、理及應(yīng)用 合肥工業(yè)大學(xué)出版社 08年4月</p><p>  王瓊 單片機(jī)原理及應(yīng)用實(shí)驗(yàn)教程 合肥工業(yè)大學(xué)出版社 05年1月</p><p>  陳濤 單片機(jī)及C51程序設(shè)計(jì) 機(jī)械工業(yè)出版社 2011年</p><p>  肖看,李群芳 單片機(jī)原理、接口及應(yīng)用:嵌入式系統(tǒng)技術(shù)基礎(chǔ) </p><p>  清華大學(xué)出版社

溫馨提示

  • 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

提交評論