基于51單片機(jī)的八路搶答器設(shè)計(jì)(1)
基于51單片機(jī)的八路搶答器設(shè)計(jì)(1),基于,51,單片機(jī),八路,搶答,設(shè)計(jì)
29
編號(hào):
單片機(jī)課程設(shè)計(jì)報(bào)告
題 目:八路搶答器設(shè)計(jì)制作
院 (系): 電子工程系
專 業(yè): 電子信息工程技術(shù)
學(xué)生姓名:
學(xué) 號(hào):
指導(dǎo)教師單位:
姓 名:
題目類型:¨理論研究 ¨實(shí)驗(yàn)研究 t工程設(shè)計(jì) ¨工程技術(shù)研究 ¨軟件開(kāi)發(fā)
2010年7月3日
課程設(shè)計(jì)( 論 文 )評(píng) 語(yǔ)
指
導(dǎo)
教
師
評(píng)
語(yǔ)
簽字: 200 年 月 日
評(píng)
閱
教
師
評(píng)
語(yǔ)
簽字: 200 年 月 日
摘 要
隨著社會(huì)的不斷進(jìn)步,電子技術(shù)也飛速的向前發(fā)展.特別是大規(guī)模集成電路的發(fā)展,把我們帶進(jìn)了電子化時(shí)代。電子產(chǎn)品的日益增多,也讓我們的生活越來(lái)越方便。特別是計(jì)算機(jī)的發(fā)展,真可謂是突飛猛進(jìn)。自從1946年世界上第一臺(tái)計(jì)算機(jī)的誕生以來(lái),還不到六十年的時(shí)間,計(jì)算機(jī)就取得了舉世矚目的成績(jī)。特別是在通信領(lǐng)域,實(shí)現(xiàn)了信息一體化的時(shí)代。作為大學(xué)生的我們,更需要加強(qiáng)實(shí)踐能力的培養(yǎng)。課程設(shè)計(jì)在一定程度上反映了我們對(duì)理論知識(shí)的理解程度,是理論與實(shí)踐的橋梁。它不僅能鍛煉我們的動(dòng)手能力,而且能夠培養(yǎng)我們對(duì)問(wèn)題的思考能力以及對(duì)知識(shí)的進(jìn)一步了解。當(dāng)你能把你所學(xué)到知識(shí)化作為現(xiàn)實(shí)的東西時(shí),我們能力就提升到一個(gè)新臺(tái)階。
很多人都認(rèn)為學(xué)習(xí)是枯燥無(wú)味的,有時(shí)覺(jué)得與現(xiàn)實(shí)太遙遠(yuǎn)。在學(xué)習(xí)之余,我們?nèi)匀豢梢哉业揭稽c(diǎn)有趣的事情,比如說(shuō)做一個(gè)聲控?zé)襞荨?shù)字鐘等等。生活中我們要找到自己感興趣的東西。這次綜合課程設(shè)計(jì)中,我們制作了八路搶答器。
搶答器是為智力競(jìng)賽參賽者答題時(shí)進(jìn)行搶答而設(shè)計(jì)的一種優(yōu)先判決器電路,廣泛應(yīng)用于各種知識(shí)競(jìng)賽、文娛活動(dòng)等場(chǎng)合。能夠?qū)崿F(xiàn)搶答器功能的方式有多種,可以采用前期的模擬電路、數(shù)字電路或模擬與數(shù)字電路相結(jié)合的方式,但這種方式制作過(guò)程復(fù)雜,而且準(zhǔn)確性與可靠性不高,成品面積大,安裝、維護(hù)困難。本節(jié)介紹一種利用51單片機(jī)作為核心部件進(jìn)行邏輯控制及信號(hào)產(chǎn)生的八路搶答器。近年來(lái),隨著單片機(jī)檔次的不斷提高,功能的不斷完善,其應(yīng)用日趨成熟、應(yīng)用領(lǐng)域日趨擴(kuò)大,特別是工業(yè)測(cè)控、尖端武器和日用家電等領(lǐng)域更是因?yàn)橛辛藛纹瑱C(jī)而生輝增色。單片機(jī)應(yīng)用技術(shù)已成為一項(xiàng)新的工程應(yīng)用技術(shù)。本次課程設(shè)計(jì)我們做的是八路搶答器,我們采用AT89C51單片機(jī)實(shí)現(xiàn)搶答功能,性能更穩(wěn)定,更易操作調(diào)試。
關(guān)鍵詞:多路數(shù)字搶答器 AT89C51 PROTEUS
目 錄
引言------------------------------------------------------------------------------------------------------------- 3
緒論------------------------------------------------------------------------------------------------------------- 3
第1章 系統(tǒng)設(shè)計(jì)內(nèi)容--------------------------------------------------------------------------------- 4
1.1 系統(tǒng)設(shè)計(jì)依據(jù)------------------------------------------------------------------------------------------- 4
1.2 設(shè)計(jì)任務(wù)和要求------------------------------------------------------- 4
1.3 設(shè)計(jì)目的------------------------------------------------------------------------------------------------- 4
第2章 硬件設(shè)計(jì)-------------------------------------------------------------------------------------- 5
2.1 單片機(jī)控制原理---------------------------------------------------------------------------------------- 5
2.2 搶答器的原理------------------------------------------------------------------------------------------- 5
2.2.1 原理框圖---------------------------------------------------------------------------------------------- 5
2.3 功能模塊電路------------------------------------------------------------------------------------------- 5
2.3.1 晶振復(fù)位及開(kāi)始搶答電路------------------------------------------------------------------------ 5
2.3.2 選手搶答鍵(矩陣式鍵盤(pán))--------------------------------------------------------------------- 5
2.3.3.顯示與顯示驅(qū)動(dòng)電路------------------------------------------------------------------------------ 5
2.3.4 蜂鳴器音頻輸出電路------------------------------------------------------------------------------ 5
第3章 軟件設(shè)計(jì)---------------------------------------------------------------------------------------- 10
3.1程序設(shè)計(jì)-------------------------------------------------------------------------------------------------- 10
3.1.1 系統(tǒng)流程圖------------------------------------------------------------------------------------------- 10
3.1.2 顯示搶答違規(guī)流程圖------------------------------------------------- 11
3.1.3 搶答成功流程圖----------------------------------------------------- 11
3.2 程序代碼------------------------------------------------------------- 12
3.2.1主程序代碼--------------------------------------------------------- 12
3.2.2 定時(shí)器子程序------------------------------------------------------- 16
3.2.3 延時(shí)子程序--------------------------------------------------------- 17
3.2.4 顯示子程序--------------------------------------------------------- 17
第4章 系統(tǒng)調(diào)試-------------------------------------------------------- 18
第5章 總結(jié)------------------------------------------------------------ 18
參考文獻(xiàn)----------------------------------------------------------------- 19
附錄一 程序代碼---------------------------------------------------------- 20
附錄二 原理圖------------------------------------------------------------ 27
·引 言
隨著電子技術(shù)的飛速發(fā)展,基于單片機(jī)的控制系統(tǒng)已經(jīng)廣泛應(yīng)用于工業(yè)、農(nóng)業(yè)、電力、電子、智能樓宇等行業(yè)。微型計(jì)算機(jī)作為嵌入式控制系統(tǒng)的主體與核心,代替了傳統(tǒng)的控制系統(tǒng)的常規(guī)電子線路。同時(shí)樓宇智能化的發(fā)展與成熟,也為基于單片機(jī)的照明控制系統(tǒng)的普及與應(yīng)用奠定了堅(jiān)實(shí)的基礎(chǔ)。
電子智能搶答器在搶答過(guò)程中,為了知道哪一組或哪一位選手先回答問(wèn)題,必須要設(shè)計(jì)一個(gè)系統(tǒng)來(lái)完成這個(gè)任務(wù)。如果在搶答中,靠視覺(jué)是很難判斷出哪組先答題。利用單片機(jī)系統(tǒng)來(lái)設(shè)計(jì)搶答器,使以上問(wèn)題得以解決,即使兩組的搶答時(shí)間相差幾微秒也可以分辨出使哪組優(yōu)先回答問(wèn)題。搶答組數(shù)可以在八組以內(nèi)任意使用,本系統(tǒng)設(shè)計(jì)為模塊形式采用九針插頭進(jìn)行連接,系統(tǒng)工作原理本系統(tǒng)采用AT89C51單片機(jī)作為核心。控制系統(tǒng)的五個(gè)模塊分別為:?jiǎn)纹瑱C(jī)最小系統(tǒng)、顯示模塊、顯示驅(qū)動(dòng)模塊、搶答開(kāi)關(guān)模塊、音樂(lè)音頻輸出模塊。
多路數(shù)字搶答器在各種智力競(jìng)賽中經(jīng)常用到。在各校舉行的各種競(jìng)賽中我們也經(jīng)??吹接袚尨鸬沫h(huán)節(jié),舉辦方多數(shù)采用讓選手通過(guò)舉答題板的方法判斷選手的答題權(quán),這在某種程度上會(huì)因?yàn)橹鞒秩说闹饔^誤斷造成比賽的不公平性。為解決這個(gè)問(wèn)題,我準(zhǔn)備借本次課程設(shè)計(jì)的機(jī)會(huì)制作一個(gè)八路數(shù)顯搶答器。一方面加深我們對(duì)所學(xué)習(xí)的知識(shí)的了解,鞏固模擬、數(shù)字電路知識(shí),也提升我們解決日常生活中常見(jiàn)問(wèn)題的能力,掌握一般設(shè)計(jì)方法與設(shè)計(jì)步驟。積累實(shí)際設(shè)計(jì)制作經(jīng)驗(yàn),為走向更復(fù)雜更實(shí)用的應(yīng)用領(lǐng)域奠定基礎(chǔ)。控制系統(tǒng)主要由單片機(jī)控制電路、存儲(chǔ)器接口電路及顯示電路組成。具體以AT89C51單片機(jī)為系統(tǒng)工作核心,負(fù)責(zé)控制各個(gè)部分協(xié)調(diào)工作。在其外圍接上了復(fù)位電路、上拉電阻、數(shù)碼管、按鈕及揚(yáng)聲器,其中用到了WAVE軟件,集成調(diào)試環(huán)境,集成編輯器、編譯器、調(diào)試器,支持軟件模擬等。同時(shí)也用到了PROTEUS軟件,通過(guò)仿真可完全實(shí)現(xiàn)對(duì)所設(shè)計(jì)系統(tǒng)的功能的模擬。
·緒 論
單片機(jī)作為計(jì)算機(jī)的一個(gè)重要分支,其應(yīng)用范圍很廣,發(fā)展也很快,它已成為在現(xiàn)代電子技術(shù)、計(jì)算機(jī)應(yīng)用、網(wǎng)絡(luò)、通信、自動(dòng)控制與計(jì)量測(cè)試、數(shù)據(jù)采集與信號(hào)處理等技術(shù)中日益普及的一項(xiàng)新興技術(shù),應(yīng)用范圍十分廣泛。對(duì)于計(jì)算機(jī)專業(yè)的學(xué)生來(lái)說(shuō),即使暫時(shí)沒(méi)有從事單片機(jī)的應(yīng)用與開(kāi)發(fā),學(xué)習(xí)單片機(jī)也有很重要的意義。學(xué)習(xí)它,不僅為將來(lái)可能從事該方面的開(kāi)發(fā)打下基礎(chǔ),另一方面,由于單片機(jī)作為微型計(jì)算機(jī)的一個(gè)種類,麻雀雖小,五臟俱全,可以把它當(dāng)作微型計(jì)算機(jī)的一個(gè)簡(jiǎn)化模型來(lái)看待,學(xué)習(xí)單片機(jī)可以加深對(duì)微型計(jì)算機(jī)工作原理的理解,更加清楚計(jì)算機(jī)的脈絡(luò)。同時(shí),提供了一個(gè)實(shí)際應(yīng)用手段。21世紀(jì),是一個(gè)信息技術(shù)飛速發(fā)展的時(shí)代,智力競(jìng)賽是一種形式比較活潑的教育方式,是人們休閑娛樂(lè)生活的一部分。這些競(jìng)賽一方面充實(shí)了人們的娛樂(lè)生活,另一方面也提高了人們努力汲取相關(guān)領(lǐng)域的知識(shí)的興趣。智力競(jìng)賽,也就是幾個(gè)參賽選手之間在規(guī)定的時(shí)間,規(guī)定的地點(diǎn)相互競(jìng)爭(zhēng)的比賽。
搶答是各種競(jìng)賽常用的一種形式。在搶答賽中,往往要有主持人宣布搶答的開(kāi)始,還要確定是哪個(gè)選手搶到了答題權(quán),具體答題的時(shí)間有時(shí)也要設(shè)定。這些如果僅憑主持人的主觀判斷,很容易出現(xiàn)誤判的情況。因此,在競(jìng)賽中,搶答器就扮演了一個(gè)非常重要的角色。
第1章 系統(tǒng)設(shè)計(jì)內(nèi)容
1.1系統(tǒng)設(shè)計(jì)依據(jù)
搶答器由計(jì)數(shù)器、寄存器、集成定時(shí)器和譯碼顯示等組合、時(shí)序電路組成??煞譃閾尨痣娐?,定時(shí)電路,報(bào)警電路等幾個(gè)單元部分。每個(gè)單元電路分別可以處理一些搶答競(jìng)賽中的基本問(wèn)題。
本次課程設(shè)計(jì)設(shè)計(jì)的是一個(gè)多路定時(shí)搶答器,是一個(gè)多于兩位選手參賽的一個(gè)搶答器,具有鎖存和顯示功能。同時(shí)有主持人控制系統(tǒng)的清零和搶答的開(kāi)始。搶答開(kāi)始后,若有任何一名選手按動(dòng)搶答按鈕,搶答器就會(huì)顯示該選手編號(hào)直至系統(tǒng)被主持人清零,并有揚(yáng)聲器發(fā)出提示,同時(shí)其他人再搶答就無(wú)效了。這次設(shè)計(jì)的搶答器還有自動(dòng)定時(shí)功能,主持人可以設(shè)定選手答題的時(shí)間。當(dāng)主持人啟動(dòng)“開(kāi)始”鍵后,定時(shí)器會(huì)自動(dòng)減計(jì)時(shí),這個(gè)會(huì)顯示在顯示器上。選手只有在搶答時(shí)間內(nèi)搶答才有效,若在答題時(shí)間內(nèi)沒(méi)有選手答題,時(shí)間到時(shí),報(bào)警電路就會(huì)發(fā)出警報(bào)亮燈并且禁止搶答。
1.2設(shè)計(jì)任務(wù)和要求
設(shè)計(jì)一個(gè)八路搶答器
要求:(1)設(shè)計(jì)出硬件電路;
(2)設(shè)計(jì)出軟件編程方法,并寫(xiě)出源代碼;
(3)用PROTEUS進(jìn)行仿真;
(4)論文格式要符合學(xué)院的統(tǒng)一規(guī)定,結(jié)構(gòu)要合符邏輯,表達(dá)要得體。
1.3 設(shè)計(jì)目的
通過(guò)設(shè)計(jì)學(xué)習(xí)單片機(jī)最小系統(tǒng)的基本設(shè)計(jì)方法,掌握單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)調(diào)試過(guò)程。
(1)學(xué)習(xí)單片機(jī)開(kāi)發(fā)工具功能、特點(diǎn)和使用方法。
(2)學(xué)會(huì)單片機(jī)控制系統(tǒng)程序的編制和編制和調(diào)試方法。
(3)設(shè)計(jì)單片機(jī)搶答器硬件電路,繪制出電路原理圖。
(4)編制并調(diào)試出鍵盤(pán)掃描程序和顯示驅(qū)動(dòng)程序。
(5)掌握單片機(jī)定時(shí)器的基本用法,編制出定時(shí)器的中斷程序。
第2章 硬件設(shè)計(jì)
2.1 單片機(jī)控制原理
單片機(jī)(SCM)是單片微型計(jì)算機(jī)(Single Chip Microcomputer)的簡(jiǎn)稱。它是把中央處理器CPU、隨機(jī)存儲(chǔ)器RAM、只讀存儲(chǔ)器ROM、I/O接口電路、定時(shí)/計(jì)數(shù)器以及輸入輸出適配器都集成在一塊芯片上,構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。它的最大優(yōu)點(diǎn)是體積小,可放在儀表內(nèi)部。但存儲(chǔ)量小,輸入輸出適配器簡(jiǎn)單,功能較低。目前,單片機(jī)在民用和工業(yè)測(cè)控領(lǐng)域得到最廣泛的應(yīng)用,早已深深地融入人們的生活中。
簡(jiǎn)單的說(shuō),用單片機(jī)系統(tǒng)來(lái)設(shè)計(jì)搶答器,實(shí)現(xiàn)兩組的搶答時(shí)間即使是相差幾微秒,也可分辨出哪組優(yōu)先答題。
P0端口(P0.0-P0.7):P0口為一個(gè)8位漏級(jí)開(kāi)路雙向I/O口,每腳可吸收8TTL門(mén)電流。當(dāng)P1口的管腳第一次寫(xiě)1時(shí),被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲(chǔ)器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時(shí),P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗(yàn)時(shí),P0輸出原碼,此時(shí)P0外部必須被拉高。
P1端口(P1.0-P1.7):P1口是一個(gè)內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門(mén)電流。P1口管腳寫(xiě)入1后,被內(nèi)部上拉為高電平,可用作輸入,P1口被外部下拉為低電平時(shí),將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗(yàn)時(shí),P1口作為第八位地址接收。
P2端口(P2.0-P2.7):P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個(gè)TTL門(mén)電流,當(dāng)P2口被寫(xiě)“1”時(shí),其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時(shí),P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲(chǔ)器或16位地址外部數(shù)據(jù)存儲(chǔ)器進(jìn)行存取時(shí),P2口輸出地址的高八位。在給出地址“1”時(shí),它利用內(nèi)部上拉優(yōu)勢(shì),當(dāng)對(duì)外部八位地址數(shù)據(jù)存儲(chǔ)器進(jìn)行讀寫(xiě)時(shí),P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗(yàn)時(shí)接收高八位地址信號(hào)和控制信號(hào)。P3端口(P3.0-P3.7):
P3口管腳是一個(gè)帶有內(nèi)部上拉電阻的8位的雙向I/O端口,可接收輸出4個(gè)TTL門(mén)電流。當(dāng)P3口寫(xiě)入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入端時(shí),由于外部下拉為低電平,P3口將輸出電流(ILL)。
2.2 搶答器的原理
搶答器的工作原理是采用單片機(jī)最小系統(tǒng),用程序查詢方式采用動(dòng)態(tài)顯示組號(hào)。主持人按下開(kāi)始搶答鍵才可以搶答。主持人沒(méi)有按下開(kāi)始搶答按紐(P3.0),有人搶答則搶答違規(guī),報(bào)警并顯示組號(hào),主持人按下開(kāi)始搶答開(kāi)關(guān)重新?lián)尨?。主持人按下開(kāi)始搶答按紐(P3.0),蜂鳴響聲提示,數(shù)碼管30秒倒計(jì)時(shí)搶答,蜂鳴器響聲提示并顯示他的組號(hào),30秒內(nèi)有人搶答則開(kāi)始60秒倒計(jì)時(shí)(60秒內(nèi)必須回答完問(wèn)題),最后五秒倒計(jì)時(shí)警報(bào)。單片機(jī)最小系統(tǒng)、搶答按鍵模塊(四位并行數(shù)碼顯示)、顯示模塊、顯示驅(qū)動(dòng)模塊、搶答開(kāi)關(guān)模塊、蜂鳴器音頻輸出模塊。
2.2.1 原理及電路總框圖
圖2.2.1搶答器總原理圖
2.3 功能模塊電路
2.3.1晶振復(fù)位及開(kāi)始搶答電路
晶振的頻率為12MHZ,提供89C51的時(shí)鐘脈沖使89C51工作,復(fù)位電路是單片機(jī)初始化,使單片機(jī)重新開(kāi)始執(zhí)行程序。當(dāng)復(fù)位開(kāi)關(guān)按下RST由低電平變?yōu)楦唠娖?,則程序從頭開(kāi)始執(zhí)行,在此次課程設(shè)計(jì)電路中當(dāng)一個(gè)問(wèn)題結(jié)束主持人后按下復(fù)位開(kāi)關(guān)后進(jìn)行下一題的準(zhǔn)備。
圖2.3.1 晶振復(fù)位電路
圖2.3.1開(kāi)始搶答電路
2.3.2 選手搶答鍵(矩陣式鍵盤(pán))
89C51的P1口做一個(gè)為選手搶答的輸入按鍵引腳,P1.0至P1.7輪流輸出低電位,給每一個(gè)選手編號(hào)1至8,當(dāng)選手按下按鈕時(shí),P1口個(gè)端口的電平變化從P1口輸入,經(jīng)單片機(jī)處理后從P0輸出由數(shù)碼管顯示搶答者編號(hào)。
圖2.3.2 選手搶答電路
2.3.3 顯示與顯示驅(qū)動(dòng)電路
此電路包括顯示和驅(qū)動(dòng),顯示采用數(shù)碼管,驅(qū)動(dòng)用P2口, 違規(guī)者編號(hào)、搶答30秒倒計(jì)時(shí)、正常搶答者編號(hào)和回答問(wèn)題時(shí)間60秒倒計(jì)時(shí),數(shù)碼管采用動(dòng)態(tài)顯示。驅(qū)動(dòng)電路P2口,查詢顯示程序利用P0口做段選碼口輸出P2低3位做位選碼輸出,當(dāng)為低電平則能驅(qū)動(dòng)數(shù)碼管使其顯示數(shù)字。在+5V電壓下接10k的電阻,保證正常壓降。
圖2.3.3 示與顯示驅(qū)動(dòng)電路
2.3.4蜂鳴器音頻輸出電路
通過(guò)控制不同頻率的矩形脈沖來(lái)控制蜂鳴器發(fā)聲。此次課程設(shè)計(jì)中只需要一些簡(jiǎn)單的提示聲音和稍微顯眼的燈控,有搶答違規(guī),開(kāi)始搶答,搶答時(shí)間結(jié)束和回答時(shí)間到得提示聲和亮燈提醒。
圖2.3.4蜂鳴器音頻輸出電路
第3章 軟件設(shè)計(jì)
3.1程序設(shè)計(jì)
3.1.1 系統(tǒng)流程圖
開(kāi) 始
初始化
讀鍵盤(pán)是否有鍵按下
中斷條件是否滿足
調(diào)用顯示搶答違
規(guī)并報(bào)警子程序
進(jìn)入中斷程序
開(kāi)中斷并響聲提示
設(shè)定定時(shí)器值
并啟動(dòng)定時(shí)器
30秒搶答時(shí)間并顯示
并顯示
調(diào)用讀鍵子程序?yàn)檠訒r(shí)程序
是否有鍵按下
60秒到中斷返回
調(diào)用搶答者獲得的回答問(wèn)題子程序
3.1.2顯示搶答違規(guī)流程圖
開(kāi) 始
報(bào)警一直提示
顯示違規(guī)者編號(hào)
3.1.3搶答成功流程圖
開(kāi) 始
響聲提示
設(shè)置定時(shí)器初值并啟動(dòng)
顯示搶答者后30秒倒計(jì)時(shí)
60秒答問(wèn)題時(shí)間到并響聲提示
RET
3.2 程序代碼
3.2.1 主程序
void main()
{
init();
if(k==0) //主持人按下開(kāi)始鍵
{
Timer();
delay(10);
while(!k);
while(1)
{
dis();
m=0;
n=0;
if(second==10){beep=1;delay(500);beep=0;}
if(second==0) {
TR0=0;n=1;
if(k==0)
{beep=1;delay(500);beep=0;second=29;TR0=1;m=1;}
}
if(n==0)
{
if(k1==0) {delay(5);if(k1==0);while(!k1);t=1;}
else if(k2==0) {delay(5);if(k2==0);while(!k2);t=2;}
else if(k3==0) {delay(5);if(k3==0);while(!k2);t=3;}
else if(k4==0) {delay(5);if(k4==0);while(!k2);t=4;}
else if(k5==0) {delay(5);if(k5==0);while(!k2);t=5;}
else if(k6==0) {delay(5);if(k6==0);while(!k2);t=6;}
else if(k7==0) {delay(5);if(k7==0);while(!k2);t=7;}
else if(k8==0) {delay(5);if(k8==0);while(!k2);t=8;}
else if(k==0) {delay(5);if(k==0);while(!k);t=0;i=0;second=29;beep=1;delay(500);beep=0;TR0=1;}
}
while(t)
{
if(m==0) //開(kāi)關(guān),保證程序只執(zhí)行一次
{
switch(t)
{
case 1:
{
TR0=0;i=1;second=0;beep=1;delay(500);beep=0;
a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 2:
{
TR0=0;i=2;second=0;beep=1;delay(500);beep=0;
a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 3:
{
TR0=0;i=3;second=0;beep=1;delay(500);beep=0;
a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 4:
{
TR0=0;i=4;second=0;beep=1;delay(500);beep=0;
a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 5:
{
TR0=0;i=5;second=0;beep=1;delay(500);beep=0;
a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;break;
}
case 6:
{
TR0=0;i=6;second=0;beep=1;delay(500);beep=0;
a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;break;
}
case 7:
{
TR0=0;i=7;second=0;beep=1;delay(500);beep=0;
a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;break;
}
case 8:
{
TR0=0;i=8;second=0;beep=1;delay(500);beep=0;
a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;break;
}
}
}
if(a1==0) //選手1的分?jǐn)?shù)
{ second=score1;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score1+=1;if(score1==99)score1=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score1-=1;if(score1==0)score1=60;}
dis();
}
else if(a2==0)
{ second=score2;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score2+=1;if(score2==99)score2=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score2-=1;if(score2==0)score2=60;}
dis();
}
else if(a3==0)
{ second=score3;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score3+=1;if(score3==99)score3=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score3-=1;if(score3==0)score3=60;}
second=score3;
dis();
}
else if(a4==0)
{
second=score4;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score4+=1;if(score4==99)score4=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score4-=1;if(score4==0)score4=60;}
second=score4;
dis();
}
else if(a5==0)
{
second=score5;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score5+=1;if(score5==99)score5=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score5-=1;if(score5==0)score5=60;}
second=score5;
dis();
}
else if(a6==0)
{
second=score6;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score6+=1;if(score6==99)score6=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score6-=1;if(score6==0)score6=60;}
second=score6;
dis();
}
else if(a7==0)
{
second=score7;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score7+=1;if(score7==99)score7=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score7-=1;if(score7==0)score7=60;}
second=score7;
dis();
}
else if(a8==0)
{
second=score8;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score8+=1;if(score8==99)score8=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score8-=1;if(score8==0)score8=60;}
second=score8;
dis();
}
if(k==0){i=0;t=0;second=29;beep=1;delay(500);beep=0;TR0=1;}
while(!k);
}
}
}
}
3.2.2 定時(shí)器子程序
void Timer()
{
TMOD|=0x01;
TH0=0xd8; //初值55536,計(jì)數(shù)10000次,每次1US,總計(jì)10ms
TL0=0xf0;
IE=0x82; //這里是中斷優(yōu)先級(jí)控制EA=1(開(kāi)總中斷),ET0=1(定時(shí)器0允許中斷),這里用定時(shí)器0來(lái)定時(shí)
TR0=1;
}
void tim(void) interrupt 1 using 1 //為定時(shí)中斷TR0
{
TH0=0xd8; //重新賦值
TL0=0xf0;
count++;
if(count==100) //100*10ms=1秒
{
count=0;
second--; //秒減1
}
}
3.2.3 延時(shí)子程序
void delay(uint z) //延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
3.2.4 顯示子程序
void display (uchar shiwei,gewei,xuanshou) //顯示函數(shù)
{
P2=0xfe; //打開(kāi)顯示時(shí)間十位的位選
P0=shiwei;//顯示十位
delay(5);
P2=0xfd; //個(gè)位位選
P0=gewei;
delay(5);
P2=0xf7; //選手位選
P0=xuanshou;
delay(5);
}
第4章 系統(tǒng)調(diào)試
軟件的設(shè)計(jì)與調(diào)試實(shí)行分模塊實(shí)現(xiàn)的方法。本設(shè)計(jì)軟件調(diào)試中的分模塊包括顯示功能模塊,調(diào)整時(shí)間功能模塊,搶答功能模塊以及報(bào)警功能模塊。各個(gè)獨(dú)立模塊功能調(diào)試成功后,將這些模塊程序通過(guò)主程序合并在一起,最后再對(duì)合并后的總程序進(jìn)行調(diào)試。各軟件模塊首先要通過(guò)PC和仿真器進(jìn)行軟件調(diào)試,當(dāng)仿真效果符合要求后在燒寫(xiě)進(jìn)單片機(jī)看是否在實(shí)際電路板上正常工作。本設(shè)計(jì)通過(guò)利用Proteus仿真,將所編寫(xiě)的程序用wave軟件編譯,所仿真原理圖見(jiàn)附錄。
第5章 結(jié)論
自接觸單片機(jī)以來(lái),一直覺(jué)得單片機(jī)非常難,這次的課程設(shè)計(jì)我開(kāi)始是以老師布置題目為主要選擇對(duì)象的,但是后面發(fā)現(xiàn),像八路搶答器在我腦海中根本沒(méi)得一點(diǎn)意象,上網(wǎng)搜了很多資料,也感覺(jué)不怎么很懂,于是問(wèn)老師怎么弄,后面發(fā)現(xiàn)老師的意見(jiàn)和我的原本的程序和圖只有幾個(gè)地方不同,于是便將兩者綜合了一下,經(jīng)調(diào)試和運(yùn)行后,發(fā)現(xiàn)還行的通,于是便開(kāi)始了忐忑的正文模版之路,以為快搞完了,后面發(fā)現(xiàn)其實(shí)程序和圖還是要細(xì)細(xì)的弄懂才能寫(xiě)好報(bào)告,于是我又將程序和圖細(xì)細(xì)的剖析了一遍,慢慢的畫(huà)出流程圖,然后慢慢將流程圖和proteus圖畫(huà)好和截取下來(lái),經(jīng)過(guò)最近這段時(shí)間的在電腦前面的駐守,覺(jué)得只要自己肯付出和努力,發(fā)現(xiàn)其實(shí)很多的東西不是那么難懂的,以后還是要好好提升自己的動(dòng)手能力和獨(dú)立思考的能力。
在此,還是非常感謝我們的指導(dǎo)老師,她是一位很負(fù)責(zé)和很細(xì)心的老師,謝謝她的輔導(dǎo)和鼓勵(lì),這次的課程設(shè)計(jì)給了我一個(gè)很好的開(kāi)始,我會(huì)好好努力的以后??v然課程設(shè)計(jì)是學(xué)校所要求的科目,縱然每次都這么緊張和辛苦,但是我還是覺(jué)得有些東西做了,就一定會(huì)有一定的價(jià)值吧。
參考文獻(xiàn)資料
[1] 張迎新. 《單片機(jī)初級(jí)教程》.北京航天航空大學(xué)出版社 2000年.
[2] 康華光. 《電子技術(shù)基礎(chǔ)(模擬部分)》.第四版 高等教育出版社 1999年.
[3] 喻宗泉. 《單片機(jī)原理與應(yīng)用技術(shù)》.西安電子科技大學(xué)出版社 2005年.
[4] 萬(wàn)光毅. 《單片機(jī)實(shí)驗(yàn)與實(shí)踐教程》. 北京航天航空大學(xué)出版社 2003年.
[5] 張俊謨. 《單片機(jī)初級(jí)教程》.北京航天航空大學(xué)出版社 2000年.
附錄一
搶答器程序
#include
#define uchar unsigned char
#define uint unsigned int
sbit m1=P3^1; //主持人按鍵答對(duì)加分,按一下加一分
sbit m2=P3^2; //答錯(cuò)減分
sbit k1=P1^0;
sbit k2=P1^1;
sbit k3=P1^2;
sbit k4=P1^3;
sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7; //選手按鍵
sbit k=P3^0; //主持人按鍵開(kāi)始
sbit beep=P3^7; //蜂鳴器
uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77}; //0-9代碼
uchar shiwei,gewei,xuanshou,count,i,second;
uchar score1,score2,score3,score4,score5,score6,score7,score8;//選手1~8的分?jǐn)?shù)
uint t,m,n,a,a1,a2,a3,a4,a5,a6,a7,a8;
void Timer()
{
TMOD|=0x01;
TH0=0xd8; //初值55536,計(jì)數(shù)10000次,每次1US,總計(jì)10ms
TL0=0xf0;
IE=0x82; //這里是中斷優(yōu)先級(jí)控制EA=1(開(kāi)總中斷),ET0=1(定時(shí)器0允許中斷),這里用定時(shí)器0來(lái)定時(shí)
TR0=1;
}
void tim(void) interrupt 1 using 1 //為定時(shí)中斷TR0
{
TH0=0xd8; //重新賦值
TL0=0xf0;
count++;
if(count==100) //100*10ms=1秒
{
count=0;
second--; //秒減1
}
}
void delay(uint z) //延時(shí)函數(shù)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void display (uchar shiwei,gewei,xuanshou) //顯示函數(shù)
{
P2=0xfe; //打開(kāi)顯示時(shí)間十位的位選
P0=shiwei;//顯示十位
delay(5);
P2=0xfd; //個(gè)位位選
P0=gewei;
delay(5);
P2=0xf7; //選手位選
P0=xuanshou;
delay(5);
}
void dis(void)
{
shiwei=tab[second/10];
gewei=tab[second%10];
xuanshou=tab[i];
display (shiwei,gewei,xuanshou);
}
void init() //初始化函數(shù)
{
P2=0x04;
P0=0x3f;
t=0;
beep=0;
i=0;
second=29;
score1=60;
score2=60;
score3=60;
score4=60;
score5=60;
score6=60;
score7=60;
score8=60;
a1=1;
a2=1;
a3=1;
a4=1;
a5=1;
a6=1;
a7=1;
a8=1;
}
void main()
{
init();
if(k==0) //主持人按下開(kāi)始鍵
{
Timer();
delay(10);
while(!k);
while(1)
{
dis();
m=0;
n=0;
if(second==10){beep=1;delay(500);beep=0;}
if(second==0) {
TR0=0;n=1;
if(k==0)
{beep=1;delay(500);beep=0;second=29;TR0=1;m=1;}
}
if(n==0)
{
if(k1==0) {delay(5);if(k1==0);while(!k1);t=1;}
else if(k2==0) {delay(5);if(k2==0);while(!k2);t=2;}
else if(k3==0) {delay(5);if(k3==0);while(!k2);t=3;}
else if(k4==0) {delay(5);if(k4==0);while(!k2);t=4;}
else if(k5==0) {delay(5);if(k5==0);while(!k2);t=5;}
else if(k6==0) {delay(5);if(k6==0);while(!k2);t=6;}
else if(k7==0) {delay(5);if(k7==0);while(!k2);t=7;}
else if(k8==0) {delay(5);if(k8==0);while(!k2);t=8;}
else if(k==0) {delay(5);if(k==0);while(!k);t=0;i=0;second=29;beep=1;delay(500);beep=0;TR0=1;}
}
while(t)
{
if(m==0) //開(kāi)關(guān),保證程序只執(zhí)行一次
{
switch(t)
{
case 1:
{
TR0=0;i=1;second=0;beep=1;delay(500);beep=0;
a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 2:
{
TR0=0;i=2;second=0;beep=1;delay(500);beep=0;
a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 3:
{
TR0=0;i=3;second=0;beep=1;delay(500);beep=0;
a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 4:
{
TR0=0;i=4;second=0;beep=1;delay(500);beep=0;
a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;break;
}
case 5:
{
TR0=0;i=5;second=0;beep=1;delay(500);beep=0;
a5=0;a1=1;a2=1;a3=1;a4=1;a6=1;a7=1;a8=1;m=1;break;
}
case 6:
{
TR0=0;i=6;second=0;beep=1;delay(500);beep=0;
a6=0;a1=1;a2=1;a3=1;a4=1;a5=1;a7=1;a8=1;m=1;break;
}
case 7:
{
TR0=0;i=7;second=0;beep=1;delay(500);beep=0;
a7=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a8=1;m=1;break;
}
case 8:
{
TR0=0;i=8;second=0;beep=1;delay(500);beep=0;
a8=0;a1=1;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;m=1;break;
}
}
}
if(a1==0) //選手1的分?jǐn)?shù)
{ second=score1;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score1+=1;if(score1==99)score1=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score1-=1;if(score1==0)score1=60;}
dis();
}
else if(a2==0)
{ second=score2;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score2+=1;if(score2==99)score2=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score2-=1;if(score2==0)score2=60;}
dis();
}
else if(a3==0)
{ second=score3;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score3+=1;if(score3==99)score3=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score3-=1;if(score3==0)score3=60;}
second=score3;
dis();
}
else if(a4==0)
{
second=score4;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=1;delay(100);beep=0;score4+=1;if(score4==99)score4=60;}
else if(m2==0) {delay(5);if(m2==0);while(!m2);beep=1;delay(100);beep=0;score4-=1;if(score4==0)score4=60;}
second=score4;
dis();
}
else if(a5==0)
{
second=score5;
dis();
if(m1==0) {delay(5);if(m1==0);while(!m1);beep=
收藏