基于51單片機(jī)八路搶答器課程設(shè)計(jì).doc
《基于51單片機(jī)八路搶答器課程設(shè)計(jì).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于51單片機(jī)八路搶答器課程設(shè)計(jì).doc(29頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
目 錄 第1章 緒 論 1 1.1 例題的仿真 1.2 選題背景、意義 3 1.3 八路搶答器的功能簡(jiǎn)介 4 第2章 系統(tǒng)硬件設(shè)計(jì) 5 2.1 芯片的選擇 5 2.1.1 控制器的選擇 5 2.1.2 顯示模塊的選擇 5 2.1.3 鍵盤的選擇 6 2.2.4 芯片最終選擇方案 6 2.2 AT89C51單片機(jī)簡(jiǎn)單概述 7 2.2.1 51系列單片機(jī)的功能特性 7 2.2.2 AT89C51單片機(jī)結(jié)構(gòu)說明 8 2.3 硬件的構(gòu)成及功能 10 2.3.1 搶答器的硬件圖 11 2.3.2 時(shí)鐘頻率控制電路 11 2.3.3 復(fù)位電路的設(shè)計(jì) 12 2.3.4 報(bào)警電路的設(shè)計(jì) 13 2.3.5 顯示電路的設(shè)計(jì) 13 2.3.6 鍵盤掃描電路的設(shè)計(jì) 14 第3章 系統(tǒng)軟件設(shè)計(jì) 16 3.1 系統(tǒng)主程序設(shè)計(jì) 16 3.2 鍵盤掃描程序設(shè)計(jì) 17 3.3 顯示程序設(shè)計(jì) 18 第4章 系統(tǒng)調(diào)試與軟件仿真 19 4.1 硬件調(diào)試 19 4.2 Keil uVision2軟件調(diào)試 19 4.3 Proteus仿真 20 第5章 總 結(jié) 23 附 錄 23 附錄一 主程序清單 23 附錄二 單片機(jī)八路智能搶答器原理圖 37 參 考 文 獻(xiàn) 38 第一章 緒 論 1.2 課本例題仿真 例題 4-6 在Keil uVision2軟件中調(diào)試程序程序如下: 例題 5-1 在Keil uVision2軟件中調(diào)試程序程序如下: 1.2 選題背景、意義 當(dāng)今時(shí)代是一個(gè)新技術(shù)層出不窮的時(shí)代,在電子領(lǐng)域尤其是自動(dòng)化智能控制領(lǐng)域,傳統(tǒng)的分立元件或數(shù)字邏輯電路構(gòu)成的控制系統(tǒng),正以前所未有的速度被單片機(jī)智能化控制所取代。單片機(jī)具有體積小、功能強(qiáng)、成本低、應(yīng)用面廣等優(yōu)點(diǎn),可以說智能化控制與自動(dòng)控制的核心就是單片機(jī)。 目前,搶答器已經(jīng)作為一種必不可少的工具廣泛應(yīng)用于各種智力和知識(shí)競(jìng)賽場(chǎng)合,但一般的搶答器可靠性低,使用壽命短,介于這些不方便因素,此次設(shè)計(jì)提出了用AT89C51單片機(jī)為核心控制元件,設(shè)計(jì)一個(gè)簡(jiǎn)易的八路搶答器。 本方案以AT89C51單片機(jī)作為主控核心,與晶振、數(shù)碼管、蜂鳴器等通過外圍接口實(shí)現(xiàn)的八路搶答器,利用了單片機(jī)的延時(shí)電路、按鍵復(fù)位電路、時(shí)鐘電路、定時(shí)器/計(jì)數(shù)器等,設(shè)計(jì)的八路搶答器不僅具有實(shí)時(shí)顯示搶答選手的號(hào)碼和搶答時(shí)間的功能,同時(shí)還利用匯編語言編程,使其實(shí)現(xiàn)復(fù)位、定時(shí)和報(bào)警的功能。本次設(shè)計(jì)的系統(tǒng)實(shí)用性強(qiáng)、判斷精確、操作簡(jiǎn)單、擴(kuò)展功能強(qiáng)。 1.3 八路搶答器的功能簡(jiǎn)介 此次設(shè)計(jì)的搶答器具有同步顯示的功能,并且有蜂鳴器的輔助,使得整個(gè)設(shè)計(jì)更加完整。 在每次競(jìng)賽開始前,主持人讀完比賽規(guī)則,可以對(duì)搶答器進(jìn)行的時(shí)間進(jìn)行預(yù)設(shè)。時(shí)間設(shè)定按鍵組共有4個(gè)按鍵,其中一個(gè)鍵為搶答時(shí)間修改鍵,一個(gè)為回答時(shí)間按鍵,剩下的兩個(gè)按鍵為加一和減一按鍵。 比賽開始,主持人讀完題之后按下“開始鍵”,即搶答開始,蜂鳴器提示一次,此時(shí)數(shù)碼管開始顯示30s的倒計(jì)時(shí);直到有一個(gè)選手按下?lián)尨疰I,對(duì)應(yīng)的會(huì)在數(shù)碼管上顯示出該選手的編號(hào)和回答剩余的時(shí)間,同時(shí)蜂鳴器也會(huì)發(fā)出一次提示音,以示有人搶答本題;如果在規(guī)定的30s時(shí)間內(nèi)沒有人做出搶答,則此題作廢,開始新一輪的搶答。在搶答和回答時(shí)間的最后5s,蜂鳴器都會(huì)給予報(bào)警提示。在倒計(jì)時(shí)過程中,主持人可以隨時(shí)按“停止鍵”結(jié)束本次回答或者搶答。 在主持未按下開始鍵,若果有人按下?lián)尨疰I,則屬于犯規(guī)搶答,此時(shí),數(shù)碼管上會(huì)顯示違規(guī)選手的編號(hào),同時(shí)蜂鳴器會(huì)以1s一次的頻率發(fā)出警告。在每次搶答前后,主持人都可以按下復(fù)位鍵讓系統(tǒng)清零,此時(shí)數(shù)碼管上會(huì)顯示“FFF”。 第2章 系統(tǒng)硬件設(shè)計(jì) 硬件電路部分是一個(gè)完整電路的關(guān)鍵部分,硬件性能的好壞關(guān)系到整個(gè)系統(tǒng)的性能。本章節(jié)主要介紹了八路搶答器的硬件的選擇及電路的設(shè)計(jì)。 2.1 芯片的選擇 芯片選擇的原則是經(jīng)濟(jì)、壽命長(zhǎng)、設(shè)計(jì)簡(jiǎn)單。對(duì)此我們作了詳細(xì)的論證。 2.1.1 控制器的選擇 控制器主要用于對(duì)顯示、搶答、音樂、計(jì)分等模塊進(jìn)行控制??刂破鞯倪x擇有以下兩種方案。 方案一:采用FPGA(現(xiàn)場(chǎng)可編程門列陣)作為系統(tǒng)的控制器。FPGA可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能,規(guī)模大,密度高,它將所有器件集成在一塊芯片上,減小了體積,提高了穩(wěn)定性,并且可以應(yīng)用EDA軟件仿真、調(diào)試,易于進(jìn)行功能擴(kuò)展。FPGA采用并行的輸入輸出方式,提高了系統(tǒng)的處理速度,適合作為大規(guī)模實(shí)時(shí)系統(tǒng)的控制核心。但由于本設(shè)計(jì)對(duì)數(shù)據(jù)處理的速度要求不高,F(xiàn)PGA的高速處理的優(yōu)勢(shì)得不到充分體現(xiàn),并且由于其集成度高,使其成本偏高,同時(shí)由于芯片的引腳較多,實(shí)物硬件電路板布線復(fù)雜,加重了電路設(shè)計(jì)和實(shí)際焊接的工作。 方案二:采用AT89C51作為系統(tǒng)控制器的CPU方案。單片機(jī)算術(shù)運(yùn)算功能強(qiáng)、軟件編程靈活、自由度大,可以用軟件編程實(shí)現(xiàn)各種算法和邏輯控制,并且由于其功耗低、體積小、技術(shù)成熟和成本低等優(yōu)點(diǎn),使其在各個(gè)領(lǐng)域應(yīng)用廣泛。 基于以上分析,本次設(shè)計(jì)我采用方案二。 2.1.2 顯示模塊的選擇 顯示模塊主要是顯示時(shí)間和編號(hào)??紤]有以下兩種顯示方案。 方案一:使用液晶屏顯示時(shí)間。液晶顯示屏(LCD)具有輕薄短小、低耗電量、無輻射危險(xiǎn),平面直角顯示以及影像穩(wěn)定不閃爍等優(yōu)勢(shì),可視面積大,畫面效果好,分辨率高,抗干擾能力強(qiáng)的特點(diǎn)。但由于只需要顯示時(shí)間和轉(zhuǎn)向、相數(shù)這樣的數(shù)字,信息量比較少,且液晶屏是以點(diǎn)陣的模式顯示各種符號(hào),需要利用控制芯片創(chuàng)建字符庫,編程工作量大,控制器的資源占用較多,其成本也偏高。在使用時(shí),不能有靜電干擾,否則易燒壞液晶顯示芯片,不易維護(hù)。 方案二:使用傳統(tǒng)的數(shù)碼管顯示。數(shù)碼管具有低能耗、低損耗、低壓、壽命長(zhǎng)、耐老化、防曬、防潮、防火、防高(低)溫,對(duì)外界環(huán)境要求低,易于維護(hù)的優(yōu)點(diǎn),同時(shí)其精度高,稱量快,精確可靠,操作簡(jiǎn)單。數(shù)碼顯示是采用BCD編碼顯示數(shù)字,程序編譯容易,資源占用較少。 根據(jù)以上的論述,我采用方案二。 2.1.3 鍵盤的選擇 鍵盤是單片機(jī)不可缺少的輸入設(shè)備,是實(shí)現(xiàn)人機(jī)對(duì)話的紐帶。鍵盤按結(jié)構(gòu)形式可以分為非編碼鍵盤和編碼鍵盤,前者用軟件方法產(chǎn)生鍵碼,而后者則用硬件方法來產(chǎn)生鍵碼。在單片機(jī)中使用的都是非編碼鍵盤,因?yàn)榉蔷幋a鍵盤結(jié)構(gòu)簡(jiǎn)單,成本低廉,非編碼鍵盤的類型很多,常用的有獨(dú)立式鍵盤,行列式鍵盤等。 方案一:獨(dú)立式鍵盤 獨(dú)立式鍵盤接口中使用幾根I/O線,就有幾個(gè)按鍵,這種類型的鍵盤,其按鍵比較少,且鍵盤中各按鍵的工作互不干擾。因此可以根據(jù)實(shí)際需要對(duì)鍵盤中的按鍵靈活編碼。獨(dú)立式鍵盤的缺點(diǎn)是需要占用比較多的I/O口線,當(dāng)單片機(jī)應(yīng)用系統(tǒng)鍵盤中需要的按鍵比較少或I/O口線比較富余時(shí),可以采用這樣類型的鍵盤。 方案二:行列式鍵盤 行列式鍵盤是用N條I/O線作為行線,M條I/O線作為列線組成的鍵盤,按鍵在行線和列線的每個(gè)交叉點(diǎn)上。這種形式的鍵盤結(jié)構(gòu),能夠有效地提高單片機(jī)系統(tǒng)中I/O的利用率。 CPU對(duì)鍵盤的掃描可以采用取程序控制的隨機(jī)方式,即只有在CPU空閑是時(shí)才去掃描鍵盤,響應(yīng)操作人員的鍵盤輸入,即利用單片機(jī)內(nèi)部定時(shí)器每隔一定時(shí)間對(duì)鍵盤掃描一次,這樣控制方式,不管鍵盤上有無鍵閉合,CPU總是定時(shí)的關(guān)心鍵盤狀態(tài)。在大多數(shù)情況下,CPU對(duì)鍵盤可能進(jìn)行空掃描。為了提高CPU的效率而又能及時(shí)響應(yīng)鍵盤輸入,可以采用中斷方式,即CPU平時(shí)不必掃描鍵盤,只要當(dāng)鍵盤上有鍵盤閉合時(shí)就產(chǎn)生中斷請(qǐng)求,向CPU申請(qǐng)中斷后,立即對(duì)鍵盤上有鍵盤進(jìn)性掃描,識(shí)別閉合鍵,并做相應(yīng)的處理。 根據(jù)以上的論述,我采用方案一。 2.2.4 芯片最終選擇方案 根據(jù)上幾節(jié)的論證,通過綜合考慮,我們的芯片選擇如表2-1。 表2-1 器件選擇方案詳單 器件名稱 規(guī)格型號(hào) 數(shù)量 微處理器 AT89C51 1 電阻 220歐姆 8 8K 1 1K 1 瓷片電容 30pF 2 電解電容 10uF 1 晶振 12MHZ 1 按鈕 CD4013 15 器件名稱 規(guī)格型號(hào) 數(shù)量 七段數(shù)碼管 7SEG-MPX-CC 4 蜂鳴器 1 2.2 AT89C51單片機(jī)簡(jiǎn)單概述 AT89C51單片機(jī)屬于51系列單片機(jī),本次設(shè)計(jì)所用的核心元件即為AT89C51,本節(jié)主要介紹了AT89C51的管腳功能。 2.2.1 51系列單片機(jī)的功能特性 MSC-51單片機(jī)是美國(guó)英特爾公司于1980年起推出的第二代產(chǎn)品。與8084相比,8051的硬件結(jié)構(gòu)和指令系統(tǒng)均有很大改進(jìn),可支持更大存儲(chǔ)空間擴(kuò)充了更多的I/O功能,速度提高了2-5倍。 1. 主要特性: (1) 適于控制應(yīng)用的8位CPU。 (2) 擴(kuò)展的邏輯處理能力。 (3) 4KB片內(nèi)程序存儲(chǔ)空間。其片外可尋址的范圍為64KB,主要用于存放已編程的程序,也可存放一些原始數(shù)據(jù)和表格。 (4) 128B的片內(nèi)數(shù)據(jù)RAM。其片外數(shù)據(jù)存儲(chǔ)器的尋址范圍為64KB用于存放可讀寫的數(shù)據(jù),如運(yùn)算的中間結(jié)果和最終結(jié)果。 (5) 32根雙向可單獨(dú)尋址的輸入輸出線。 (6) 2個(gè)16位定時(shí)/計(jì)數(shù)器,片內(nèi)時(shí)鐘發(fā)生器。它可以設(shè)置為計(jì)數(shù)方式,對(duì)外部事件進(jìn)行計(jì)數(shù),也可以設(shè)置為定時(shí)方式進(jìn)行定時(shí)。 (7) 全雙工異步發(fā)送/接收器。 (8) 具有5個(gè)中斷源,可編程為兩個(gè)優(yōu)先級(jí)的中斷系統(tǒng),它可以接收外部中斷請(qǐng)求、定時(shí)器/計(jì)數(shù)器中斷申請(qǐng)和串行口中斷申請(qǐng)。 2. 程序指令 AT89C51單片機(jī)的時(shí)序單位有四個(gè),分別是節(jié)拍、狀態(tài)、機(jī)器周期和指令周期。 節(jié)拍與狀態(tài): 我們把振蕩脈沖的周期定義為節(jié)拍(P),振蕩脈沖經(jīng)過兩個(gè)分頻后即得到整個(gè)單片機(jī)工作系統(tǒng)的時(shí)鐘信號(hào),把時(shí)鐘信號(hào)的周期定義為狀態(tài)(S),這樣一個(gè)狀態(tài)就有兩個(gè)節(jié)拍,前半個(gè)周期相應(yīng)的節(jié)拍我們定義為P1,后半周期對(duì)應(yīng)的節(jié)拍定義為P2。 機(jī)器周期: AT89C51有固定的機(jī)器周期,規(guī)定一個(gè)機(jī)器周期有6個(gè)狀態(tài),分別表示為S1-S6,而一個(gè)狀態(tài)包含兩個(gè)節(jié)拍,那么一個(gè)機(jī)器周期就有12個(gè)節(jié)拍,即一個(gè)機(jī)器周期包含12個(gè)振蕩脈沖,即機(jī)器周期就是振蕩脈沖的12分頻,如果使用12MHZ的時(shí)鐘頻率,一個(gè)機(jī)器周期就是1us。 2.2.2 AT89C51單片機(jī)結(jié)構(gòu)說明 AT89C51單片機(jī)的管腳圖如圖2-1所示: 圖2-1 AT89C51單片機(jī)管腳圖 u P0口:P0口是一組8位漏極開路雙向I/O口,在訪問外部存儲(chǔ)器時(shí)用作8位低地址線和數(shù)據(jù)總線。 u P1口: P1口是一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,向P1口寫入“1”時(shí),P1口被內(nèi)部電路上拉為高電平,可用作輸入口。當(dāng)作為輸出口時(shí),被外部拉低的P1口會(huì)因?yàn)閮?nèi)部上拉電阻的存在而輸出電流。 u P2口:P2口為一個(gè)內(nèi)部上拉電阻的8位雙向I/O口,當(dāng)P2口被寫“1”時(shí),其管腳被內(nèi)部電路上拉為高電平,可作輸入口。當(dāng)作為輸出口時(shí),被外部拉低的P2口會(huì)因?yàn)閮?nèi)部上拉電阻的存在而輸出電流。在訪問外部程序存儲(chǔ)器和外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口可作為地址總線的高八位地址線。 ◆ P3口:P3口管腳是8個(gè)帶內(nèi)部上拉電阻的雙向I/O口,當(dāng)P3口寫入“1”后,它們被內(nèi)部電路上拉為高電平,并用作輸入口。當(dāng)作為輸出口時(shí),被外部拉低的P3口會(huì)因?yàn)閮?nèi)部上拉電阻的存在而輸出電流。 P3口也可作為AT89C51的一些特殊功能口,如下表所示: P3.0 RXD(串行輸入口) P3.1 TXD(串行輸出口) P3.2 /INT0(外部中斷0) P3.3 /INT1(外部中斷1) P3.4 T0(記時(shí)器0外部輸入) P3.5 T1(記時(shí)器1外部輸入) P3.6 /WR(外部數(shù)據(jù)存儲(chǔ)器寫選通) P3.7 /RD(外部數(shù)據(jù)存儲(chǔ)器讀選通) u RST:復(fù)位信號(hào)輸入端。當(dāng)振蕩器工作時(shí),RET引腳出現(xiàn)兩個(gè)機(jī)器周期以上的高電平將使單片機(jī)復(fù)位。 u ALE/PROG:ALE是地址鎖存允許信號(hào)。它的作用是把CPU從P0口分時(shí)輸出的低8位地址鎖存在鎖存器中。在平時(shí),ALE端以不變的頻率周期輸出正脈沖信號(hào),此頻率為振蕩器頻率的1/6,可用作外部時(shí)鐘或定時(shí)。如想禁止ALE的輸出可在SFR8EH地址上置0。此時(shí),ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。如果CPU在外部執(zhí)行狀態(tài)ALE禁止,置位無效。 u /PSEN:讀片外程序存儲(chǔ)器選通信號(hào)輸出端。當(dāng)執(zhí)行外部程序存儲(chǔ)器數(shù)據(jù)時(shí),/PSEN將產(chǎn)生負(fù)脈沖作為外部程序存儲(chǔ)器的讀選通信號(hào)。在訪問外部數(shù)據(jù)存儲(chǔ)器和內(nèi)部程序存儲(chǔ)器時(shí),/PSEN無效。 u /EA/VPP:讀片內(nèi)與片外程序存儲(chǔ)器的選擇端。當(dāng)/EA為高電平時(shí),低4KB的地址為片內(nèi)程序存儲(chǔ)器單元,高于4KB以上的地址為片外程序存儲(chǔ)器單元;當(dāng)/EA為低電平時(shí),則只能讀片外程序存儲(chǔ)器。 u XTAL1:片內(nèi)振蕩電路反向放大器的輸入端,采用外部時(shí)鐘時(shí)該引腳接地。 XTAL2:片內(nèi)振蕩電路反向放大器的輸出端,采用外部時(shí)鐘時(shí)該引腳為振蕩信號(hào)的輸入端。 2.3 硬件的構(gòu)成及功能 本節(jié)主要介紹了搶答器的硬件部分的設(shè)計(jì),硬件部分的設(shè)計(jì)是比不可少的,也是此次設(shè)計(jì)的核心。 2.3.1 搶答器的硬件圖 根據(jù)所要實(shí)現(xiàn)的功能,我們先大概將搶答器的硬件分為這幾部分:CPU、聲音電路、顯示電路、定時(shí)電路、開始結(jié)束鍵輸入和搶答按鍵輸入。硬件圖如圖2-2所示。 圖2-2 搶答器硬件圖 2.3.2 時(shí)鐘頻率控制電路 單片機(jī)必須在時(shí)鐘的驅(qū)動(dòng)下才能工作。AT89C51中有一個(gè)用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。只需要外接一個(gè)振蕩源就能產(chǎn)生一定的時(shí)鐘信號(hào)送到單片機(jī)內(nèi)部的各個(gè)單元,決定單片機(jī)的工作速度。時(shí)鐘頻率控制電路如圖2-3所示。 圖2-3 外部振蕩電路 內(nèi)部時(shí)鐘振蕩器一般選用石英晶體振蕩器。此電路在加電大約延遲10ms后振蕩器起振,在XTAL2引腳產(chǎn)生幅度為3V左右的正弦波時(shí)鐘信號(hào),其振蕩頻率主要由石英晶振的頻率確定。電路中兩個(gè)電容C1、C2選用30PF大小,其作用有兩個(gè):一是幫助振蕩器起振;二是對(duì)振蕩器的頻率進(jìn)行微調(diào)。 單片機(jī)在工作時(shí),由內(nèi)部振蕩器產(chǎn)生或由外部直接輸入的送至內(nèi)部控制邏輯單元的時(shí)鐘信號(hào)的周期稱為時(shí)鐘周期。其大小是時(shí)鐘信號(hào)頻率的倒數(shù)。該設(shè)計(jì)中時(shí)鐘頻率選為12MHz。 2.3.3 復(fù)位電路的設(shè)計(jì) 在搶答器中復(fù)位是為定時(shí)做鋪墊的,在搶答之前要復(fù)位,搶答完畢要復(fù)位,按了復(fù)位鍵之后LED顯示F。單片機(jī)的復(fù)位引腳RST出現(xiàn)2個(gè)機(jī)器周期以上的高電平時(shí)即可實(shí)現(xiàn)復(fù)位,復(fù)位后單片機(jī)的各狀態(tài)都恢復(fù)到初始化狀態(tài),其電路圖如圖2-4所示。 圖2-4 復(fù)位電路 圖中復(fù)位電路由按鍵和電解電容C3、電阻R9構(gòu)成的按鍵及上電復(fù)位電路。由于單片機(jī)是高電平復(fù)位,所以當(dāng)按鍵按下時(shí),單片機(jī)的9腳RESET管腳處于高電平,此時(shí)單片機(jī)處于復(fù)位狀態(tài)。當(dāng)上電后由于電容緩慢充電,單片機(jī)的9腳電壓逐步由高向低轉(zhuǎn)化,經(jīng)過一段時(shí)間后,單片機(jī)的9腳處于穩(wěn)定的低電平狀態(tài),此時(shí)單片機(jī)上電復(fù)位完畢,系統(tǒng)程序從0000H開始執(zhí)行。 在此設(shè)計(jì)中使用了硬件復(fù)位和軟件復(fù)位兩種。硬件復(fù)位可將寄存器及存儲(chǔ)器的值都恢復(fù)到初始值。而在設(shè)計(jì)中,倒計(jì)時(shí)時(shí)間存在記憶功能,因此還設(shè)計(jì)了軟復(fù)位功能。軟復(fù)位實(shí)際上就是當(dāng)程序執(zhí)行完畢后,講程序指針通過一條跳轉(zhuǎn)指令讓它跳轉(zhuǎn)到該段程序的起始地址。 2.3.4 報(bào)警電路的設(shè)計(jì) 我們知道,聲音的頻譜范圍約在幾十到幾千赫茲,若能利用程序來控制單片機(jī)某個(gè)管腳的高低電平,則在該管腳上就能產(chǎn)生一定頻率的矩形波,接上蜂鳴器就能發(fā)出一定頻率的聲音,若利用延時(shí)程序控制高低電平的持續(xù)時(shí)間,就能改變輸出頻率,從而改變蜂鳴器發(fā)出的音調(diào)。在本設(shè)計(jì)中此電路起到報(bào)警功能。它會(huì)在第一位選手按下?lián)尨鸢粹o時(shí)響一次,以提示有人搶答本題,并且在該選手的60秒搶答過程中或30秒等待過程中剩余最后5秒時(shí)響起,以提示到此題結(jié)束還有5秒鐘。 本次設(shè)計(jì)如圖2-5所示,圖中用到單片機(jī)的10、11和16管腳。10管腳具有讀入功能,11管腳具有輸出功能,而16管腳具有外部數(shù)據(jù)寫功能,單片機(jī)通過內(nèi)部定時(shí)器的操作實(shí)現(xiàn)交替變換的波形輸出驅(qū)動(dòng)蜂鳴器發(fā)生。 圖2-5 報(bào)警電路 2.3.5 顯示電路的設(shè)計(jì) 顯示功能與硬件的關(guān)系極大,顯示電路有兩種選擇,液晶屏顯示和傳統(tǒng)數(shù)碼管顯示。液晶屏具有輕薄、無輻射危險(xiǎn)、可視面積大、分辨率高和抗干擾能力強(qiáng)的特點(diǎn),但是由于顯示信息少、編程工作量大和成本偏高。而數(shù)碼管具有低耗能、低損耗、低壓、壽命長(zhǎng)和精確度高、操作簡(jiǎn)單的優(yōu)點(diǎn),本設(shè)計(jì)中采用的是4位七段數(shù)碼管顯示。數(shù)碼管顯示通常顯示分為動(dòng)態(tài)顯示和靜態(tài)顯示。其中,靜態(tài)顯示的特點(diǎn)是顯示穩(wěn)定不閃爍,編程簡(jiǎn)單,顯示亮度高,但占用I/O口多,實(shí)際應(yīng)用時(shí)必須增加譯碼驅(qū)動(dòng)器進(jìn)行驅(qū)動(dòng),增加了硬件電路的復(fù)雜性。而動(dòng)態(tài)顯示的穩(wěn)定性雖沒靜態(tài)顯示的好,編程復(fù)雜,但是相對(duì)靜態(tài)顯示而言占用的端口資源少。 本設(shè)計(jì)采用的是動(dòng)態(tài)顯示方法。通過查表法將值在數(shù)碼管上顯示出來。其中單片機(jī)的P0口為字型碼輸入端,P2口得低三位為字選段輸入端。 4位七段數(shù)碼管顯示電路如圖2-6。 圖2-6 七段數(shù)碼管顯示電路 數(shù)碼管有共陰極和共陽極兩種接法。共陰極接法,各發(fā)光二極管的陰極連在一起并接地,當(dāng)某一發(fā)光二極管的陽極輸入高電平時(shí),則該段發(fā)光;共陽極接法,各發(fā)光二極管的陽極連在一起并接電源,當(dāng)某一發(fā)光二極管的陰極輸入低電平時(shí),則該段發(fā)光。 本設(shè)計(jì)采用4位一體的七段共陰極數(shù)碼管,其中A-G段分別接到單片機(jī)的P0口,由單片機(jī)輸出的P0口數(shù)據(jù)來決定段碼值,位選碼COM1,COM3,COM4分別接到單片機(jī)的P2.0,P2.1,P2.2,由單片機(jī)來決定當(dāng)前該顯示的是哪一位。在電路圖中還有8個(gè)220歐姆的電阻分別連接在P0口上,用作P0口的上拉電阻,保證P0口沒有數(shù)據(jù)輸出時(shí)處于高電平狀態(tài)。 2.3.6 鍵盤掃描電路的設(shè)計(jì) 鍵盤掃描電路由兩部分組成:搶答電路和定時(shí)電路。 鍵盤是人機(jī)交互的主要設(shè)備,鍵盤電路分為獨(dú)立式和矩陣式。其中,獨(dú)立式鍵盤硬件電路簡(jiǎn)單,而且在程序設(shè)計(jì)上也不復(fù)雜,一般用在對(duì)硬件電路要求不高的簡(jiǎn)單電路中;矩陣式鍵盤硬件電路比獨(dú)立式鍵盤電路復(fù)雜,而且程序設(shè)計(jì)繁瑣,但它節(jié)省端口,適合于多按鍵電路。 本設(shè)計(jì)基于簡(jiǎn)單硬件電路要求的基礎(chǔ)上,采用的是獨(dú)立鍵盤的方式。 在定時(shí)電路的設(shè)計(jì)中,有1個(gè)搶答時(shí)間調(diào)整按鍵、1個(gè)回答時(shí)間調(diào)整按鍵、加一按鍵、減一按鍵和1個(gè)開始按鍵、1個(gè)結(jié)束按鍵。電路圖如圖2-7所示。 圖2-7 定時(shí)電路 圖2-8 搶答電路 圖中和AT89C51芯片的12管腳連接的為搶答時(shí)間30s的調(diào)整按鍵,和13管腳連接的為回答時(shí)間60s的調(diào)整按鍵,與14管腳連接的為加一按鍵,與15管腳連接的為減一按鍵。這四個(gè)按鍵用于主持人對(duì)回答時(shí)間和搶答時(shí)間的調(diào)整。 開始按鍵與單片機(jī)的10管腳連接,停止按鍵與11管腳連接。這里用到了單片機(jī)10、11管腳復(fù)合功能中的IO端口功能,單片機(jī)通過讀取10、11腳的P3.0、P3.1的IO端口值來判斷當(dāng)前是否處于搶答開始狀態(tài)或搶答結(jié)束狀態(tài)。當(dāng)主持人按下開始鍵,搶答電路和定時(shí)電路將進(jìn)入正常搶答狀態(tài);當(dāng)回答完畢,主持人可以按下結(jié)束鍵停止計(jì)時(shí)。 搶答電路完成兩個(gè)功能:一是分辨出選手按鍵先后,并鎖存優(yōu)先搶答者的編號(hào),同時(shí)譯碼顯示電路顯示編號(hào);二是其他選手操作無效。搶答電路如圖2-8所示,圖中8個(gè)搶答按鍵分別接入單片機(jī)的P1.0-P1.7端口,單片機(jī)通過讀取P1.0-P1.7的值來判斷當(dāng)前輸入的是8個(gè)搶答按鍵中的哪一個(gè)。如果主持人未按下開始按鍵判斷到有人違規(guī)操作,蜂鳴器會(huì)發(fā)出警報(bào)聲,并且數(shù)碼管會(huì)顯示出犯規(guī)者的編號(hào)。 第3章 系統(tǒng)軟件設(shè)計(jì) 3.1 系統(tǒng)主程序設(shè)計(jì) 1. 系統(tǒng)主程序設(shè)計(jì)思路 為了能達(dá)到公平、公正、合理的設(shè)計(jì)理念,應(yīng)該在主持人發(fā)布搶答命令之前設(shè)定好搶答時(shí)間。當(dāng)時(shí)間設(shè)定好了之后,主持人發(fā)布搶答命令。按下開始按鍵后,程序開始打開,定時(shí)中斷開始倒計(jì)時(shí),然后調(diào)用鍵盤掃描子程序,當(dāng)掃描到有人按下了搶答鍵,馬上關(guān)閉搶答中斷計(jì)時(shí)器T1,調(diào)用顯示程序,此時(shí)封鎖搶答鍵盤,啟動(dòng)計(jì)時(shí)器T0。 2. 主程序框圖 根據(jù)搶答器設(shè)計(jì)要求,其軟件設(shè)計(jì)部分流程圖如圖3-1: 圖3-1 主程序流程圖 3.2 鍵盤掃描程序設(shè)計(jì) 搶答選手的搶答程序設(shè)計(jì)是本設(shè)計(jì)的關(guān)鍵。鍵盤掃描流程圖如圖3-2所示。 圖3-2 鍵盤掃描程序流程圖 3.3 顯示程序設(shè)計(jì) 本次設(shè)計(jì)的顯示部分在按下開始鍵時(shí),后兩個(gè)數(shù)碼管顯示倒計(jì)時(shí)間,以1s變換一次,并且調(diào)用延時(shí)程序,此時(shí)定時(shí)器采用中斷方式,可以充分利用CPU。在有選手按下?lián)尨疰I時(shí),第一個(gè)數(shù)碼管顯示選手號(hào),最后兩個(gè)數(shù)碼管顯示倒計(jì)時(shí),定時(shí)器同樣采用中斷方式。 除此之外,本設(shè)計(jì)數(shù)碼管具有閃爍功能,當(dāng)有違規(guī)搶答時(shí),第一個(gè)數(shù)碼管會(huì)顯示選手號(hào),后兩個(gè)數(shù)碼管會(huì)閃爍顯示FF,一個(gè)周期為每秒1次。以示搶答無效,此時(shí)定時(shí)器采用定時(shí)中斷的工作方式。 連接時(shí)段選信號(hào)接在P0口的P0.0~P0.6七個(gè)I/O口上,P1口是準(zhǔn)雙向I/O接口在輸出驅(qū)動(dòng)部分,所以在接電阻時(shí)選擇接220Ω限流電阻。而在位選方面采用P2口的P2.0~P2.2,用單片機(jī)P2.2三個(gè)I/O口作為位選信號(hào)的輸出口。 第4章 系統(tǒng)調(diào)試與軟件仿真 系統(tǒng)調(diào)試包括硬件調(diào)試和軟件調(diào)試,二者密不可分。我們?cè)O(shè)計(jì)好的硬件電路和軟件程序必須經(jīng)過聯(lián)合調(diào)試才能驗(yàn)證其正確性。 4.1 硬件調(diào)試 硬件調(diào)試分為單元電路調(diào)試和聯(lián)機(jī)調(diào)試,單元電路調(diào)試在硬件電路設(shè)計(jì)中已經(jīng)進(jìn)行,這里只對(duì)其印刷版電路進(jìn)行檢驗(yàn)。 線路檢查:根據(jù)硬件邏輯設(shè)計(jì)圖,仔細(xì)檢查電路是否正確,并且核對(duì)元器件的型號(hào)、規(guī)格和安裝是否符合要求,必要時(shí)可用萬用表檢測(cè)線路通斷情況。先用萬用表檢查各管腳之間是否有短路、虛焊、漏焊現(xiàn)象。檢查無誤后,測(cè)試各個(gè)芯片是否有損,待檢查完畢后,將各個(gè)芯片插入各自的槽位。 電源調(diào)試:電路的第一次通電測(cè)試很重要,調(diào)試方法有兩種:一種是斷開電路穩(wěn)壓電源的輸出端,檢查空載時(shí)電源的工作情況;另一種是拔下電路上的主要繼承芯片,檢查電源的負(fù)載能力。確保電源無故障并符合性能要求。 通電檢查:首先按下復(fù)位鍵,用萬用表測(cè)試復(fù)位鍵的第四引腳是否有高電平輸出,然后測(cè)試其第一管腳是否有低電平輸出,如果是的話說明電路連接正確。然后按下開始鍵,再按下?lián)尨疰I1,之后依次按下?lián)尨疰I2、3、4、5、6、7、8,分別觀察數(shù)碼管有無變化。最后對(duì)蜂鳴器進(jìn)行驗(yàn)證,看看是否正常發(fā)聲。同理分別按下其它7個(gè)搶答鍵進(jìn)行檢查。 4.2 Keil uVision2軟件調(diào)試 軟件調(diào)試是通過對(duì)用戶程序的匯編、連接、執(zhí)行來發(fā)現(xiàn)程序中存在的語法錯(cuò)誤與邏輯錯(cuò)誤并加以排除糾正的過程。 本設(shè)計(jì)用到了Keil uVision2軟件,首先打開Keil uVision2,將程序輸入;然后進(jìn)行調(diào)試,將程序中的語法錯(cuò)誤和邏輯錯(cuò)誤糾正,調(diào)試完畢后,創(chuàng)建HEX文件,HEX文件用于燒寫芯片,將制定程序?qū)懭胍言O(shè)計(jì)好的電路板中,使其能根據(jù)我們的要求實(shí)現(xiàn)相應(yīng)的功能;最后將HEX文件燒寫入AT89C51芯片,運(yùn)行電路,讓其實(shí)現(xiàn)八路搶答的功能。如圖4-1所示。 圖4-1 Keil uVision軟件 4.3 Proteus仿真 本設(shè)計(jì)用到Proteus仿真軟件。首先將電路圖根據(jù)設(shè)計(jì)要求在軟件中準(zhǔn)確地畫出,即進(jìn)行ISIS原理圖設(shè)計(jì),我們的仿真也是完全基于ISIS原理圖模塊下進(jìn)行的,Proteus有兩種截然不同的仿真方式:交互式仿真和基于圖表的仿真,在本設(shè)計(jì)中我們用到的是交互式仿真,用于校驗(yàn)所設(shè)計(jì)的電路是否能正常運(yùn)行。如圖4-2所示。 圖4-2 八路搶答器原理圖 然后將Keil uVision2生成的HEX文件鏈接到該中原理圖,即設(shè)計(jì)文檔的建立。如圖4-3所示。 圖4-3 建立設(shè)計(jì)文檔 文檔建立好之后,按Ctrl+F12開始運(yùn)行,然后按F12,執(zhí)行程序。下面是幾組仿真圖。 圖4-4 復(fù)位顯示FFF 圖4-5 啟動(dòng)開始鍵,倒計(jì)時(shí)30s 圖4-6 3號(hào)選手非法搶答 圖4-7 5號(hào)選手正常搶答 第5章 總 結(jié) 此次設(shè)計(jì)主要以硬件系統(tǒng)為基礎(chǔ),硬件系統(tǒng)關(guān)系到電子產(chǎn)品的好壞,如系統(tǒng)的抗干擾性,安全性和可行性等,所以要合理地選擇,合理地安排,盡量減少干擾,以提高系統(tǒng)性能。單片機(jī)是很容易受干擾的控制器,當(dāng)采用外部晶振時(shí),應(yīng)盡量讓其靠近單片機(jī),以減少對(duì)其的干擾,防止程序的混亂現(xiàn)象。硬件系統(tǒng)的好壞很大部分在于經(jīng)驗(yàn),比如焊接是否干凈利落,器件是否完好,操作是否規(guī)范等,所以我們要有好的動(dòng)手能力。 而軟件設(shè)計(jì)確實(shí)設(shè)計(jì)的核心,具有多樣化,靈活性高,易移植等優(yōu)點(diǎn)。首先我們要深深領(lǐng)會(huì)各指令的含義才能更加熟練應(yīng)用。中斷的合理利用可以有效減少對(duì)CPU的占用,更好的處理好其他功能。延時(shí)的應(yīng)用會(huì)順利地實(shí)現(xiàn)顯示,鳴笛等功能,同時(shí)還可以去掉系統(tǒng)固有的不穩(wěn)定性。定時(shí)的應(yīng)用則比較實(shí)際,能實(shí)現(xiàn)我們所需的功能。軟件的設(shè)計(jì)大部分采用模塊化設(shè)計(jì)的方法以方便調(diào)試,并使其可讀性大大增強(qiáng),方便更改和移植。 在此次設(shè)計(jì)中,我總結(jié)了很多不足,同時(shí)也學(xué)到了很多新的知識(shí),并且鞏固了課堂知識(shí),但最終設(shè)計(jì)的系統(tǒng)仍有不足,敬請(qǐng)?zhí)岢觯? 附 錄 附錄一 主程序清單 OK EQU 20H;搶答開始標(biāo)志位 RING EQU 22H;響鈴標(biāo)志位 ORG 0000H AJMP MAIN ORG 0003H AJMP INT00 ORG 000BH AJMP T00 ORG 0013H AJMP INT11 ORG 001BH AJMP T11 ORG 0040H MAIN:MOV R1,#30;設(shè)搶答時(shí)間30s MOV R2,#60;設(shè)答題時(shí)間60s MOV TMOD,#11H;設(shè)置定時(shí)器為模式1 MOV TH0,#0F0H MOV TL0,#0FFH MOV TH1,#3CH MOV TL1,#0B0H;50ms為一次溢出中斷 SETB EA SETB ET0 SETB ET1 SETB EX0 SETB EX1;允許四個(gè)中斷T0/T1/INT0/INT1 CLR OK CLR RING SETB TR1 SETB TR0;一開始運(yùn)行定時(shí)器,開始顯示FFF LOOP:MOV R5,#0BH MOV R4,#0BH MOV R3,#0BH ACALL DISPLAY;調(diào)用顯示FFF子程序 JB P3.0,LOOP1;判斷未開始答題,若有人按下?lián)尨?,跳到LOOP1非法搶答處理程序 ACALL DELAY JB P3.0,LOOP1;判斷已開始答題,則向下執(zhí)行 ACALL BARK;蜂鳴器響 MOV A,R1 MOV R6,A;將R1中30s送入R6 SETB OK;復(fù)位,用于COUNT中判斷是否查詢搶答 MOV R7,#01H;讀搶答鍵按下數(shù),要求只讀一次有用信號(hào) MOV R3,#0AH;搶答時(shí)間指顯示計(jì)時(shí),不顯示號(hào)數(shù) AJMP COUNT;進(jìn)入COUNT倒計(jì)時(shí)子程序,查詢有效搶答程序 LOOP1:JNB P1.0,FALSE1 JNB P1.1,FALSE2 JNB P1.2,FALSE3 JNB P1.3,FALSE4 JNB P1.4,FALSE5 JNB P1.5,FALSE6 JNB P1.6,FALSE7 JNB P1.7,FALSE8 AJMP LOOP;非法搶答查詢程序,若沒有跳回主程序 FALSE1:MOV R3,#01H;1號(hào)選手違規(guī) AJMP ERROR;跳轉(zhuǎn)到ERROR非法搶答處理程序 FALSE2:MOV R3,#02H AJMP ERROR FALSE3:MOV R3,#03H AJMP ERROR FALSE4:MOV R3,#04H AJMP ERROR FALSE5:MOV R3,#05H AJMP ERROR FALSE6:MOV R3,#06H AJMP ERROR FALSE7:MOV R3,#07H AJMP ERROR FALSE8:MOV R3,#08H AJMP ERROR ;====中斷==== INT00:MOV A,R1 MOV B,#0AH DIV AB MOV R5,A MOV R4,B MOV R3,#0AH ACALL DISPLAY;在時(shí)間LED上顯示搶答時(shí)間30s JNB P3.4,INC0 JNB P3.5,DEC0 JNB P3.1,BACK0 AJMP INT00 INC0:MOV A,R1 CJNE A,#63H,ADD0;如果不是99,則跳轉(zhuǎn)到ADD0加1程序,否則往下執(zhí)行,置0,重新加起 MOV R1,#00H ACALL DELAY AJMP INT00 ADD0:INC R1 ACALL DELAY AJMP INT00 DEC0:MOV A,R1 JZ SETT;如果R1中值為0,則跳到SETT程序,R1置99 DEC R1 ACALL DELAY AJMP INT00 SETT:MOV R1,#63H ACALL DELAY AJMP INT00 BACK0:RETI INT11:MOV A,R2 MOV B,#0AH DIV AB MOV R5,A MOV R4,B MOV R3,#0AH ACALL DISPLAY JNB P3.4,INC1 JNB P3.5,DEC1 JNB P3.1,BACK1 AJMP INT11 INC1:MOV A,R2 CJNE A,#63H,ADD1 MOV R2,#00H ACALL DELAY AJMP INT11 ADD1:INC R2 ACALL DELAY AJMP INT11 DEC1:MOV A,R2 JZ SET1 DEC R2 ACALL DELAY AJMP INT11 ;====計(jì)時(shí)查詢==== SET1:MOV R2,#63H ACALL DELAY AJMP INT11 BACK1:RETI ;====倒計(jì)時(shí)程序==== REPEAT:MOV A,R2;新一輪重新計(jì)時(shí) MOV R6,A CLR RING COUNT:MOV R0,#00H;重置定時(shí)器中斷次數(shù) MOV TH1,#3CH MOV TL1,#0B0H;重置定時(shí)器 RECOUNT:MOV A,R6;將回答時(shí)間60s給A MOV B,#0AH DIV AB;除10,分出個(gè)位和十位 MOV 30H,A;十位存于30H MOV 31H,B;個(gè)位存于31H MOV R5,30H;取十位 MOV R4,31H;取個(gè)位 MOV A,R6 SUBB A,#07H JNC MAX;大于5s跳轉(zhuǎn)到MAX,小于5s則向下執(zhí)行,蜂鳴器響 MOV A,R0 CJNE A,#0AH,FULL CLR RING AJMP CHECK;回答60s倒計(jì)時(shí) FULL:CJNE A,#14H,CHECK;下面是1s的情況,響并顯示號(hào)數(shù),并清R0 SETB RING MOV A,R6 JZ QUIT;計(jì)時(shí)完畢,跳轉(zhuǎn)到QUIT,否則繼續(xù)向下執(zhí)行 MOV R0,#00H DEC R6;一秒減一 AJMP CHECK MAX:MOV A,R0 CJNE A,#14H,CHECK;如果剩1s向下運(yùn)行,否則跳轉(zhuǎn)到CHECK查詢“停止”程序 DEC R6 MOV R0,#00H CHECK:JNB P3.1,QUIT;如果查詢按下停止鍵,則退出;否則向下 JNB OK,CHECK1;判斷是否在回答倒計(jì)時(shí)內(nèi),如果不在跳到CHECK1判斷是否開始新一輪;否則向下繼續(xù)執(zhí)行 AJMP NEXT1 CHECK1:JNB P3.0,REPEAT;判斷是否重新開始 NEXT1:ACALL DISPLAY JB OK,ACCOUT;判斷是否是搶答倒計(jì)時(shí),若是則跳轉(zhuǎn)到ACCOUT查詢搶答;否則向下執(zhí)行繼續(xù)倒計(jì)時(shí) AJMP RECOUNT ACCOUT:MOV A,36H JNB ACC.0,TRUE1 JNB ACC.1,TRUE2 JNB ACC.2,TRUE3 JNB ACC.3,TRUE4 JNB ACC.4,TRUE5 JNB ACC.5,TRUE6 JNB ACC.6,TRUE7 JNB ACC.7,TRUE8 AJMP RECOUNT QUIT:CLR OK;停止鍵按下程序 CLR RING AJMP LOOP ;=====正常搶答處理程序===== TRUE1:ACALL BARK MOV A,R2 MOV R6,A;搶答時(shí)間R2送R6 MOV R3,#01H CLR OK;因?yàn)榇痤}的計(jì)時(shí)不再查詢搶答,所以就鎖了搶答 AJMP COUNT TRUE2:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#02H CLR OK AJMP COUNT TRUE3:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#03H CLR OK AJMP COUNT TRUE4:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#04H CLR OK AJMP COUNT TRUE5:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#05H CLR OK AJMP COUNT TRUE6: ACALL BARK MOV A,R2 MOV R6,A MOV R3,#06H CLR OK AJMP COUNT TRUE7:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#07H CLR OK AJMP COUNT TRUE8:ACALL BARK MOV A,R2 MOV R6,A MOV R3,#08H CLR OK AJMP COUNT ;=====犯規(guī)搶答程序===== ERROR: MOV R0,#00H MOV TH1,#3CH MOV TL1,#0B0H MOV 34H,R3;犯規(guī)號(hào)數(shù)暫存與(34H) HERE: MOV A,R0 CJNE A,#06H,FLASH;0.3s向下運(yùn)行->滅并停響 CLR RING MOV R3,#0AH MOV R4,#0AH MOV R5,#0AH;三燈全滅 AJMP CHECK2 FLASH:CJNE A,#0CH,CHECK2;下面是0.8s的情況,響并顯示號(hào)數(shù)并清R0 SETB RING MOV R0,#00H MOV R3,34H;取回號(hào)數(shù) MOV R5,#0BH MOV R4,#0BH;顯示FF和號(hào)數(shù) AJMP CHECK2 CHECK2: JNB P3.1,QUIT1 ACALL DISPLAY AJMP HERE QUIT1:CLR RING CLR OK AJMP MAIN ;====顯示程序==== DISPLAY:MOV DPTR,#DAT1 MOV A,R3 MOVC A,@A+DPTR MOV P2,#0FEH MOV P0,A ACALL DELAY2 MOV DPTR,#DAT2 MOV A,R5 MOVC A,@A+DPTR MOV P2,#0FDH MOV P0,A ACALL DELAY2 MOV A,R4 MOVC A,@A+DPTR MOV P2,#0FBH MOV P0,A ACALL DELAY2 RET DAT1:DB 00H,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;對(duì)應(yīng)“滅”,“1”,“2” ,“3”,“4”,“5”,“6”,“7”,“8”,“9”,“滅”,“F” DAT2:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H,71H;第一個(gè)顯示“0” ;====顯示延時(shí)==== DELAY:MOV 35H,#08H DELAY3:ACALL DISPLAY DJNZ 35H,DELAY3 RET ;====去抖動(dòng)(按鍵延時(shí)4236個(gè)機(jī)器周期)==== DELAY1:MOV 32H,#12H DELAY4:MOV 33H,#0AFH DELAY5:DJNZ 33H,DELAY5 DJNZ 32H,DELAY4 RET ;====顯示延時(shí)(延時(shí)4236個(gè)機(jī)器周期)==== DELAY2:MOV 32H,#43H DELAY6:MOV 33H,#1EH MOV A,R7;每隔60-70個(gè)機(jī)器周期讀一次P1口,全1為無效,繼續(xù)讀,有一個(gè)不為1時(shí),轉(zhuǎn)到正常搶答處理 JNZ LOOP3;沒讀到有效數(shù)轉(zhuǎn)到LOOP3繼續(xù)循環(huán) DELAY7:DJNZ 33H,DELAY7 DJNZ 32H,DELAY6 RET LOOP3:MOV A,P1 CJNE A,#0FFH,LOOP5 LOOP4:MOV 36H,A AJMP DELAY7 LOOP5:DEC R7 AJMP LOOP4 ;====發(fā)聲程序==== BARK:SETB RING ACALL DELAY ACALL DELAY CLR RING RET ;====T0溢出中斷==== T00:MOV TH0,#0ECH MOV TL0,#0FFH JNB RING,OUT CPL P3.6 OUT:RETI ;====T1溢出中斷==== T11:MOV TH1,#3CH MOV TL1,#0B0H INC R0 RETI END 附錄二 單片機(jī)八路智能搶答器原理圖 參 考 文 獻(xiàn) [1] 孫蕙芹.單片機(jī)實(shí)用教程.北京:中國(guó)電力出版社,2009 [2] 賈海瀛.數(shù)字電子技術(shù)與實(shí)訓(xùn).北京:機(jī)械工業(yè)出版社,2008.1 [3] 李雅軒.模擬電子技術(shù)-2版.西安:西安電子科技大學(xué)出版社,2006.7 [4] 張永飛.電工基礎(chǔ).天津:天津大學(xué)出版社,2008.9 [5] 張立科.單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航.第一版.人民郵電出版社,1988 [6] 潘新民.微型計(jì)算機(jī)控制技術(shù).北京:電子工業(yè)出版社,2003 [7] 李響初.基于MCS-51單片機(jī)的智能時(shí)鐘控制系統(tǒng)設(shè)計(jì).世界電子元件,2007,7:97~98 [8] Proteus入門講義 百度文庫 [9] C51 Keil uVision2 百度文庫 29- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 基于 51 單片機(jī) 八路 搶答 課程設(shè)計(jì)
鏈接地址:http://m.appdesigncorp.com/p-6683933.html