版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 交通與汽車工程學(xué)院</b></p><p><b> 課程設(shè)計說明書</b></p><p> 課 程 名 稱: 微機(jī)原理及應(yīng)用課程設(shè)計 </p><p> 課 程 代 碼: 8234570 </p><p>
2、題 目: 基于單片機(jī)的八路智能搶答器 </p><p> 年級/專業(yè)/班: 2009級/車輛工程/汽電(3)班 </p><p> 學(xué) 生 姓 名: 何 彥 希 </p><p> 學(xué) 號: 332009030606112 </p><p> 開 始
3、時 間: 2012 年 07 月 02 日</p><p> 完 成 時 間: 2012 年 07 月 06 日</p><p><b> 課程設(shè)計成績:</b></p><p> 指導(dǎo)教師簽名: 年 月 日</p><p><b&g
4、t; 目 錄</b></p><p><b> 摘 要2</b></p><p><b> 1 引 言3</b></p><p> 1.1 問題的提出3</p><p> 1.2任務(wù)與分析3</p><p> 2 系統(tǒng)方案設(shè)計3<
5、;/p><p> 2.1 系統(tǒng)設(shè)計方案3</p><p> 2.2 系統(tǒng)總體框圖4</p><p> 3 系統(tǒng)硬件電路設(shè)計4</p><p> 3.1 AT89S51單片機(jī)4</p><p> 3.2 74LS373鎖存器6</p><p> 4 系統(tǒng)軟件設(shè)計7</p&
6、gt;<p> 4.1 proteus軟件環(huán)境介紹7</p><p> 4.2 Protel軟件環(huán)境介紹8</p><p> 4.3系統(tǒng)軟件分析8</p><p> 4.3.1 搶答器顯示模塊選擇8</p><p> 4.3.2控制器選擇9</p><p> 4.3.3 鍵盤選擇1
7、0</p><p> 4.3.4時鐘頻率電路的設(shè)計10</p><p> 4.3.5復(fù)位電路的設(shè)計11</p><p> 4.3.6 報警電路11</p><p> 4.4 程序流程圖12</p><p> 4.4.1主程序流程圖:12</p><p> 4.4.2 中斷流
8、程圖:12</p><p> 4.4.3 搶答時間調(diào)整流程圖13</p><p> 5 系統(tǒng)調(diào)試過程14</p><p> 5.1 繪制protel原理圖14</p><p> 5.2 ERC電氣規(guī)則檢查14</p><p> 5.3 生成PCB圖15</p><p>
9、5.4 protues調(diào)試15</p><p><b> 結(jié) 論16</b></p><p><b> 致 謝17</b></p><p><b> 參考文獻(xiàn)18</b></p><p> 附C語言程序:19</p><p><
10、;b> 摘 要</b></p><p> 隨著科學(xué)技術(shù)的發(fā)展和普及,各種各樣的競賽越來越多,其中搶答器的作用也越來越重要。本文設(shè)計出以AT89C51單片機(jī)為核心的八路搶答器,采用了數(shù)字顯示器直接指示,自動鎖存顯示結(jié)果,并自動復(fù)位的設(shè)計思想,它能根據(jù)不同的搶答輸入信號,經(jīng)過單片機(jī)的控制處理并產(chǎn)生不同的與輸入信號相對應(yīng)的輸出信號,最后通過LED數(shù)碼管顯示相應(yīng)的路數(shù),即使兩組的搶答時間相差幾微秒
11、,也可分辨出是哪組優(yōu)先按下的按鍵,充分利用了單片機(jī)系統(tǒng)結(jié)構(gòu)簡單、功能強(qiáng)大、可靠性好、實用性強(qiáng)的特點。</p><p> 本設(shè)計是以搶答為出發(fā)點??紤]到依需設(shè)定限時回答的功能,利用AT89C51單片機(jī)及外圍接口實現(xiàn)的搶答系統(tǒng),利用單片機(jī)的定時器/計數(shù)器定時和記數(shù)的原理,將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計時,同時使數(shù)碼管能夠正確地顯示時間。用開關(guān)做鍵盤輸出,揚(yáng)聲器發(fā)生提示。同時系統(tǒng)能夠?qū)崿F(xiàn):在搶答中
12、,只有開始后搶答才有效,如果在開始搶答前搶答為無效;滿時后系統(tǒng)計時自動復(fù)位及主控強(qiáng)制復(fù)位;按鍵鎖定,在有效狀態(tài)下,按鍵無效。</p><p> 【關(guān)鍵詞】搶答器 單片機(jī) LED數(shù)碼顯示管 定時器/計數(shù)器 揚(yáng)聲器。</p><p><b> 1 引 言 </b></p><p> 1.1 問題的提出 </p>
13、<p> 而隨著技術(shù)的進(jìn)步,單片機(jī)與串口通信的結(jié)合更多地應(yīng)用到各個電子系統(tǒng)中已成一種趨勢。本設(shè)計就是基于單片機(jī)設(shè)計搶答系統(tǒng),通過串口通信動態(tài)傳輸數(shù)據(jù),使搶答系統(tǒng)有了更多更完善的功能。單片機(jī)系統(tǒng)的硬件結(jié)構(gòu)給予了搶答系統(tǒng)“身軀”,而單片機(jī)的應(yīng)用程序賦予了其新的“生命”,使其在傳統(tǒng)的搶答器面前具有電路簡單、成本低、運(yùn)行可靠等特色?,F(xiàn)如今電視節(jié)目日益豐富其中的競賽環(huán)節(jié)也越來越多,其中智力搶答器是不可或缺的器材。在本學(xué)期學(xué)習(xí)了單片
14、機(jī)這門課之后,我們小組成員覺得可以試著自己來實現(xiàn)搶答器的功能,令它能準(zhǔn)確、公正、直觀地判斷出第一搶答者,并通過搶答器的數(shù)碼管顯示和蜂鳴器報警指出搶答組別。我們最終做出一種數(shù)字式搶答器的設(shè)計方案,通過Proteus設(shè)計完成,利用KEIL軟件編輯程序,仿真驗證,適用于多種競賽場合。</p><p> 本設(shè)計基于單片機(jī)技術(shù)原理,以單片機(jī)芯片AT89C51作為核心控制器,通過硬件電路的制作以及軟件程序的編制,設(shè)計制作出
15、一個多功能數(shù)字時鐘系統(tǒng)。該時鐘系統(tǒng)主要由時鐘模塊、數(shù)碼管顯示模塊、鍵盤控制模塊以及信號提示模塊組成。系統(tǒng)具有簡單清晰的操作界面,可隨時進(jìn)行時間調(diào)整。同時,該時鐘系統(tǒng)還具有功耗小、成本低的特點,具有很強(qiáng)的實用性。由于系統(tǒng)所用元器件較少,單片機(jī)所被占用的I/O口不多,因此系統(tǒng)具有一定的可擴(kuò)展性。</p><p><b> 1.2任務(wù)與分析 </b></p><p>
16、此次設(shè)計提出了用AT89S51單片機(jī)為核心控制元件首先,在Protel軟件環(huán)境中進(jìn)行硬件電路圖的設(shè)計。然后在AT89S51軟件環(huán)境中進(jìn)行系統(tǒng)的軟件編程,并進(jìn)行程序源文件的編譯和調(diào)試,最后生成.hex文件。此.hex文件是硬件電路運(yùn)行實現(xiàn)的源代碼來源。把.hex文件加載到AT89C51單片機(jī)芯片,然后在Proteus軟件環(huán)境中運(yùn)行硬件電路,能實現(xiàn)搶答倒計時、信號鎖存的功能。</p><p><b> 具
17、體任務(wù):</b></p><p> 1. 搶答器可同時供8名選手或8個代表隊比賽,分別用8個按鍵S1~S8進(jìn)行搶答。</p><p> 2. 具有清零和非法搶答控制功能,并由主持人操縱,避免選手在主持人按“開始”前提前搶答,違反規(guī)則 。</p><p> 3. 當(dāng)主持人啟動“開始搶答鍵”后,定時器進(jìn)行減計時,在20S內(nèi)無人搶答表示所有參賽選手或參賽
18、隊對本題棄權(quán),搶答時間耗盡后禁止搶答。</p><p> 4. 倒計時5S時,如果仍無人搶答,則系統(tǒng)每1S報警一次,用以提示參賽選手。</p><p> 5. 搶答器具有鎖存與顯示功能。即選手按下按鍵,鎖存相應(yīng)選手的參賽號碼,并在LED數(shù)碼管上顯示。選手搶答實行優(yōu)先鎖存,其他按鍵者將不能響應(yīng),以便公平地選擇第一個搶答者。</p><p> 6. 倒計時期間,如
19、果主持人想終止倒計時,可以按下“停止”按鍵,系統(tǒng)會自動進(jìn)入準(zhǔn)備狀態(tài)。</p><p><b> 2 系統(tǒng)方案設(shè)計</b></p><p> 2.1 系統(tǒng)設(shè)計方案</p><p> 總體方框圖如圖1所示。工作原理:接通電源后,主持人將開關(guān)撥到“清除”狀態(tài),搶答器處于禁止?fàn)顟B(tài),編號顯示器滅燈,定時器顯示設(shè)定時間;主持人將開關(guān)撥到”開始&quo
20、t;狀態(tài),宣布"開始"搶答器工作。定時器倒計時,揚(yáng)聲器給出聲響提示。選手在定時時間內(nèi)搶答時,搶答器完成:優(yōu)先判斷、編號鎖存、編號顯示、揚(yáng)聲器提示。當(dāng)一輪搶答之后,定時器停止、禁止二次搶答、定時器顯示剩余時間。如果再次搶答必須由主持人再次操作"清除"或者"開始"狀態(tài)開關(guān)。</p><p> 2.2 系統(tǒng)總體框圖</p><p>
21、 圖2-1 系統(tǒng)總體框圖</p><p> 3 系統(tǒng)硬件電路設(shè)計</p><p> 3.1 AT89S51單片機(jī)</p><p> AT89S51單片機(jī)是美國Atmel公司生產(chǎn)低電壓,高性能CMOS 8位單片機(jī),片內(nèi)含4k bytes的可反復(fù)擦寫的只讀程序存儲器(EPROM)和128 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用Atmel公司的高密度、非
22、易失性存取技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器(CPU)和Flash 存儲單元,功能強(qiáng)大。AT89S51單片機(jī)可提供許多高性價比的應(yīng)用場合,可靈活應(yīng)用于各種控制領(lǐng)域。</p><p> 圖3-1為AT89S51單片機(jī)的基本組成功能方塊圖。由圖可見,在這一塊芯片上,集成了一臺微型計算機(jī)的主要組成部分,其中包括CPU、存儲器、可編程I/O口、定時器/計數(shù)器、串行口等,各部分通過內(nèi)部總線相
23、連。下面介紹幾個主要部分。</p><p> 圖 3-1 單片機(jī)結(jié)構(gòu)框圖</p><p><b> 單片機(jī)管腳說明:</b></p><p> 圖 3-2 AT89S51單片機(jī)管腳圖</p><p> ATMEL公司的AT89S51是一種高效微控制器。采用40引腳雙列直插封裝形式。AT89S51單片機(jī)是高性能
24、單片機(jī),因為受引腳數(shù)目的限制,所以有不少引腳具有第二功能。</p><p><b> VCC:供電電壓。</b></p><p><b> GND:接地。</b></p><p> P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程
25、序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FLASH編程時,P0 口作為原碼輸入口,當(dāng)FLASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉高。</p><p> P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作
26、為第八位地址接收。 </p><p> P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TTL門電流,當(dāng)P2口被寫1時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址1時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存
27、儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><p> P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入1后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流。</p><p> P3口也可作為AT89S51的一些特殊功能口,如下表
28、所示:</p><p> P3口管腳 備選功能</p><p> P3.0 RXD(串行輸入口)</p><p> P3.1 TXD(串行輸出口)</p><p> P3.2 INT0(外部中斷0)</p><p> P3.3 INT1(外部中斷1)</p><p> P3.4 T0
29、(記時器0外部輸入)</p><p> P3.5 T1(記時器1外部輸入)</p><p> P3.6 (外部數(shù)據(jù)存儲器寫選通)</p><p> P3.7 (外部數(shù)據(jù)存儲器讀選通)</p><p> P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p> ALE/:當(dāng)訪問外部存儲器時,地址鎖存允
30、許端的輸出電平用于鎖存地址的地址字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。</p><p> PSEN:外部
31、程序存儲器的選通信號端。在由外部程序存儲器取指期間,每個機(jī)器周期兩次PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。</p><p> /VP:當(dāng)保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,將內(nèi)部鎖定為RESET;當(dāng)端保持高電平時,此間內(nèi)部程序存儲器。在FLASH編程期間,此引腳也用于施加12V編程電源。</p&
32、gt;<p> XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p> XTAL2:反向振蕩器的輸出,如采用外部時鐘源驅(qū)動器件,應(yīng)不接。</p><p> 3.2 74LS373鎖存器</p><p> 74LS373是八D鎖存器(3S,鎖存允許輸入有回環(huán)特性) ,常應(yīng)用在地址鎖存及輸出口的擴(kuò)展中。簡要說明:
33、SN74LS373, SN74LS374 常用的8d鎖存器,常用作地址鎖存和i/o輸出. 可以用74hc373代換. 74LS373是低功耗肖特基TTL8D鎖存器,74H373是高速CMOS器件,功能與74LS373相同,兩者可以互換。74LS373內(nèi)有8個相同的D型(三態(tài)同相)鎖存器,由兩個控制端(11腳G或EN;1腳OUT、CONT、OE)控制。當(dāng)OE接地時,若G為高電平,74LS373接收由PPU輸出的地址信號;如果G為低電平,
34、則將地址信號鎖存。</p><p> 工作原理:74LS373的輸出端O0~O7可直接與總線相連。當(dāng)三態(tài)允許控制端OE為低電平時,O0~O7為正常邏輯狀態(tài),可用來驅(qū)動負(fù)載或總線。當(dāng)OE為高電平時,O0~O7呈高阻態(tài),即不驅(qū)動總線,也不為總線的負(fù)載,但鎖存器內(nèi)部的邏輯操作不受影響。 當(dāng)鎖存允許端LE為高電平時,O隨數(shù)據(jù)D而變。當(dāng)LE為低電平時,O被鎖
35、存在已建立的數(shù)據(jù)電平。</p><p> 圖3-3 74LS373引腳(管腳)</p><p> 圖3-4 74LS373內(nèi)部邏輯</p><p><b> 4 系統(tǒng)軟件設(shè)計</b></p><p> 4.1 proteus軟件環(huán)境介紹</p><p> 本系統(tǒng)的硬件設(shè)計首先是在Prot
36、eus軟件環(huán)境中仿真實現(xiàn)的。Proteus軟件是來自英國Labcenter electronics公司的EDA工具軟件,Proteus軟件有十多年的歷史,在全球廣泛使用,除了具有和其它EDA工具一樣的原理布圖、PCB自動或人工布線及電路仿真的功能外,其革命性的功能是,它的電路仿真是互動的。針對微處理器的應(yīng)用,還可以直接在基于原理圖的虛擬原型上編程,并實現(xiàn)軟件源碼級的實時調(diào)試。如果有顯示及輸出,配合系統(tǒng)配置的虛擬儀器如示波器、邏輯分析儀等
37、,還能看到運(yùn)行后輸入輸出的效果。Proteus建立了完備的電子設(shè)計開發(fā)環(huán)境,尤其重要的是Proteus Lite可以完全免費(fèi),也可以花微不足道的費(fèi)用注冊達(dá)到更好的效果[2]。</p><p> Proteus是目前最好的模擬單片機(jī)外圍器件的工具??梢苑抡?1系列、AVR、PIC等常用的MCU及其外圍電路(如LCD,RAM,ROM,鍵盤,馬達(dá),LED,AD/DA,部分SPI器件,部分IIC器件...)。其實Pro
38、teus 與 multisim比較類似,只不過它可以仿真MCU,當(dāng)然,軟件仿真精度有限,而且不可能所有的器件都找得到相應(yīng)的仿真模型,用開發(fā)板和仿真器當(dāng)然是最好選擇,可是初學(xué)者擁有它們的可能性比較小。當(dāng)然,硬件實踐還是必不可少的。在沒有硬件的情況下,Proteus能像pspice 仿真模擬/數(shù)字電路那樣仿真MCU及外圍電路。另外,即使有硬件,在程序編寫早期用軟件仿真一下也是很有必要的。Proteus軟件主要具有以下幾個方面的特點:<
39、/p><p> 1、設(shè)計和仿真軟件Proteus 是一個很有用的工具,它可以幫助學(xué)生和專業(yè)人士提高他們的模擬和數(shù)字電路的設(shè)計能力。</p><p> 2、它允許對電路設(shè)計采用圖形環(huán)境,在這種環(huán)境中,可以使用一個特定符號來代替元器件,并完成不會對真實電路造成任何損害的電路仿真操作。</p><p> 3、它可以仿真儀表以及可描述在仿真過程中所獲得的信號的圖表。<
40、;/p><p> 4、它可以仿真目前流行的單片機(jī),如PICS, ATMEL-AVR, MOTOROLA, 8051 等。</p><p> 5、在設(shè)計綜合性方案中,還可以利用ARES開發(fā)印制電路板。</p><p> 4.2 Protel軟件環(huán)境介紹</p><p> Protel印制板設(shè)計軟件包是澳大利亞protel technolog
41、y公司與1990年推出的電子CAD產(chǎn)品,具有方便、易學(xué)、實用、快速以及高速度、高步通率的特點。它采用了分層次下拉窗口菜單結(jié)構(gòu)形式,用戶基本上不需要記背太多的鍵盤命令,用鼠標(biāo)點擊菜單命令就能操作,protel有著很高的自動布線布通率。布通率是電子產(chǎn)CAD產(chǎn)品的一項重要指標(biāo),它反映電子元件在電路圖中連接關(guān)系有多少能在印刷版圖中實現(xiàn)。在設(shè)計常用的單、雙面印制板時只要選擇適當(dāng)?shù)脑季趾筒季€策略方法,protel就可以輕易的達(dá)到98%-100%
42、的布通率。對于極少數(shù)不能布通的定方,protel可以用飛線指示出來,引導(dǎo)用戶用手工方法連通。另外,protel有強(qiáng)大的宏命令設(shè)置功能,利用宏命令功能多定義的熱鍵可以大大提高操作速度[1]。</p><p> Protel對微機(jī)的軟硬件配置要求很低:cpu在8088以上,dos2.0以上版本,內(nèi)存640kb以上,雙軟件(或一個軟件一個硬盤),單色顯示器(多層板設(shè)計時最好用彩色),各種兼容打印機(jī)。也能在Window
43、s9X平臺的模擬DOS下運(yùn)行。</p><p> Protel已成為印制板設(shè)計加工方面的工業(yè)標(biāo)準(zhǔn)。據(jù)初步統(tǒng)計protel在CAD的市場占有率達(dá) 95%,成為電子產(chǎn)品制造業(yè)界的首選CAD軟件。</p><p> 4.3系統(tǒng)軟件分析 </p><p> 任何一個應(yīng)用系統(tǒng),它們都有著自己的硬件系統(tǒng)和軟件系統(tǒng),少了任何一個部分都不可能稱之為一個完整的應(yīng)用系統(tǒng),它們之間
44、是相互依存的一個整體,硬件系統(tǒng)是軟件系統(tǒng)的一個基礎(chǔ)和前提,為軟件系統(tǒng)提供了一個操作平臺;而軟件系統(tǒng)是硬件系統(tǒng)的靈魂,它對硬件系統(tǒng)起到擴(kuò)充和完善的作用??上攵浖到y(tǒng)與硬件系統(tǒng)同等重要,下面為系統(tǒng)軟件設(shè)計過程:</p><p> 4.3.1 搶答器顯示模塊選擇</p><p> 顯示模塊主要是顯示搶答的時間,組別號碼等。</p><p> 在使用傳統(tǒng)的數(shù)碼管顯
45、示。數(shù)碼管具有:低能耗、低損耗、低壓、壽命長、耐老化、防曬、防潮、防火、防高(低)溫,對外界環(huán)境要求低,易于維護(hù),同時其精度高,稱量快,精確可靠,操作簡單。數(shù)碼顯示是采用BCD編碼顯示數(shù)字,程序編譯容易,資源占用較少。</p><p> 顯示功能與硬件關(guān)系極大,當(dāng)硬件固定后,如何在不引起操作者誤解的前提下提供盡可能豐富的信息,全靠軟件來解決。在這里我們使用的是七段數(shù)碼管顯示,通常在顯示上我們采用的方法一般包括兩
46、種:一種是靜態(tài)顯示,一種是動態(tài)顯示。其中靜態(tài)顯示的特點是顯示穩(wěn)定不閃爍,程序編寫簡單,但占用端口資源多;動態(tài)顯示的特點是:顯示穩(wěn)定性沒靜態(tài)好,程序編寫復(fù)雜,但是相對靜態(tài)顯示而言占用端口資源少。在本設(shè)計中根據(jù)實際情況采用的是動態(tài)顯示方法。4位七段數(shù)碼管顯示電路如下圖所示。</p><p> 圖 4-1 4位七段數(shù)碼管顯示電路圖</p><p> 上圖中數(shù)碼管采用的是4位一體七段共陽數(shù)
47、碼管,其中A~H段分別接到單片機(jī)的P0口,由單片機(jī)輸出的P0口數(shù)據(jù)來決定段碼值,位選碼COM1, COM2,COM3,COM4分別接到單片機(jī)的P2.0,P2.1,P2.2 ,P2.,3,由單片機(jī)來決定當(dāng)前該顯示的是哪一位。在圖中還有一個排阻,連接在P0口上,用作P0口的上拉電阻,保證P0口沒有數(shù)據(jù)輸出時候處于高電平狀態(tài)。</p><p> 通過查表法,將其在數(shù)碼管上顯示出來,其中P0口為字型碼輸入端,P2口低4
48、位為字選段輸入段。在這里我們通過查表將字型碼送給7段數(shù)碼管顯示的數(shù)字。</p><p> 4.3.2控制器選擇</p><p> 控制器主要用于對顯示、搶答、音樂、計分等模塊進(jìn)行控制。</p><p> 采用ATMEL公司的AT89S51作為系統(tǒng)控制器的CPU方案。單片機(jī)算術(shù)運(yùn)算功能強(qiáng),軟件編程靈活、自由度大,可以用軟件編程實現(xiàn)各種算法和邏輯控制,并且由于其功
49、耗低、體積小、技術(shù)成熟和成本低等優(yōu)點,使其在各個領(lǐng)域應(yīng)用廣泛。</p><p> 圖4-2 AT89S51元件圖</p><p> 4.3.3 鍵盤選擇</p><p> 鍵盤是單片機(jī)不可缺少的輸入設(shè)備,是實現(xiàn)人機(jī)對話的紐帶。鍵盤按結(jié)構(gòu)形式可以分為非編碼鍵盤和編碼鍵盤,前者用軟件方法產(chǎn)生鍵碼,而后者則用硬件方法來產(chǎn)生鍵碼。在單片機(jī)中使用的都是非編碼鍵盤,因為非
50、編碼鍵盤結(jié)構(gòu)簡單,成本低廉,非編碼鍵盤的類型很多,常用的有獨(dú)立式鍵盤,行列式鍵盤等。</p><p> 本設(shè)計采用獨(dú)立式鍵盤</p><p> 鍵盤接口中使用多少根I/O線,鍵盤中就有幾個按鍵,鍵盤接口使用了8根I/O口線,該鍵盤就有8個按鍵,這種類型的鍵盤,其按鍵比較少,且鍵盤中各按鍵的工作互不干擾。因此可以根據(jù)實際需要對鍵盤中的按鍵靈活的編碼。如圖2-2。</p>
51、<p> 最簡單的編碼方式就是根據(jù)I/O輸入口所直接反映的相應(yīng)按鍵,按下的狀態(tài)進(jìn)行編碼,稱按鍵直接狀態(tài)碼,對于這樣編碼的獨(dú)立式鍵盤,CPU可以通過直接讀取I/O口的狀態(tài)來獲取按鍵的直接狀態(tài)編碼值,根據(jù)這個值直接進(jìn)行按鍵識別,這樣形式的鍵盤結(jié)構(gòu)簡單,按鍵識別容易。</p><p> 獨(dú)立式鍵盤的缺點是需要占用比較多的I/O口線,當(dāng)單片機(jī)應(yīng)用系統(tǒng)鍵盤中需要的按鍵比較少或I/O口線比較富余時,可以采用這樣
52、類型的鍵盤。 </p><p> 圖 4-3 搶答按鍵及調(diào)整按鍵</p><p> 4.3.4時鐘頻率電路的設(shè)計</p><p> 單片機(jī)必須在時鐘的驅(qū)動下才能工作。在單片機(jī)內(nèi)部有一個時鐘振蕩電路,只需要外接一個振蕩源就能產(chǎn)生一定的時鐘信號送到單片機(jī)內(nèi)部的各個單元,決定單片機(jī)的工作速度。時鐘電路如下圖所示。</p><p> 圖4-
53、4 外部振蕩源電路</p><p> 一般選用石英晶體振蕩器。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時鐘信號,其振蕩頻率主要由石英晶振的頻率確定。電路中兩個電容C1,C2的作用有兩個:一是幫助振蕩器起振;二是對振蕩器的頻率進(jìn)行微調(diào)。</p><p> 單片機(jī)在工作時,由內(nèi)部振蕩器產(chǎn)生或由外直接輸入的送至內(nèi)部控制邏輯單元的時鐘信號的周期稱
54、為時鐘周期。其大小是時鐘信號頻率的倒數(shù)。圖中時鐘頻率為12MHz。</p><p> 4.3.5復(fù)位電路的設(shè)計 </p><p> 單片機(jī)的第9腳RST為硬件復(fù)位端,只要將該端持續(xù)4個機(jī)器周期的高電平即可實現(xiàn)復(fù)位,復(fù)位后單片機(jī)的各狀態(tài)都恢復(fù)到初始化狀態(tài),其電路圖如下所示:</p><p><b> 圖4-5 復(fù)位電路</b></p&
55、gt;<p> 4.3.6 報警電路</p><p> 我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個口線的“高”電平或低電平,則在該口線上就能產(chǎn)生一定頻率的巨型波,接上喇叭就能發(fā)出一定頻率的聲音,若再利用延時程序控制“高”“低”電平的持續(xù)時間,就能改變輸出頻率,從而改變音調(diào),使喇叭發(fā)出不同的聲音。</p><p> 本文設(shè)計如下圖所示。圖中單
56、片機(jī)的14腳輸出具有復(fù)合功能,此處用到了單片機(jī)14腳的IO端口功能,單片機(jī)通過內(nèi)部定時器的操作實現(xiàn)交替變換的波形輸出驅(qū)動揚(yáng)聲器發(fā)聲。</p><p> 圖 4-6 發(fā)聲電路</p><p><b> 4.4 程序流程圖</b></p><p> 4.4.1主程序流程圖:</p><p> 圖4-7 主程序流程圖
57、</p><p> 4.4.2 中斷流程圖:</p><p> 圖4-8 中斷流程圖</p><p> 4.4.3 搶答時間調(diào)整流程圖</p><p> 圖4-9搶答時間調(diào)整流程圖</p><p><b> 5 系統(tǒng)調(diào)試過程</b></p><p> 通過上面的
58、硬件設(shè)計和軟件設(shè)計過程,設(shè)計的工作已經(jīng)基本完成,接下來的工作就是對所設(shè)計好的應(yīng)用系統(tǒng)進(jìn)行調(diào)試。通過調(diào)試可以檢查出系統(tǒng)出現(xiàn)的一些錯誤,從而進(jìn)行下一步的修改。</p><p> 5.1 繪制protel原理圖 </p><p> 圖5-1 protel原理圖</p><p> 5.2 ERC電氣規(guī)則檢查</p><p> 圖5-2
59、ERC電氣規(guī)則檢查結(jié)果</p><p> 5.3 生成PCB圖</p><p> 圖5-4 系統(tǒng)PCB圖</p><p> 5.4 protues調(diào)試</p><p> 圖5-5 protues仿真圖</p><p><b> 結(jié) 論</b></p><p>
60、 本課程設(shè)計設(shè)了八路多功能搶答器,采用了通用的電子元器件,利用AT89S51單片機(jī)及外圍接口實現(xiàn)搶答系統(tǒng),利用單片機(jī)的定時器/計數(shù)器定時和記數(shù)的原理,將軟、硬件有機(jī)地結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計時,同時使數(shù)碼管能夠正確地顯示時間。單片機(jī)內(nèi)部程序用C語言進(jìn)行編寫。設(shè)計時,首先通過在KEIL環(huán)境中編程,然后調(diào)入protues 單片機(jī)中仿真,完全實現(xiàn)了設(shè)計功能。</p><p><b> 致 謝&l
61、t;/b></p><p> 在陳飛老師的指導(dǎo)下,我完成了本次設(shè)計。本設(shè)計從選題到完成,每一步都是在他的指導(dǎo)下完成的,傾注了老師大量的心血。另外,本設(shè)計的完成也離不開其他老師和各位同學(xué)給我的建議和幫助,是他們讓我明白了團(tuán)隊合作的精神。在此,我謹(jǐn)向陳飛老師和幫助過我的老師和同學(xué)們,表示崇高的敬意和衷心的感謝!</p><p><b> 參考文獻(xiàn)</b><
62、/p><p> [1]《Protel99SE EDA 技術(shù)及應(yīng)用》徐崢穎編著,北京:機(jī)械工業(yè)出版社,2005</p><p> [2]《單片機(jī)系統(tǒng)的protues設(shè)計與仿真》張靖武編著,北京:電子工業(yè)出版社,2007</p><p> [3]《單片機(jī)原理及接口技術(shù)》李朝青編著,北京:北京航空航天大學(xué)出版社,2005</p><p> [4
63、]《MCS-51單片機(jī)應(yīng)用開發(fā)實用子程序》邊春遠(yuǎn)編著,北京:人民郵電出版社,2005</p><p><b> 附C語言程序:</b></p><p> #include <reg51.h></p><p> #define uint unsigned int</p><p> #define uch
64、ar unsigned char</p><p> /*-----------------------------------------------------------</p><p> 共陰極數(shù)碼管編碼表 0 - f顯示</p><p> ---------------------------------------------------------
65、---*/</p><p> unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,</p><p> 0x92,0x82,0xf8,0x80,0x90,0x88,0x83,</p><p> 0xc6,0xa1,0x86,0x8e};</p><p> /*------------
66、-----------------------------------------------</p><p><b> 變量定義</b></p><p> ------------------------------------------------------------*/</p><p> sbit start= P3^6;&l
67、t;/p><p> sbit stop=P3^5;</p><p> sbit reset = P3^7;</p><p> sbit key1 = P1^0;</p><p> sbit key2 = P1^1;</p><p> sbit key3 = P1^2;</p><p>
68、sbit key4 = P1^3;</p><p> sbit key5 = P1^4;</p><p> sbit key6 = P1^5;</p><p> sbit key7 = P1^6;</p><p> sbit key8 = P1^7;</p><p> sbit buzzer = P3^4;&
69、lt;/p><p> bit start_flag = 0;</p><p> bit stop_flag=0;</p><p> bit key1_flag = 0;</p><p> bit key2_flag = 0;</p><p> bit key3_flag = 0;</p><p
70、> bit key4_flag = 0;</p><p> bit key5_flag = 0;</p><p> bit key6_flag = 0;</p><p> bit key7_flag = 0;</p><p> bit key8_flag = 0;</p><p> bit reset
71、_flag = 0;</p><p> bit action = 0;</p><p> uchar second = 30;</p><p> uchar timer0_count = 0;</p><p> uchar number = 0;</p><p> uchar number_display =
72、 0;</p><p> /*-----------------------------------------------------------</p><p><b> 延時函數(shù)</b></p><p> ------------------------------------------------------------*/&l
73、t;/p><p> void delay(uint z)</p><p> {uint x,y;</p><p> for(x=z;x>0;x--)</p><p> for(y=110;y>0;y--);}</p><p> /*-----------------------------------
74、------------------------</p><p><b> 數(shù)碼管顯示驅(qū)動函數(shù)</b></p><p> ------------------------------------------------------------*/</p><p> void display(uchar number,uchar secon
75、d)</p><p> {uchar second_first,second_second;</p><p> second_first = second / 10;</p><p> second_second = second % 10;</p><p> P2 = 0xfe;</p><p> P0 =
76、 0xbf;</p><p><b> delay(2);</b></p><p> P2 = 0xfd;</p><p> P0 = table[second_first];</p><p><b> delay(2);</b></p><p> P2 = 0xf
77、b;</p><p> P0 = table[second_second];</p><p><b> delay(2);</b></p><p> P2 = 0xf7;</p><p> P0 = table[number];</p><p> delay(2);}</p>
78、<p> /*-----------------------------------------------------------</p><p><b> 開始鍵掃描函數(shù)</b></p><p> ------------------------------------------------------------*/</p>
79、<p> void start_keyscan()</p><p> {if(start == 0)</p><p> {delay(8);</p><p> if((start == 0)&&(!start_flag))</p><p> {start_flag = 1;</p><p
80、> action = 1;</p><p> TR0 = 1;}}</p><p><b> else</b></p><p> {start_flag = 0;}}</p><p> /*---------------------------------------------------------
81、--</p><p><b> 八位搶答鍵掃描函數(shù)</b></p><p> ------------------------------------------------------------*/</p><p> uchar key_scan8()</p><p> {if(key1 == 0)</
82、p><p> {delay(8);</p><p> if((key1 == 0)&&(!key1_flag))</p><p> {key1_flag = 1;</p><p> number = 1;</p><p> number_display = number;}}</p>
83、<p><b> else</b></p><p> {key1_flag = 0;</p><p> number = 0;}</p><p> if(key2 == 0)</p><p> {delay(8);</p><p> if((key2 == 0)&
84、;&(!key2_flag))</p><p> {key2_flag = 1;</p><p> number = 2;</p><p> number_display = number;}}</p><p><b> else</b></p><p> {key2_flag
85、 = 0;</p><p> number = 0;}</p><p> if(key3 == 0)</p><p> {delay(8);</p><p> if((key3 == 0)&&(!key3_flag))</p><p> {key3_flag = 1;</p>
86、<p> number = 3;</p><p> number_display = number;}}</p><p><b> else</b></p><p> {key3_flag = 0;</p><p> number = 0;}</p><p> if(ke
87、y4 == 0)</p><p> {delay(8);</p><p> if((key4 == 0)&&(!key4_flag))</p><p> {key4_flag = 1;</p><p> number = 4;</p><p> number_display = number
88、;}}</p><p><b> else</b></p><p> {key4_flag = 0;</p><p> number = 0;}</p><p> if(key5 == 0)</p><p> {delay(8);</p><p> if((k
89、ey5 == 0)&&(!key5_flag))</p><p> {key5_flag = 1;</p><p> number = 5;</p><p> number_display = number;}}</p><p><b> else</b></p><p>
90、; {key5_flag = 0;</p><p> number = 0;}</p><p> if(key6 == 0)</p><p> {delay(8);</p><p> if((key6 == 0)&&(!key6_flag))</p><p> {key6_flag = 1
91、;</p><p> number = 6;</p><p> number_display = number;}}</p><p><b> else</b></p><p> {key6_flag = 0;</p><p> number = 0;}</p><
92、;p> if(key7 == 0)</p><p> {delay(8);</p><p> if((key7 == 0)&&(!key7_flag))</p><p> {key7_flag = 1;</p><p> number = 7;</p><p> number_dis
93、play = number;}}</p><p><b> else</b></p><p> {key7_flag = 0;</p><p> number = 0;}</p><p> if(key8 == 0)</p><p> {delay(8);</p><
94、;p> if((key8 == 0)&&(!key8_flag))</p><p> {key8_flag = 1;</p><p> number = 8;</p><p> number_display = number;}}</p><p><b> else</b></p&
95、gt;<p> {key8_flag = 0;</p><p> number = 0;}</p><p> if(number_display != 0)</p><p> {return 1;}</p><p><b> else</b></p><p> {ret
96、urn 0;}}</p><p> /*-----------------------------------------------------------</p><p><b> 復(fù)位鍵掃描函數(shù)</b></p><p> --------------------------------------------------------
97、----*/</p><p> void reset_keyscan()</p><p> {if(reset == 0)</p><p> {delay(8);</p><p> if((reset == 0)&&(!reset_flag))</p><p> {reset_flag = 1
98、;</p><p> number_display = 0;</p><p> second=30;}}</p><p><b> else</b></p><p> {reset_flag = 0;}}</p><p> void fengming() //蜂鳴函數(shù),脈寬t =
99、1ms 周期T = 2ms 頻率f = 0.5khz 實際發(fā)現(xiàn)延時1ms的時候效果最好</p><p><b> {//延時1ms</b></p><p> buzzer = 0; //給P3.7口送高電平</p><p> delay(100); //延時1ms</p><p> buzzer = 1;
100、</p><p> delay(100);}</p><p> /*-----------------------------------------------------------</p><p><b> 主函數(shù)</b></p><p> ---------------------------------
101、---------------------------*/</p><p> void main()</p><p> {TMOD=0x01;</p><p> TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p><b> E
102、A=1;</b></p><p><b> ET0=1;</b></p><p><b> TR0=0;</b></p><p><b> while(1)</b></p><p> {start_keyscan();</p><p>
103、; reset_keyscan();</p><p> while(action==1)</p><p> {if(second<=5&&second>0)</p><p> fengming() ;</p><p> while(!key_scan8()&&!stop==0)</p
104、><p> {display(number_display,second);</p><p> if(second == 0)</p><p> {second = 30;</p><p><b> break;}}</b></p><p><b> TR0 = 0;</b&
105、gt;</p><p> display(number_display,second);</p><p> action = 0;</p><p><b> break;}</b></p><p> display(number_display,second);}}</p><p> /
106、*-----------------------------------------------------------</p><p><b> 中斷服務(wù)函數(shù)</b></p><p> ------------------------------------------------------------*/</p><p> void
107、 timer0() interrupt 1</p><p> {TH0=(65536-50000)/256;</p><p> TL0=(65536-50000)%256;</p><p> timer0_count ++;</p><p> if(timer0_count == 30)</p><p> {
108、timer0_count = 0;</p><p> second --;</p><p> if(second<=5&&second>0)</p><p> fengming() ;</p><p> if(second == 0)</p><p><b> {TR0
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基于單片機(jī)的八路智能搶答器課程設(shè)計
- 單片機(jī)八路搶答器課程設(shè)計
- 單片機(jī)課程設(shè)計---八路搶答器
- 單片機(jī)八路搶答器課程設(shè)計
- 基于單片機(jī)的八路智能搶答器課程設(shè)計.doc
- 課程設(shè)計---單片機(jī)八路搶答器設(shè)計
- 單片機(jī)課程設(shè)計八路搶答器設(shè)計
- 單片機(jī)課程設(shè)計報告--八路搶答器
- 基于51單片機(jī)的八路搶答器課程設(shè)計
- 基于51單片機(jī)的八路搶答器課程設(shè)計
- 課程設(shè)計-單片機(jī)原理基于單片機(jī)的八路搶答器設(shè)計
- 八路搶答器課程設(shè)計---基于單片機(jī)的八位搶答器的設(shè)計
- 基于51單片機(jī)的八路搶答器課程設(shè)計.doc
- 課程設(shè)計--基于單片機(jī)控制的八路搶答器計
- 課程設(shè)計--基于單片機(jī)控制的八路搶答器計
- 單片機(jī)八路搶答器)
- 基于單片機(jī)的八路搶答器
- 單片機(jī)課程設(shè)計---基于51單片機(jī)的八路競賽搶答器的設(shè)計
- 單片機(jī)課程設(shè)計--八路智力競賽搶答器
- 基于單片機(jī)的八路搶答器設(shè)計.doc
評論
0/150
提交評論