基于單片機(jī)的搶答器設(shè)計(jì)與仿真(c語言)_第1頁
基于單片機(jī)的搶答器設(shè)計(jì)與仿真(c語言)_第2頁
基于單片機(jī)的搶答器設(shè)計(jì)與仿真(c語言)_第3頁
基于單片機(jī)的搶答器設(shè)計(jì)與仿真(c語言)_第4頁
基于單片機(jī)的搶答器設(shè)計(jì)與仿真(c語言)_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)報(bào)告論文題目基于單片機(jī)的多路搶答器的設(shè)計(jì)作者姓名 龍?chǎng)沃笇?dǎo)教師楊(曉輝)老師所在院系信息工程學(xué)院專業(yè)名稱電氣卓越完成時(shí)間2014年6月30日 目 錄1電路原理圖的設(shè)計(jì)11.1 電路組成框圖11.2 電路原理圖22電路硬件設(shè)計(jì)22.1單片機(jī)最小系統(tǒng)52.2按鍵電路62.3顯示電路72.4報(bào)警電路83系統(tǒng)軟件的設(shè)計(jì)93.1編譯軟件Keil C93.2仿真軟件Proteus104調(diào)試及故障分析114.1程序調(diào)試115總結(jié)12參考文獻(xiàn)14附錄一1524基于單片機(jī)的多路智能搶答器的設(shè)計(jì)1電路原理圖的設(shè)計(jì)根據(jù)設(shè)計(jì)功能的要求,電路應(yīng)該包括控制電路,按鍵電路,以及用來顯示裁決結(jié)果的顯示電路。除了用數(shù)碼

2、管顯示目前的動(dòng)作情形,同時(shí)也需要用聲音提醒或者警告操作人員,因此也在電路設(shè)計(jì)時(shí)加入了報(bào)警電路。1.1 電路組成框圖搶答器電路總體設(shè)計(jì)方框圖如圖1所示: 按鍵電路控制電路顯示電路報(bào)警電路圖1 搶答器總體設(shè)計(jì)方框圖1.2 電路原理圖搶答器電路原理圖如圖2所示,控制電路以單片機(jī)AT89C51為核心,按鍵電路采用矩陣式鍵盤的接法,顯示電路采共陰極數(shù)碼管動(dòng)態(tài)顯示,報(bào)警采用蜂鳴器報(bào)警電路。圖2 搶答器電路設(shè)計(jì)原理圖2電路硬件設(shè)計(jì)電路硬件包括:?jiǎn)纹瑱C(jī)最小系統(tǒng)(即控制電路)、按鍵電路、顯示電路、報(bào)警電路。2.1單片機(jī)最小系統(tǒng)(1)系統(tǒng)結(jié)構(gòu)總線型單片機(jī)非總線應(yīng)用的最小系統(tǒng)示意圖如圖3所示,只有單片機(jī)和時(shí)鐘電路、

3、復(fù)位電路構(gòu)成的最簡(jiǎn)單電路,并行總線不用于外圍擴(kuò)展,可作為應(yīng)用系統(tǒng)的I/O口使用。圖3 總線型單片機(jī)非總線應(yīng)用的最小系統(tǒng)(2)系統(tǒng)特點(diǎn)有大量可使用的I/O口;沒有并行擴(kuò)展,應(yīng)用系統(tǒng)結(jié)構(gòu)簡(jiǎn)單;外圍器件只能通過UART口的串行移位方式或虛擬串行擴(kuò)展總線進(jìn)行擴(kuò)展。(3)AT89C51單片機(jī)微控制器選用ATMAL公司生產(chǎn)的AT89C51,該芯片貨源充足,并且價(jià)格也比較便宜。如表1所示。表1 器件選型方案的詳細(xì)清單器件名稱規(guī)格型號(hào)數(shù)量微處理器AT89C511芯片74LS04174HC301電阻3WTT10K8電容20PF3晶振12MHZ1按鈕117段數(shù)碼管7SEG-MPX4-CA4揚(yáng)聲器1AT89C51功

4、能及簡(jiǎn)介AT89C51單片機(jī)是ATMAL公司89系列單片機(jī)的一種8位Flash單片機(jī)。它最大特點(diǎn)是片內(nèi)含有Flash存儲(chǔ)器,用途十分廣泛,特別是在生產(chǎn)便攜式商品,手提式儀器等方面,有著十分廣泛的應(yīng)用6。AT89C51單片機(jī)內(nèi)部主要有以下部件:8031CPU、振蕩電路、總線控制部件、中斷控制部件、片內(nèi)Flash存儲(chǔ)器、片內(nèi)RAM、并行I/O接口、定時(shí)器和串行I/O接口AT89C51是89系列單片機(jī)的標(biāo)準(zhǔn)型,它是與MSC-51系列單片機(jī)兼容的。在內(nèi)部含有4KB或8KB可重復(fù)編程的Flash存儲(chǔ)器,可進(jìn)行1000次擦寫操作。全靜態(tài)工作為0-24MHZ,有3級(jí)程序鎖存器,內(nèi)部含有128-256字節(jié)的R

5、AM,有32條可編程I/O口線,2-3個(gè)16位定時(shí)/計(jì)數(shù)器,6-8個(gè)中斷源,通用的串行接口,低電壓空閑及電源下降方式。AT89C51單片機(jī)內(nèi)部由CPU、4KB的FPEROM ,128B的RAM,兩個(gè)16位的定時(shí)/計(jì)數(shù)器T0和T1,4個(gè)8位的I/O端P0、P1、P2、P3等組成。單片微機(jī)內(nèi)部最核心的部分是CPU。CPU主要功能是產(chǎn)生各種控制信號(hào),控制存儲(chǔ)器、輸入/輸出端口的數(shù)據(jù)傳輸、數(shù)據(jù)的算術(shù)運(yùn)算、邏輯運(yùn)算以及位操作處理等,CPU按其功能可分為運(yùn)算器和控制器兩部分??刂破饔沙绦蛴?jì)數(shù)器PC、指令儲(chǔ)存器、指令譯碼器、實(shí)時(shí)控制與條件轉(zhuǎn)移邏輯電路等組成。它的功能是對(duì)來自存儲(chǔ)器中的指令進(jìn)行譯碼,通過實(shí)時(shí)控

6、制電路,在規(guī)定的時(shí)刻發(fā)出各種操作所需的內(nèi)部和外部的控制信號(hào),使各部分協(xié)調(diào)工作,完成指令所規(guī)定的操作。運(yùn)算器由算術(shù)邏輯器部件ALU、累加器ACC、暫存器、程序狀態(tài)字寄存器PSW,BCD碼運(yùn)算調(diào)整電路等組成。外部定時(shí)元件復(fù)位中斷電源系統(tǒng)時(shí)鐘ROMCPU定時(shí)/計(jì)數(shù)器串行I/O口并行I/O口RAM圖2-3 AT89C51單片機(jī)的內(nèi)部結(jié)構(gòu)圖為了提高數(shù)據(jù)處理和位操作功能,片內(nèi)增加了一個(gè)通用寄存器B和一些專用寄存器,還增加了位處理邏輯電路的功能。其內(nèi)部結(jié)構(gòu)如圖3所示。AT89C51的主要性能包括:AT89C51與MCS51控制器系列產(chǎn)品兼容,片內(nèi)有4K可在線重復(fù)編程閃速電擦除存儲(chǔ)器(Flash Memory

7、),存儲(chǔ)器可循環(huán)寫入/擦除1000次;存儲(chǔ)器數(shù)據(jù)保存時(shí)間可達(dá)10年;工作電壓范圍寬:Vcc可由2.7V到6V;全靜態(tài)工作可由0Hz到16MHz;程序存儲(chǔ)器具有3級(jí)鎖存保護(hù);128*8位內(nèi)部RAM;32條可編程I/O線;兩個(gè)16位定時(shí)器/計(jì)數(shù)器;中斷結(jié)構(gòu)具有5個(gè)中斷源和2個(gè)中斷優(yōu)先級(jí);可編程全雙工串行通信;空閑狀態(tài)維持低功耗和掉電狀態(tài)保存存儲(chǔ)內(nèi)容。(4)時(shí)鐘電路時(shí)鐘電路用于產(chǎn)生單片機(jī)工作所需要的時(shí)鐘信號(hào)。設(shè)計(jì)中采用了比較典型的內(nèi)部時(shí)鐘方式,如圖6所示:其工作原理是:片內(nèi)高增益反向放大器XTAL1、XTAL2外接作為反饋元件的晶體(呈感性)與電容組成的并聯(lián)諧振回路構(gòu)成一個(gè)自激振蕩器向內(nèi)部時(shí)鐘電路提

8、供振蕩時(shí)鐘。振蕩器的頻率主要取決于晶體的振蕩頻率,一般晶體可以在1.2-12MHz之間任選。電容的大小影響振蕩器電路的穩(wěn)定性和快速性,其值有微調(diào)作用,通常取30pF左右。在設(shè)計(jì)電路板時(shí),晶振和電容應(yīng)盡可能的靠近芯片,以減小分布電容,保證振蕩器振蕩的穩(wěn)定性7。XTAL2XTAL1晶振C2C1單 片 機(jī)圖6 單片機(jī)外接晶體的接法(5)復(fù)位電路復(fù)位是單片機(jī)的初始化操作,其主要功能是將程序計(jì)數(shù)器PC初始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序。復(fù)位操作不影響片內(nèi)RAM的內(nèi)容,但是對(duì)SFR中的一些寄存器有影響。圖7 各種復(fù)位電路單片機(jī)的復(fù)位是靠外部電路復(fù)位的。其復(fù)位方式有上電復(fù)位和按鍵手動(dòng)復(fù)

9、位兩種。復(fù)位電路中的電阻、電容數(shù)值的設(shè)置,是為了保證在RST管腳處至少保持兩個(gè)機(jī)器周期(24個(gè)振蕩周期)的高電平而完成復(fù)位過程的,也就是在斯密特觸發(fā)器的輸入端維持在最低閥值電壓以上足夠長(zhǎng)時(shí)間,使斯密特觸發(fā)器產(chǎn)生一個(gè)正脈沖。電阻值通常為1K,電容值通常為22uF。圖7為幾種常見的復(fù)位電路接法8。 2.2按鍵電路(1)鍵盤接口和鍵輸入軟件中應(yīng)解決的幾個(gè)問題消除抖動(dòng)按鍵的合斷過程存在一個(gè)抖動(dòng)的暫態(tài)過程,這種抖動(dòng)的暫態(tài)過程大約經(jīng)過5-10ms的時(shí)間,人的肉眼是察覺不到的,但對(duì)于高速的CPU是有反應(yīng)的,可能產(chǎn)生誤處理。為了保證鍵動(dòng)作一次,僅作一次處理,必須采取措施以消除抖動(dòng)。本設(shè)計(jì)中采用了軟件消抖的方法

10、。軟件消抖是用延時(shí)來躲過暫態(tài)抖動(dòng)過程,執(zhí)行一段大于10ms的延時(shí)程序后,再讀取穩(wěn)定的鍵狀態(tài)。鍵盤的監(jiān)測(cè)方法對(duì)于計(jì)算機(jī)應(yīng)用系統(tǒng),鍵盤掃描只是CPU工作的一部分,鍵盤處理只是在有鍵按下時(shí)才有意義。對(duì)于是否有鍵按下的信息輸入方式有中斷方式和查詢方式兩種。(2)行列式鍵盤工作原理行列式鍵盤又叫矩陣式鍵盤。用I/O線組成行、列結(jié)構(gòu),按鍵設(shè)置在行與列的交點(diǎn)上,這樣可以節(jié)約I/O口線。4×4矩陣式鍵盤的示意圖如圖8所示:圖8 4×4矩陣式鍵盤的示意圖檢測(cè)鍵盤上有無鍵按下可采用查詢工作方式。首先由P1口的高四位輸出0電平,從P1口的低四位讀取鍵盤的狀態(tài);再從P1口的低四位輸出0電平,從P1

11、口的高四位讀取鍵盤狀態(tài)。將兩次讀取的結(jié)果組合起來就可以得到一組特征編碼9,如表2所示:表2 4×4矩陣式鍵盤鍵碼表按鍵名稱K0K1K2K3K4K5K6K7K8特征鍵碼77H7BH0BBH0DBH7DH0BDH0DDH7EH0BEH按鍵名稱K9KAKBKCKDKEKF未按特征鍵碼0DEH0B7H0D7H0EEHOEDH0EBH0E7H0FFH2.3顯示電路顯示電路為六位共陰極LED動(dòng)態(tài)顯示接口電路。單個(gè)共陰極7段數(shù)碼的段選碼如表3所示:表3 7段共陰數(shù)碼管段選碼表顯示字符0123456789共陰極段選碼3FH06H5BH4FH66H6DH7DH07H7FH6FH共陰極LED數(shù)碼管將發(fā)光

12、二極管的陰極(負(fù)極)短接后作為公共陰極,當(dāng)驅(qū)動(dòng)信號(hào)為高電平、“-”端接低電平時(shí)才能發(fā)光。這樣的多位顯示,將所有位的選線并聯(lián)在一起,由一個(gè)8位I/O口控制,實(shí)現(xiàn)各部分的分時(shí)選通。由于所有位選皆由一個(gè)I/O口控制,在每一瞬間6位LED會(huì)顯示相同的字符。想要每一位顯示不同的字符,就必須采用掃描方法輪流點(diǎn)亮各位LED,即在每一瞬間只使某一位顯示字符。在此瞬間,段選控制I/O口輸出相應(yīng)字型碼,而位選則控制I/O口在該顯示位送出低電平,以保證該位顯示相應(yīng)字符。如此輪流,使每一位分時(shí)顯示該位應(yīng)顯示字符。其管腳配置及動(dòng)態(tài)顯示接口電路如圖9所示: 圖9 共陰極數(shù)碼管管腳配置及動(dòng)態(tài)顯示接口電路2.4報(bào)警電路考慮到

13、實(shí)驗(yàn)室現(xiàn)有的元器件,設(shè)計(jì)中采用了蜂鳴器報(bào)警電路,如果有條件還可以采用更高級(jí)的語音報(bào)警電路,那樣更加直觀方便。電路的接法如圖10所示10:圖10 蜂鳴器報(bào)警電路工作工程:蜂鳴器經(jīng)過74LS04接在P3.7口,當(dāng)P3.7輸出為低電平“0”時(shí),74LS04端輸出為“1”,晶體管導(dǎo)通,蜂鳴器兩端獲得約+5V的電壓而鳴叫;當(dāng)P3.7輸出為高電平“1”時(shí),三極管截止,蜂鳴器停止鳴叫。電路中74LS04不僅起到了反向作用,還有增大負(fù)載能力的作用。3系統(tǒng)軟件的設(shè)計(jì)眾多軟件的聯(lián)合使用對(duì)應(yīng)用系統(tǒng)的設(shè)計(jì)起到了很重要的作用,在實(shí)物制作之前對(duì)設(shè)計(jì)進(jìn)行仿真,可以檢驗(yàn)程序的執(zhí)行結(jié)果是否與設(shè)計(jì)的功能相同,這樣可以對(duì)程序進(jìn)行改

14、進(jìn)。在這里用到了Keil C和Proteus。3.1編譯軟件Keil C(1)Keil C的使用Keil C是眾多單片機(jī)應(yīng)用開發(fā)軟件中優(yōu)秀的軟件之一,它集編輯,編譯,仿真等于一體,同時(shí)支持匯編和C語言的程序設(shè)計(jì),本設(shè)計(jì)使用它作為C編譯器,使用方法如下:首先建立一個(gè)工程,然后將C程序文件添加到工程下鏈接編譯,接著設(shè)置生成并輸出HEX文件,如果程序編譯后有錯(cuò)誤就進(jìn)行調(diào)試11。(2)程序設(shè)計(jì)完整的程序參見附錄。主流程主流程圖如圖11所示: 圖11 主流程圖 圖12 按鍵掃描流程按鍵掃描流程每一個(gè)按鍵都對(duì)應(yīng)一個(gè)處理子程序,通過對(duì)按鍵掃描進(jìn)行按鍵識(shí)別。按鍵識(shí)別的方法包含了行掃描法和反轉(zhuǎn)法。按鍵掃描流程圖

15、如圖12所示,包括了對(duì)矩陣鍵盤和調(diào)整時(shí)間按鍵的掃描。中斷流程圖設(shè)計(jì)采用了外部中斷,中斷程序流程圖如圖13所示:圖13 中斷流程圖3.2仿真軟件ProteusProteus是一款常用的仿真軟件,和Keil聯(lián)合使用,對(duì)設(shè)計(jì)的完善起到很大的作用,也對(duì)硬件的搭建提供了連線依據(jù)。Proteus的使用相對(duì)比較簡(jiǎn)單,在元件庫中找到相應(yīng)電路所要用到的元件后放置在原理圖紙上,然后用導(dǎo)線連接起來就可以了。在選用元件后,可以在原理圖紙上雙擊某元件,更改它的屬性,如電阻的名稱、阻值等。本設(shè)計(jì)中使用了單片機(jī),需要加載程序文件。之前已經(jīng)使用Keil C生成了所需要的HEX文件,直接加載進(jìn)來就可以了。這時(shí)就可以運(yùn)行仿真了。

16、在仿真之前最好再檢查一下電路的連接,確認(rèn)正確之后再運(yùn)行,以免粗心造成運(yùn)行結(jié)果與設(shè)計(jì)的不相符合。設(shè)計(jì)的仿真原理圖如圖14所示:圖14 電路仿真原理圖4調(diào)試及故障分析4.1程序調(diào)試程序調(diào)試:分步驟進(jìn)行調(diào)試,對(duì)每一個(gè)子程序進(jìn)行編譯鏈接后,將整個(gè)程序全部編譯,生成HEX文件加載到單片機(jī)上,進(jìn)行仿真。出現(xiàn)錯(cuò)誤和警告時(shí)要進(jìn)行分析,解決問題。仿真分析:?jiǎn)?dòng)(上電)后,顯示0000。當(dāng)主持人按鍵,鈴響,顯示30秒的搶答時(shí)間,如有選手搶答,鈴響,會(huì)顯示選手號(hào)碼以及60秒的回答時(shí)間,回答時(shí)間剩余5秒時(shí),會(huì)響提示音。如果第一位選手不能回答,那么主持人再次按下START鍵允許其他選手繼續(xù)搶答,允許其他選手搶答的時(shí)間為

17、上一次搶答的剩余時(shí)間,答題時(shí)間仍是60秒。如果沒有人搶答,搶答倒計(jì)時(shí)還有5秒的時(shí)候會(huì)響提示音,搶答時(shí)間過后搶答器會(huì)自動(dòng)進(jìn)入復(fù)位狀態(tài),可以進(jìn)行下一輪的搶答。 如果主持人未按START鍵,有選手按了搶答按鍵,犯規(guī)搶答,顯示犯規(guī)選手號(hào)并閃爍FF,直到主持人復(fù)位。這與預(yù)期的效果是一致的。5總結(jié)與普通搶答器相比,本設(shè)計(jì)有以下幾方面優(yōu)勢(shì):(1)具有清零裝置和搶答控制,可由主持人操縱避免有人提前搶答違反規(guī)則。(2)具有定時(shí)功能,在規(guī)定時(shí)間內(nèi)無人搶答表示所有參賽選手或參賽隊(duì)對(duì)本題棄權(quán)。 在以往的傳統(tǒng)學(xué)習(xí)模式下,我們可能會(huì)記住很多書本知識(shí),但是通過畢業(yè)設(shè)計(jì),我們學(xué)會(huì)了如何將學(xué)到的知識(shí)化為自己的東西,學(xué)會(huì)了怎么跟

18、好的處理只是和實(shí)踐相結(jié)合的問題,把握重點(diǎn),攻克難關(guān),學(xué)到用到活學(xué)活用。在設(shè)計(jì)過程中由于時(shí)間倉促有很多地方難免存在不足之處,硬件設(shè)計(jì)已經(jīng)完成,在軟件設(shè)計(jì)中有些功能還尚未能開發(fā)出來。但在以后的工作中,我們會(huì)嚴(yán)格要求自己最求完美。整個(gè)設(shè)計(jì)通過軟件和硬件上的調(diào)試,仿真。我想這些對(duì)于自己以后的學(xué)習(xí)和工作都會(huì)有很大的幫助。在這次設(shè)計(jì)中遇到很多實(shí)際性的問題,在實(shí)際設(shè)計(jì)中才發(fā)現(xiàn),書本上的理論性的東西與實(shí)際運(yùn)用中的還是有一定的出入的,所以有些問題不但要深入的理解,而且要不斷的更正以前的錯(cuò)誤思維。對(duì)于單片機(jī)設(shè)計(jì),硬件電路設(shè)計(jì)時(shí)比較簡(jiǎn)單的,主要是解決程序設(shè)計(jì)中的問題。而程序設(shè)計(jì)是一個(gè)很靈活的東西,他反應(yīng)了你解決問題

19、的邏輯思維和創(chuàng)新能力。它才是一個(gè)設(shè)計(jì)的靈魂所在。因此在整個(gè)設(shè)計(jì)過程中大部分時(shí)間是用在程序上面的。很多子程序是可以借簽書本上的,但怎樣銜接各個(gè)子程序才是關(guān)鍵的問題所在,這需要對(duì)單片機(jī)的結(jié)構(gòu)很熟悉。因此可以說單片機(jī)的設(shè)計(jì)師軟件和硬件的結(jié)合,二者是密不可分的。但是,通過這次設(shè)計(jì)我也發(fā)現(xiàn)自己的很多不足之處。在設(shè)計(jì)過程中我發(fā)現(xiàn)自己考慮問題很不全面,自己的專業(yè)知識(shí)掌握的很不牢靠,所掌握的計(jì)算機(jī)軟件還不夠,我希望自己的這些不足之處能在今后的工作和靴子中得到改善。而且,通過這次設(shè)計(jì),我懂得了學(xué)習(xí)的重要性,學(xué)會(huì)了堅(jiān)持和努力,這將為以后的學(xué)習(xí)做出了最好的榜樣!參考文獻(xiàn)1 程相波, 衛(wèi)安軍. 基于MCS51單片機(jī)的

20、八路搶答器設(shè)計(jì)方法研究J. 北京工業(yè)職業(yè)技術(shù)學(xué)院學(xué)報(bào), 2007, (02): 31-34. 2 宋春華, 劉江濤, 王貴恩, 裴小英. 基于單片機(jī)控制的數(shù)字搶答器J. 河南機(jī)電高等??茖W(xué)校學(xué)報(bào), 2005, (05): 28-29.3 張毅剛, 彭喜元, 姜守達(dá), 喬立巖. 新編MCS-51單片機(jī)應(yīng)用設(shè)計(jì)M. 哈爾濱: 哈爾濱工業(yè)大學(xué)出版社, 2003: 223-231.4 何立民. 單片機(jī)高級(jí)教程-應(yīng)用與設(shè)計(jì)M. 北京: 北京航空航天大學(xué)出版社, 2000. 8: 103-109.5 李建忠. 單片機(jī)原理與應(yīng)用M. 西安: 西安電子科技大學(xué)出版社, 2002,2: 121-123.6 王幸

21、之, 鐘愛琴, 王雷, 王閃. AT89系列單片機(jī)原理與接口技術(shù)M. 北京: 北京航空航天大學(xué)出版社, 2004: 62-67.7 張洪潤(rùn), 易濤. 單片機(jī)應(yīng)用技術(shù)教程M. 北京: 清華大學(xué)出版社, 2003,10: 119-122.8 蔡朝洋. 單片機(jī)控制實(shí)習(xí)與專題制作M. 北京: 北京航空航天大學(xué)出版社, 2006,11: 317-323.9 戴佳, 苗龍, 陳斌. 51單片機(jī)應(yīng)用系統(tǒng)開發(fā)典型實(shí)例M, 北京: 中國(guó)電力出版社, 2005,7: 121-137.10 楊欣, 王玉鳳, 劉湘黔. 電路設(shè)計(jì)與仿真-基于Multisim 8與 Protel 2004M. 北京: 清華大學(xué)出版社,

22、2006: 32-106.11 王振宇, 李惠敏. 實(shí)驗(yàn)電子技術(shù)M. 天津: 天津大學(xué)出版社, 1998: 63-83.附錄一#include<reg51.h>unsigned char key;unsigned char key1;unsigned char sec;unsigned char sec2;unsigned char flag;unsigned char flag1=0;unsigned char flag2=0;unsigned char flag3=0;unsigned char i; sbit LOUDER=P37;sbit RED=P34;sbit PAUS

23、E=P35;sbit RESTART=P36;sbit ADD=P30;sbit SUB=P31;unsigned char led17=0x3F,0x06,0x5B,0x4F,0x66,0x6D, 0x7D,0x07, 0x7F,0x6F,0X71;/*delay()延時(shí)函數(shù)*/void delay(int t)unsigned char i,j;for(i=0;i<t;i+)for(j=0;j<100;j+);void delay1()unsigned char i,j;for(i=0;i<8;i+)for(j=0;j<100;j+);/*中斷的初始化*/void

24、init() IT0=1; /外部中斷T0,邊沿觸發(fā) EX0=1; IT1=1; /外部中斷T1,邊沿觸發(fā) EX1=1; TMOD=0X11; /定時(shí)器T0 T1 均為模式一 PT1=1; /設(shè)定定時(shí)器T1、外部中斷T0的中斷優(yōu)先級(jí)/ PX0=1; EA=1; /CPU允許中斷/*外部中斷T0,用于復(fù)位*/ void Exit_int0() interrupt 0 EA=0; sec=0; key=0; flag=0; flag1=0; flag2=0; flag3=0; RED=1; PAUSE=1; RESTART=1; TR0=0; ET0=0; TR1=0; ET1=0; IT1=1;

25、 /允許外部中斷T1 EX1=1; EA=1; /*外部中斷T1服務(wù)程序*/ void Exit_int2() interrupt 2 flag3+; /flag3初始值為0,外部中斷T1每中斷一次flag3值加一 EX1=0; / 關(guān)掉外部中斷T1 if(flag3=1) /第一次按下START鍵,啟動(dòng)定時(shí)器T0計(jì)時(shí)30秒,紅燈亮 RED=0; flag1=1; /flag1置一 TL0=0XB0; /啟動(dòng)定時(shí)器T0三十秒倒計(jì)時(shí) TH0=0X3C; sec=30; ET0=1; /開啟T0中斷 TR0=1; /允許T0計(jì)數(shù) else if(flag3=2) /第二次按下START鍵,黃燈亮,

26、紅燈滅 flag=0; flag1=0; flag2=0; RED=1; PAUSE=0; TR1=0; sec=sec2; key=0; else if(flag3=3) /第三次按下START鍵,啟動(dòng)計(jì)時(shí),并允許再次搶答,藍(lán)燈亮,黃燈滅 TR0=1; flag2=0; PAUSE=1; RESTART=0; flag=0; /為搶答前有選手違規(guī) 為提示聲設(shè)定標(biāo)志位 flag1=1; key=0; else if(flag3=4) flag=1; flag1=0; flag2=0; RESTART=1; RED=1; PAUSE=0; TR1=0; sec=sec2; key=0; else

27、 if(flag3>4) TR0=1; key=0; flag2=0; flag=0; PAUSE=1; RESTART=0; TR1=1; flag=0; flag1=1; EX1=1; LOUDER=0; delay(250); LOUDER=1;/*定時(shí)器T0,計(jì)時(shí)30秒*/void Timer1() interrupt 1 static unsigned char count; TL0=0XB0; TH0=0X3C; count+; if(count=35) count=0; sec-; if(sec=5) LOUDER=0; delay(250); LOUDER=1; if(s

28、ec=0) sec=0; ET0=0; TR0=0; /*定時(shí)器T1,計(jì)時(shí)60秒*/void Timer3() interrupt 3 static unsigned char count; TL1=0XB0; TH1=0X3C; count+; if(count=35) count=0; sec-; if(sec=5) LOUDER=0; delay(250); LOUDER=1; if(sec=0) sec=0; ET1=0; TR1=0; key=0; /*功能:鍵盤掃描*/key_scan() unsigned char k=0,p1_h=0,p1_l=0; P1=0XF0; k=P1

29、; flag=0; if(k!=0XF0) delay(60);k=P1; /讀入行鍵值flag=1;if(k!=0XF0)p1_h=P1; /行鍵值給高位P1=0X0f; /翻轉(zhuǎn)后讀入列的值給P1(讀鍵值時(shí)按鍵還未釋放)p1_l=P1; /列鍵值給低位k=p1_h | p1_l; /高低位相或確定具體按鍵值 flag2+; /第二個(gè)人搶答無效,即鎖存第一個(gè)人的號(hào) if(flag2=1) sec2=sec; if(flag2>=2) k=0; switch(k) case 0: return(0) ;break;case 238: return(key=1,sec=60);break;c

30、ase 237: return(key=2,sec=60);break;case 235: return(key=3,sec=60);break;case 231: return(key=4,sec=60);break;case 222: return(key=5,sec=60);break;case 221: return(key=6,sec=60);break;case 219: return(key=7,sec=60);break;case 215: return(key=8,sec=60);break;case 190: return(key=9,sec=60);break;case 189: return(key=10,sec=60);break;case 187: return(key=11,sec=60);break;case 183: return(key=12,sec=60);break;case 126: return(key=13,sec=60);break;case 125: return(key=14

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論