版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 一 緒論</b></p><p> 《單片機(jī)原理及應(yīng)用技術(shù)》是一門技術(shù)性,應(yīng)用性、實踐性很強(qiáng)的學(xué)科。課程設(shè)計是學(xué)好本門課程的又一重要實踐性教學(xué)環(huán)節(jié),課程設(shè)計的目的和任務(wù)就是配合單片機(jī)的教學(xué)和平時實驗,以達(dá)到鞏固消化課程的內(nèi)容,進(jìn)一步加強(qiáng)綜合應(yīng)用能力及單片機(jī)應(yīng)用系統(tǒng)開發(fā)和設(shè)計能力的訓(xùn)練,啟發(fā)創(chuàng)新思維,使之具有獨立單片機(jī)產(chǎn)品和科研的基本技能,是以培養(yǎng)學(xué)生綜合運(yùn)
2、用所學(xué)知識的過程,是知識轉(zhuǎn)化為能力和能力轉(zhuǎn)化為工程素質(zhì)的重要階段。在實際生活中有好多地方都用到了單片機(jī),因此學(xué)習(xí)好這門課程有著十分重要的意義。</p><p> 隨著科學(xué)技術(shù)的不斷發(fā)展,促使人們學(xué)科學(xué)、學(xué)技術(shù)、學(xué)知識的手段多種多樣。搶答器作為一種工具,已廣泛應(yīng)用于各種智力和知識競賽場合。搶答器是為智力競賽參賽者答題時進(jìn)行搶答而設(shè)計的一種優(yōu)先判決器電路,廣泛應(yīng)用于各種知識競賽、文娛活動等場合。能夠?qū)崿F(xiàn)搶答器功能的
3、方式有多種,可以采用前期的模擬電路、數(shù)字電路或模擬與數(shù)字電路相結(jié)合的方式,但這種方式制作過程復(fù)雜,而且準(zhǔn)確性與可靠性不高,成品面積大,安裝、維護(hù)困難。本節(jié)介紹一種利用51單片機(jī)作為核心部件進(jìn)行邏輯控制及信號產(chǎn)生的八路搶答器。近年來,隨著單片機(jī)檔次的不斷提高,功能的不斷完善,其應(yīng)用日趨成熟、應(yīng)用領(lǐng)域日趨擴(kuò)大,特別是工業(yè)測控、尖端武器和日用家電等領(lǐng)域更是因為有了單片機(jī)而生輝增色。單片機(jī)應(yīng)用技術(shù)已成為一項新的工程應(yīng)用技術(shù)。本次課程設(shè)計我們做的
4、是八路搶答器,我們采用AT89C51單片機(jī)實現(xiàn)搶答功能,性能更穩(wěn)定,更易操作調(diào)試。</p><p> 目前大多數(shù)搶答器均使用單片機(jī)及外圍接口實現(xiàn),基于單片機(jī)的智力競賽搶答器系統(tǒng)框圖如下圖所示。</p><p><b> 1.2設(shè)計目的</b></p><p> 通過設(shè)計學(xué)習(xí)單片機(jī)最小系統(tǒng)的基本設(shè)計方法,掌握單片機(jī)應(yīng)用系統(tǒng)的開發(fā)調(diào)試過程。&
5、lt;/p><p> ?。?)學(xué)習(xí)單片機(jī)開發(fā)工具功能、特點和使用方法。</p><p> (2)學(xué)會單片機(jī)控制系統(tǒng)程序的編制和編制和調(diào)試方法。</p><p> (3)設(shè)計單片機(jī)搶答器硬件電路,繪制出電路原理圖。</p><p> ?。?)編制并調(diào)試出鍵盤掃描程序和顯示驅(qū)動程序。</p><p> (5)掌握單片機(jī)定
6、時器的基本用法,編制出定時器的中斷程序。</p><p> 二 設(shè)計任務(wù)和要求</p><p><b> 2.1基本要求</b></p><p> 智力競賽搶答器的設(shè)計</p><p> 設(shè)計一個供8 名選手參加比賽的智力競賽搶答器,要求:</p><p> (1)每名選手有一個搶答
7、按鈕,按鈕的編號與選手的編號相對應(yīng);</p><p> ?。?)搶答器具有第一個搶答信號的鑒別和數(shù)據(jù)鎖存、顯示的功能。搶答開始后,若有選手按搶答按鈕,則該選手指示燈亮,并在數(shù)碼管上顯示相應(yīng)編號,揚(yáng)聲器發(fā)出音響提示。同時,電路應(yīng)具備自鎖功能,禁止其他選手再搶答,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清0 為止;</p><p> (3)搶答器具有計分、顯示功能。預(yù)置分?jǐn)?shù)可由主持人設(shè)定,并
8、顯示在每名選手的計</p><p> 分牌上,選手答對加10 分,答錯扣10 分;</p><p> ?。?)搶答器具有定時搶答的功能。一次搶答的時間由主持人設(shè)定,在主持人發(fā)出搶答</p><p> 指令后,定時器立即進(jìn)行減計時,并在顯示器上顯示,同時揚(yáng)聲器發(fā)出短暫聲響,</p><p> 聲響時間持續(xù)0.5s 左右;</p>
9、;<p> ?。?)選手在設(shè)定的時間內(nèi)進(jìn)行搶答,搶答有效,定時器停止工作,顯示器顯示選手編</p><p> 號和搶答時刻的時間,并保持到主持人將系統(tǒng)清0 為止;</p><p> ?。?)如果定時搶答的時間已到,卻沒有選手搶答時,本次搶答無效,系統(tǒng)進(jìn)行短暫的</p><p> 報警,并禁止選手超時后搶答,定時顯示器上顯示00;</p>
10、<p> (7)搶答器具有犯規(guī)提示功能。對提前搶答和超時搶答的選手,揚(yáng)聲器發(fā)出報警信號,</p><p> 并在顯示器上顯示其編號。</p><p><b> 三 設(shè)計方案</b></p><p><b> 3.1方案論證</b></p><p> 智力競賽搶答器用單片機(jī)
11、來設(shè)計制作完成,由于其功能的實現(xiàn)主要通過軟件編程來完成, 采用單片機(jī)AT89C51,它是低功耗、高性能的CMOS型8位單片機(jī)。片內(nèi)帶有4KB的Flash存儲器,且允許在系統(tǒng)內(nèi)改寫或用編程器編程。該智力競賽搶答器的準(zhǔn)確度很高,其誤差主要由晶振自身的誤差所造成。</p><p> 3.2硬件設(shè)計方案 </p><p> 設(shè)計根據(jù)課程設(shè)計要求可以大概構(gòu)思出硬件電路圖:發(fā)光二極管與單片機(jī)的 P
12、1.0——P1.7 口相連接;P3.2 口與蜂鳴器相連接;</p><p> 用以 AT89C51 為核心的單片機(jī)控制方案,通過相應(yīng)的程序,并通過按鍵來進(jìn)行電平 識別,再由單片機(jī)輸出相應(yīng)的程序,并將相應(yīng)數(shù)值通過數(shù)碼來顯示。用單片機(jī)來制作的 搶答器,硬件電路主要是用8279鍵盤顯示接口電路,極大地減輕了單片機(jī)的負(fù)荷。</p><p> 3.3 軟件設(shè)計方案</p><
13、p> 1)鍵盤掃描及鎖存功能的實現(xiàn) </p><p> 方案一: 利用外部中斷法,將鍵盤接至外部中斷P3.2或P3.1,當(dāng)有鍵盤按下后,進(jìn)入中斷程序,用軟件編寫進(jìn)行相關(guān)操作來控制各個按鍵怎樣按下。對于這種方法,當(dāng)要鎖存電路時,在中斷程序中關(guān)中斷即可實現(xiàn)鎖存功能。 </p><p> 方案二:采用讀鍵值函數(shù)掃描法,建一個讀鍵值函數(shù),每當(dāng)要查詢鍵盤時調(diào)用此函數(shù),讀取一次鍵值,由于
14、程序是循環(huán)執(zhí)行的,這樣即使本次調(diào)用此函數(shù)沒有讀取到鍵值,但循環(huán)執(zhí)行,調(diào)用讀鍵值函數(shù)很快,相當(dāng)于在掃描鍵盤。對于此種方案,當(dāng)讀取以為選手鍵值后,設(shè)定一個標(biāo)志值,使在下次循環(huán)程序執(zhí)行到此處時,先查詢此標(biāo)志是否已被設(shè)置,一旦設(shè)置,則跳過此段讀取鍵值函數(shù),直接進(jìn)行下一步處理。實現(xiàn)了鎖存電路的功能。</p><p> 顯然,方案一雖然看上去思路明了,但由于根據(jù)按下鍵值不同,相應(yīng)處理不一樣,所以中斷執(zhí)行程序會很復(fù)雜,甚是麻
15、煩。而方案二只需要根據(jù)讀鍵值函數(shù)返回值不同,直接在主程序中用選擇語句來分路執(zhí)行即可,因此選擇方案二。</p><p><b> 定時功能的實現(xiàn)</b></p><p> 采用定時器T0中斷實現(xiàn)定時功能,設(shè)初值為50毫秒。循環(huán)20次就減一秒,知道秒數(shù)為零后執(zhí)行相應(yīng)報警操作。</p><p><b> 數(shù)碼管的顯示 </b&g
16、t;</p><p> 方案一:采用靜態(tài)顯示,是指當(dāng)數(shù)碼管顯示某一字符時,七段數(shù)碼管的對應(yīng)段的發(fā) 光二極管被選中,在這種顯示方式下,每段 LED 都對應(yīng)一個單片機(jī)口線。 </p><p> 方案二:采用動態(tài)顯示,對于多位數(shù)碼管顯示時,每一位數(shù)碼管輪流顯示,當(dāng)顯示間隔時間較短時人眼就分辨不出是動態(tài)顯示,而是每一位都是一直都在顯示。 </p><p> 比較二者,
17、靜態(tài)顯示主要的優(yōu)點是顯示穩(wěn)定,在發(fā)光二極管導(dǎo)通電流一定的情況下 顯示器的亮度大,系統(tǒng)運(yùn)行過程中,在需要更新顯示內(nèi)容時,CPU 才去執(zhí)行顯示更新子 程序,這樣既節(jié)約了 CPU 的時間,又提高了 CPU 的工作效率。其不足之處是在需要用于 顯示的數(shù)碼管較多時占用硬件資源較多,每個 LED 數(shù)碼管需要獨占 8 條輸出線。隨著顯示器位數(shù)的增加,需要的 I/O 口線也將增加。動態(tài)顯示器的優(yōu)點是節(jié)省硬件資源,成本 較低,但是要保證顯示器正常顯示,C
18、PU 必需每隔一段時間執(zhí)行一次顯示子程序,占用 CPU 大量時間,降低了 CPU 的工作效率,同時顯示亮度較靜態(tài)顯示器低。 通過以上分析,結(jié)合本課題只提供八位數(shù)碼管,所以采用方案二。</p><p> 4)搶答信號指示燈 </p><p> 對于這八位 LED 燈的閃爍可以通過軟件程序的編寫, 當(dāng)P1管腳送出電平高低控制其滅亮。</p><p><b>
19、; 3.2設(shè)計原理</b></p><p> 搶答器的工作原理是采用單片機(jī)最小系統(tǒng),用程序查詢方式采用動態(tài)顯示組號。主持人按下開始搶答鍵才可以搶答。主持人沒有按下開始搶答按紐,有人搶答則搶答違規(guī),報警并顯示組號,主持人按下開始搶答開關(guān)重新?lián)尨?。主持人按下開始搶答按紐后,數(shù)碼管30秒倒計時搶答,30秒內(nèi)有人搶答,則蜂鳴器響聲提示并顯示他的組號,并且 開始60秒倒計時(60秒內(nèi)必須回答完問題),最后五
20、秒倒計時警報。單片機(jī)最小系統(tǒng)、搶答按鍵模塊(四位并行數(shù)碼顯示)、顯示模塊、顯示驅(qū)動模塊、搶答開關(guān)模塊、蜂鳴器音頻輸出模塊。</p><p> 四硬件系統(tǒng)說明與電路原理圖</p><p> 4.1控制系統(tǒng)及所需元件 </p><p> 控制系統(tǒng)主要由單片機(jī)應(yīng)用電路、存儲器接口電路、鍵盤顯示接口電路組成。其中單片機(jī)AT89C51和8279是系統(tǒng)工作的核心,它們主要
21、負(fù)責(zé)控制各個部分協(xié)調(diào)工作和電路的主要功能。</p><p> 1.AT89C51單片機(jī)由微處理器,存儲器,I/O口以及特殊功能寄存器SFR等部分構(gòu)成。其存儲器在物理上設(shè)計成程序存儲器和數(shù)據(jù)存儲器兩個獨立的空間,片內(nèi)程序存儲器的容量為4KB,片內(nèi)數(shù)據(jù)存儲器為128個字節(jié)。89C51單片機(jī)有4個8位的并行I/O口:P0口,P1口,P2口和P3口。各個接口均由接口鎖存器,輸出驅(qū)動器,和輸入緩沖器組成。P1口是唯一的單
22、功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口除了具有數(shù)據(jù)輸入/輸出功能外,每條接口還具有不同的第二功能,如P3.0是串行輸入口線,P3.1口是串行輸出口線。在需要外部程序存儲器和數(shù)據(jù)存儲器擴(kuò)展時,P0可作為分時復(fù)用的低8位地址/數(shù)據(jù)總線,P2口可作為高8位的地址總線。P3口也可作為AT89C51的一些特殊功能口,同時為閃爍編程和編程校驗接收一些控制信號。</p><p> 本次實驗中P1.0-P1.
23、7同于控制八位選手對應(yīng)的指示燈亮或滅。P3.2用蜂鳴器的控制口 。 </p><p> 2. 8279可按其功能分為:鍵盤功能塊、顯示功能塊、控制功能塊;</p><p> 與CPU接口功能塊控制功能塊包括控制和定時寄存器,定時和控制,掃描計數(shù)器三部分,它主要用來控制鍵盤和顯示功能塊工作. </p><p> 控制和定時寄存器:用于存貯來
24、自CPU的編程命令,CPU對8279編程以確定鍵盤與顯示器工作方式和其它工作條件時,先把命令控制數(shù)據(jù)放到數(shù)據(jù)總線上,然后使A0=1,WR=0CS=0,并在WR 上升沿把命令鍵存在控制和定時寄存器中,并經(jīng)譯碼,建立適當(dāng)?shù)墓δ?</p><p> 定時和控制:它含基本的定時計數(shù)器,第一個計數(shù)器是一個分頻系數(shù)為2-31的前置定時器, 分頻系數(shù)可由程序預(yù)置,使內(nèi)部頻率為100KHz,從而能給出5.1ms鍵盤掃描時間和1
25、0.3ms反跳時間,其它計數(shù)器將此基本頻率分頻后,提供適當(dāng)?shù)陌存I掃描.行掃描.</p><p> 鍵盤陣列掃描.以及顯示器掃描次數(shù).掃描計數(shù)器:掃描計數(shù)器有兩種工作方式,在編碼工作方式時,計數(shù)器提供一種二進(jìn)制計數(shù), 通過管腳SL0-SL3輸出后經(jīng)外部譯碼才能提供給鍵盤和顯示器的掃描作用,在譯碼工作方式時,掃描計數(shù)器對最低二位進(jìn)行譯碼,SL0-SL3輸出4選1的譯碼信號,作為顯示器和鍵盤的譯碼掃描.</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的時鐘脈沖使89C51工作,在此次課程設(shè)計電路中當(dāng)一個問題結(jié)束主持人后按下復(fù)位開關(guān)后進(jìn)行下一題的準(zhǔn)備。</p><p><b> 6.系統(tǒng)電路原理圖</b></p><p><b> 五 軟件系統(tǒng)設(shè)計</b></p>&l
28、t;p> 智力競賽搶答器要求有計時記憶功能,一次時間設(shè)置完, 復(fù)位后不需重新進(jìn)行時間設(shè)定,通過鍵盤掃描輸出按鍵信息,再通過單片機(jī)將它轉(zhuǎn)換成能在七段數(shù)碼管上顯示字型碼.</p><p> 當(dāng)搶答完畢時,會在數(shù)碼管上顯示搶答者數(shù)字號碼提示以表示搶答成功.同時顯示其分?jǐn)?shù),分?jǐn)?shù)的加減可由裁判手動進(jìn)行. 采用2*8式鍵盤,可實現(xiàn)8路搶答. 在顯示時使用的是七段數(shù)碼管顯示在本設(shè)計中根據(jù)實際情況采用的是動態(tài)顯示方法.
29、 并通過查表法 將其在數(shù)碼管上顯示出來,硬件去抖動,如果"開始鍵"按下就向下執(zhí)行,否者跳到開始。采用倒計時程序,使其具有倒計時功能?;卮鸬褂嫊r90秒。搶答時間30秒。采用發(fā)聲警報起到報警作用。</p><p> 1、如果想調(diào)節(jié)選手分?jǐn)?shù),則按"A(加分)"鍵或"B(減分)"鍵進(jìn)入調(diào)節(jié)狀態(tài),此時會顯示當(dāng)前選手的分?jǐn)?shù)值,同時LED上同步顯示剩余的時間。<
30、;/p><p> 2.主持人按"搶答開始"鍵,會有提示音,并立刻進(jìn)入搶答倒計時(預(yù)設(shè)30s搶答時間),如有選手搶答,會有提示音,并會顯示其號數(shù)與分?jǐn)?shù)并立刻進(jìn)入回答倒計時(預(yù)設(shè)90s搶答時間),此時封鎖其他選手按鍵,即不進(jìn)行搶答查詢,所以只有第一個按搶答的選手有效。倒數(shù)時間到小于10s會每秒響一下提示音。</p><p> 3.如倒計時期間,主持人想停止倒計時可以隨時按&
31、quot;F(復(fù)位)"鍵,系統(tǒng)會自動進(jìn)入準(zhǔn)備狀態(tài),等待主持人按"搶答開始"進(jìn)入下次搶答計時。 </p><p> 4、如果主持人未按"搶答開始"鍵,而有人按了搶答按鍵,犯規(guī)搶答,LED上顯示犯規(guī)選手編號,對應(yīng)犯規(guī)選手面前的燈會亮,直到按下"停止" 鍵為止。</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個發(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ù)</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 //為定時中斷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,計數(shù)10000次,每次1US,總計10ms</p><p><b> TL0=0xb0;</b></p><p> IE=0x82; //這里是中斷優(yōu)先級控制EA=1(開總中斷),ET0=1(定時器0允許中斷),這里用定時器0來定時</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秒定時到</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){//定時到</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秒定時到</p><p> TR0=0;n=1;//關(guān)中
83、斷,并使n等于1,禁止搶答</p><p> if(getkey()==0x0f)//若此時再按下開始鍵,響鈴提示,定時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秒定時到</p><p> TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p>
87、 if(getkey()==0x0f)//若此時再按下開始鍵,響鈴提示,定時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秒定時到</p><p> TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p> if(getkey()==0x0f)//若此時再按下開始鍵,響鈴提
91、示,定時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秒定時到</p><p> TR0=0;n=1;//關(guān)中斷,并使n等于1,禁止搶答</p><p> if(getkey()==0x0f)//若此時再按下開始鍵,響鈴提示,定時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秒定時到</p><p> TR0=0;n=1;//關(guān)中斷,并
98、使n等于1,禁止搶答</p><p> if(getkey()==0x0f)//若此時再按下開始鍵,響鈴提示,定時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秒定時到</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秒定時到</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è)計總結(jié)</b></p><p> 單片機(jī)課程設(shè)計是一門很實用,很難的設(shè)計。這個設(shè)計用到了單片機(jī),電路等方面的知識,通過這次課程設(shè)計,使我對單片機(jī)及其附屬電路有了一定的了解,對課本上的知識有了近一步的掌握,也深刻明白了自己的不足。</p><p> 完成本次課程設(shè)計的過程,是一個從無到有的過程
111、,經(jīng)歷了興奮、自信、失落、奮發(fā)、所悟、完成幾個過程。剛做做課程設(shè)計時,仔細(xì)閱讀設(shè)計的題目和要求,以為沒什么困難的,所用的知識書上都有。可是當(dāng)我動手開始做的時候,才發(fā)現(xiàn)其中的算法,設(shè)計是那么繁瑣。經(jīng)過一天的努力,毫無結(jié)果。失落的心情油然而生。于是,再到網(wǎng)上查找資料,在經(jīng)過借鑒很多類似的資料,文獻(xiàn)后,總算是有點眉目了。埋頭苦干的過程是痛苦的,尤其是在思考算法和程序框架時,迷茫,煩躁,特別是當(dāng)苦思出來一個結(jié)果,又被自己推翻,心痛的無法言繪。在
112、痛苦中掙扎,建立,推翻,參考別人的思路,建立,再次在推翻,在這不斷循環(huán)中,終于最后完善了程序。其中的煎熬是很痛苦的,深刻明白攻克自己“未知領(lǐng)域”的困難。但當(dāng)課程設(shè)計完成時,那感覺是甜蜜的,沒有耕耘,哪來得收獲的喜悅,不懂付出怎么能知道回報的快樂,一分耕耘一分收獲,有付出才會有回報,就在這樣的痛與快樂的交換中,我學(xué)到了知識, 學(xué)到了做人的道理。</p><p> 同時我也感覺到自己從課本上學(xué)到的理論知識和實踐仍有
113、很大的差距。最少很多元器件根本不知道有什么功效,在仿真儀器中是什么代碼。所以在此期間學(xué)會了怎么看書怎么看有用的信息。有的知識,自己感覺已經(jīng)掌握得差不多了,但是實際操作起來就有問題出現(xiàn)了。我遇到了不少問題,花費了很多的時間。這讓我重新反思我們的學(xué)習(xí),深刻領(lǐng)悟到我們這個專業(yè)動手,實踐的重要性。理論不經(jīng)過實踐考驗,是沒法實施的,就像我們編的程序,很多方面考慮的都不夠,幾乎沒有涉及到實際應(yīng)用時的防范方法措施。</p><p&
114、gt; 這次的課程設(shè)計,對我來說最大的收獲是:對設(shè)計大程序時,思路一定要很清新,特別是這種循環(huán)掃描程序,一定要搞清楚本次循環(huán)掃描到某個鍵值后要設(shè)置一定的標(biāo)志,防止下次循環(huán)時重復(fù)掃描鍵盤,同時對8279鍵盤,顯示器,有了一定了解,同時讓我學(xué)會了怎樣在keil軟件中怎么使用C語言。</p><p><b> 七 參考文獻(xiàn)</b></p><p> 王瓊 單片機(jī)原
115、理及應(yīng)用 合肥工業(yè)大學(xué)出版社 08年4月</p><p> 王瓊 單片機(jī)原理及應(yīng)用實驗教程 合肥工業(yè)大學(xué)出版社 05年1月</p><p> 陳濤 單片機(jī)及C51程序設(shè)計 機(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)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 搶答器課程設(shè)計---八路智力競賽搶答器的設(shè)計
- 課程設(shè)計報告---八路智力競賽搶答器
- 課程設(shè)計---八路智力競賽搶答器的設(shè)計
- 微機(jī)原理課程設(shè)計---八路智力競賽搶答器
- 單片機(jī)課程設(shè)計---單片機(jī)智力競賽搶答器設(shè)計
- 單片機(jī)八路搶答器課程設(shè)計
- 單片機(jī)課程設(shè)計---八路搶答器
- 單片機(jī)八路搶答器課程設(shè)計
- 課程設(shè)計---單片機(jī)八路搶答器設(shè)計
- 單片機(jī)課程設(shè)計八路搶答器設(shè)計
- 單片機(jī)課程設(shè)計報告--八路搶答器
- 單片機(jī)課程設(shè)計--8051系列單片機(jī)控制的八路智力搶答器設(shè)計
- 課程設(shè)計----8路智力競賽搶答器
- 單片機(jī)八路搶答器)
- 單片機(jī)課程設(shè)計---基于51單片機(jī)的八路競賽搶答器的設(shè)計
- 單片機(jī)課設(shè)-----智力競賽搶答器
- 基于單片機(jī)的八路智能搶答器課程設(shè)計
- 基于單片機(jī)的八路智能搶答器課程設(shè)計
- 智力競賽搶答器課程設(shè)計
- 課程設(shè)計---智力競賽搶答器
評論
0/150
提交評論