基于單片機(jī)的8路智能搶答器設(shè)計(jì)畢業(yè)設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘 要</b></p><p>  隨著科學(xué)技術(shù)的發(fā)展和普及,各種各樣的競(jìng)賽越來(lái)越多,其中搶答器的作用也就顯而易見。目前很多搶答器基本上采用小規(guī)模數(shù)字集成電路設(shè)計(jì),使用起來(lái)不夠理想。因此設(shè)計(jì)一更易于使用和區(qū)分度搞的搶答器成為了非常迫切的任務(wù)?,F(xiàn)在單片機(jī)已進(jìn)入各個(gè)領(lǐng)域,以其功耗小、智能化而著稱,所以若利用單片機(jī)來(lái)設(shè)計(jì)搶答器,便使以上問(wèn)題得以解決,針對(duì)以上情況

2、,本文設(shè)計(jì)出以STC89C52單片機(jī)為核心的八路搶答器。我們采用了數(shù)字顯示器直接指示,自動(dòng)鎖存顯示結(jié)果,并自動(dòng)復(fù)位的設(shè)計(jì)思想,它能根據(jù)不同的搶答輸入信號(hào),經(jīng)過(guò)單片機(jī)的控制處理并產(chǎn)生不同的與輸入信號(hào)相對(duì)應(yīng)的輸出信號(hào),最好通過(guò)液晶顯示屏顯示相應(yīng)的路數(shù),即使兩組的搶答時(shí)間相差幾微秒,也可分辨出事哪組優(yōu)先按下的按鍵,它充分了單片機(jī)系統(tǒng)的優(yōu)點(diǎn),具有結(jié)構(gòu)簡(jiǎn)單、功能強(qiáng)大、可靠性好、實(shí)用性強(qiáng)的特點(diǎn)。</p><p>  本設(shè)計(jì)采

3、用STC89C52單片機(jī)設(shè)計(jì)一個(gè)搶答器系統(tǒng)。初步電路要求設(shè)置有8個(gè)鍵盤,但是考慮到系統(tǒng)要有一定的可拓展性,本設(shè)計(jì)最終采取矩陣鍵盤從而設(shè)置16個(gè)鍵盤,可以供16名選手參加比賽。本設(shè)計(jì)共分為聽題、準(zhǔn)備搶答、搶答超時(shí)三個(gè)階段進(jìn)行設(shè)計(jì)。主持人讀題時(shí)為聽題階段,此時(shí)搶答無(wú)效,按下開始按鈕,則開始搶答,并顯示搶答時(shí)限共十秒;若有人按下自己搶答鍵,則在液晶屏上顯示對(duì)應(yīng)編號(hào)和LED點(diǎn)陣上顯示搶答剩余時(shí)間,剩余時(shí)間為0秒時(shí),則進(jìn)入over階段,若無(wú)人搶答

4、,本次搶答無(wú)效,若在這之后有人搶答,顯示對(duì)應(yīng)編號(hào)并且顯示無(wú)效;有人搶答情況下,主持人讀完題目后按下開始作答按鈕,則顯示作答時(shí)間,作答時(shí)間低于5秒,會(huì)報(bào)警提示。</p><p>  關(guān)鍵詞:可靠性好;可拓展性;LED;液晶顯示屏;STC89C52單片機(jī);矩陣鍵盤 </p><p><b>  ABSTRACT</b></p><p>  With

5、 the development and popularization of science and technology, more and more variety of competitions, including the role of Responder also obvious. At present, many Responder basically small-scale digital integrated circ

6、uit design, using them less than ideal. So design an easier to use and engage in discrimination Responder become a very urgent task. SCM now has entered all areas, with its low power consumption, intelligence known, so i

7、f using microcontroller design Responder, will make thes</p><p>  The subject applies the STC89C52 MCU to design the responder system. The circuit set 8 keyboards. But taking into account the scalability of

8、the system, this design take the matrix keyboard to set the 16 keyboards, so the circuit can be used for 16 players to participate in the competition. The responder will work when a host press the start button, and show

9、answer time limit; if nobody answer the question when the remaining time is 0 seconds, the answer is invalid. The moderator will press the </p><p>  Key words:Scalability; STC89C52 single chip microcomputer;

10、 Matrix keyboard</p><p><b>  目 錄</b></p><p><b>  摘 要I</b></p><p>  ABSTRACTII</p><p><b>  1 前言1</b></p><p>  1

11、.1 設(shè)計(jì)背景及意義1</p><p>  1.2 設(shè)計(jì)要求2</p><p>  1.3 設(shè)計(jì)內(nèi)容2</p><p>  1.4 設(shè)計(jì)內(nèi)容的擴(kuò)展3</p><p><b>  2 系統(tǒng)概述3</b></p><p>  2.1 系統(tǒng)的主要功能3</p><p>

12、;  2.2 系統(tǒng)工作狀態(tài)4</p><p>  2.3 單片機(jī)STC89C52功能簡(jiǎn)介5</p><p>  3 硬件電路設(shè)計(jì)9</p><p>  3.1 Proteus軟件介紹9</p><p>  3.2 單片機(jī)最小系統(tǒng)設(shè)計(jì)9</p><p>  3.3 按鍵輸入電路設(shè)計(jì)11</p>

13、<p>  3.4 顯示電路設(shè)計(jì)14</p><p>  3.5 報(bào)警電路設(shè)計(jì)18</p><p>  3.6 電源電路設(shè)計(jì)19</p><p>  3.7 下載器電路20</p><p>  3.8 總體電路設(shè)計(jì)21</p><p>  3.9 實(shí)物電路制作22</p><p

14、><b>  4 軟件設(shè)計(jì)23</b></p><p>  4.1 Keil C51軟件簡(jiǎn)介23</p><p>  4.2 主程序系統(tǒng)結(jié)構(gòu)23</p><p>  4.3 程序流程圖24</p><p>  4.4 程序設(shè)計(jì)26</p><p><b>  結(jié) 論

15、36</b></p><p>  參 考 文 獻(xiàn)37</p><p><b>  致 謝39</b></p><p><b>  1 前言</b></p><p>  1.1 設(shè)計(jì)背景及意義</p><p>  隨著科技的飛速發(fā)展,單片機(jī)已經(jīng)滲透到我們

16、生活的各個(gè)領(lǐng)域,幾乎在每個(gè)領(lǐng)域都能找到單片機(jī)的影子。上至軍用航空導(dǎo)彈導(dǎo)航系統(tǒng)下至生活中使用的電子表等用品,都離不開單片機(jī)應(yīng)用。</p><p>  單片機(jī)產(chǎn)生于20世紀(jì)70年代末,大致經(jīng)歷了三個(gè)階段。單片微型計(jì)算機(jī)(Single Chip Microcomputer)階段,微控制器(Micro Controller Unit)階段,SoC單片機(jī)(System On Chip)階段。著名的單片機(jī)生產(chǎn)企業(yè)有Atmel

17、、STC、飛利浦、Intel、Philips等公司。[1]</p><p>  單片機(jī)出現(xiàn)方便了人們的生活,所以單片機(jī)的使用也使搶答器的電路更加簡(jiǎn)便和實(shí)用。</p><p>  搶答器的運(yùn)用雖然很廣泛,但是,傳統(tǒng)的搶答器具有以下的問(wèn)題亟待解決:①有的傳統(tǒng)搶答器由數(shù)字電路組成,在使用現(xiàn)場(chǎng)會(huì)有多名選手或代表團(tuán)參加比賽,所以會(huì)造成布線繁瑣等麻煩,現(xiàn)場(chǎng)不美觀等問(wèn)題;②由于傳統(tǒng)搶答器由電子元器件集成

18、制作而成,所以就會(huì)造成可靠性低,元器件集成工藝復(fù)雜,花費(fèi)比較高等麻煩:③由與傳統(tǒng)的搶答器由數(shù)字電路構(gòu)成,所以可能造成搶答時(shí)控制不精確,功能單一等缺陷。[2]</p><p>  所以,為了改進(jìn)傳統(tǒng)搶答器的各種缺點(diǎn),本課題采用STC89C52單片機(jī)設(shè)計(jì)搶答器系統(tǒng)。采用單片機(jī)設(shè)計(jì)搶答器,不僅可以避免布線復(fù)雜,集成工藝復(fù)雜等問(wèn)題,還可以減小誤差,降低開支,充分利用現(xiàn)有資源。使得搶答器工作效率高,反應(yīng)靈敏。采用單片機(jī)設(shè)計(jì)

19、的搶答器可以簡(jiǎn)單的實(shí)現(xiàn)拓展功能,可以擴(kuò)至16路。而且單片機(jī)具有方便、低功耗、抗干擾性強(qiáng)等特點(diǎn),使得本設(shè)計(jì)具有更強(qiáng)的實(shí)用價(jià)值。</p><p>  通過(guò)本次畢業(yè)設(shè)計(jì),我們應(yīng)該熟悉單片機(jī)的基本結(jié)構(gòu),將理論所學(xué)知識(shí)運(yùn)用到實(shí)際中來(lái),能熟練運(yùn)用Proteus仿真軟件,和Keil51編程軟件。從而提高自身的編程能力以及解決問(wèn)題的能力。 </p><p><b>  1.2 設(shè)計(jì)要求</

20、b></p><p>  利用單片機(jī)使用方便、低功耗、抗干擾性強(qiáng)、可靠性高等特點(diǎn),設(shè)計(jì)一個(gè)8路智能搶答器。</p><p>  以單片機(jī)為核心處理器,實(shí)現(xiàn)一個(gè)智能搶答器,要求同時(shí)供8名選手或8個(gè)代表隊(duì)參加比賽。</p><p>  同時(shí)要設(shè)置一個(gè)用于控制整個(gè)電路的開關(guān),用來(lái)控制整個(gè)搶答器系統(tǒng)的清零、開始搶答及定時(shí)器預(yù)置等。</p><p&g

21、t;  搶答器具有鎖存搶答選手編號(hào)和顯示功能,搶答正式開始后,若有參賽選手或代表隊(duì)按下自己按鈕,鎖存并顯示選手編號(hào),并禁止其他選手搶答。</p><p><b>  1.3 設(shè)計(jì)內(nèi)容</b></p><p>  利用單片機(jī)實(shí)現(xiàn)8路智能搶答器功能。先在Proteus軟件上畫出系統(tǒng)的各部分硬件電路設(shè)計(jì)框圖,并且在Keil軟件上完成對(duì)應(yīng)的軟件程序設(shè)計(jì),實(shí)現(xiàn)系統(tǒng)的主要功能。硬

22、件設(shè)計(jì)內(nèi)容主要包括:復(fù)位電路,晶振電路,矩陣鍵盤輸入,LED顯示模塊,報(bào)警電路部分。軟件設(shè)計(jì)內(nèi)容主要包括:鍵盤掃描,編碼顯示,搶答選手掃描,中斷程序控制,定時(shí)器的使用。</p><p>  搶答器要求可同時(shí)供8名選手或8個(gè)代表隊(duì)參加搶答比賽。此外,設(shè)置一個(gè)控制開關(guān),用來(lái)控制系統(tǒng)的清零、搶答開始及定時(shí)器的預(yù)置等。搶答器具有數(shù)據(jù)鎖存和顯示功能。</p><p>  主持人讀題,此時(shí)的LED點(diǎn)陣

23、顯示心形待機(jī)狀態(tài),液晶屏上顯示prepare字樣,此時(shí)選手認(rèn)真聽題,不允許提前搶答,如果搶答蜂鳴器會(huì)響起,并且在液晶屏上會(huì)顯示該選手編號(hào)。</p><p>  主持人讀題完畢并提示選手做好搶答準(zhǔn)備,按下開始搶答按鈕,LED屏上開始倒計(jì)時(shí)10秒,液晶屏上顯示選手plase answer字樣,選手搶答完畢后,蜂鳴器響起并且在液晶屏上以及LED數(shù)碼管上顯示選手編號(hào)。</p><p>  若倒計(jì)時(shí)

24、10秒結(jié)束仍未有選手搶答,則會(huì)在液晶屏上顯示over字樣,并結(jié)束此輪,若此后有選手按下?lián)尨疰I,則會(huì)在液晶屏以及LED數(shù)碼管上顯示選手編號(hào)。</p><p>  此輪結(jié)束,主持人按下復(fù)位鍵進(jìn)入下一輪搶答。</p><p>  1.4 設(shè)計(jì)內(nèi)容的擴(kuò)展</p><p>  設(shè)計(jì)題目要求設(shè)計(jì)基于單片機(jī)的8路搶答器,但是在實(shí)際運(yùn)用過(guò)程中,參賽的選手或者代表隊(duì)往往多于8路,所以

25、8路搶答往往不夠用。本次設(shè)計(jì)為了更好的適應(yīng)實(shí)際要求,在設(shè)計(jì)過(guò)程中對(duì)電路做了擴(kuò)展,將基于單片機(jī)的8路搶答器擴(kuò)展設(shè)計(jì)成16路搶答器。在下文中,所有設(shè)計(jì)都是按照16路搶答器要求來(lái)完成的。</p><p><b>  2 系統(tǒng)概述</b></p><p>  2.1 系統(tǒng)的主要功能</p><p>  本系統(tǒng)運(yùn)用單片機(jī)來(lái)實(shí)現(xiàn)搶答器設(shè)計(jì),主要包括一下幾個(gè)

26、模塊:復(fù)位電路,晶振電路,矩陣鍵盤輸入,顯示模塊,報(bào)警電路。</p><p>  圖2.1系統(tǒng)主要功能</p><p>  2.2 系統(tǒng)工作狀態(tài)</p><p>  將16位選手編號(hào)1-16,接通電源后,主持人按下開始鍵則開始搶答,16位選手在規(guī)定時(shí)間內(nèi)搶答,當(dāng)有選手按鍵搶答時(shí),在屏幕上顯示選手號(hào)碼且顯示剩余時(shí)間,并禁止其他選手搶答;此時(shí),主持人讀完題目按下開始答題

27、按鈕則開始答題,選手要在規(guī)定時(shí)間內(nèi)完成作答,若答題時(shí)間快到時(shí)會(huì)報(bào)警。當(dāng)無(wú)選手搶答時(shí),剩余搶答時(shí)間小于5秒時(shí)會(huì)通過(guò)閃亮小燈響起蜂鳴器來(lái)報(bào)警,如果搶答時(shí)間耗盡還沒有選手按下?lián)尨疰I,則此輪搶答無(wú)效。主持人按下復(fù)位按鈕則搶答重新開始。</p><p>  圖2.2系統(tǒng)工作狀態(tài)</p><p>  2.3 單片機(jī)STC89C52功能簡(jiǎn)介</p><p>  本次畢業(yè)設(shè)計(jì)采用的

28、是STC89C52型號(hào)的單片機(jī),也是16路搶答器電路的核心處理器。</p><p>  STC89C52是由宏晶公司生產(chǎn)的一種8位微型處理器,具有8k可編程的只讀Flash存儲(chǔ)器。巨有低功耗、低電壓、低價(jià)格和高性能的特點(diǎn)。在當(dāng)今科技發(fā)展飛速的時(shí)期,STC89C52單片機(jī)的使用越來(lái)越廣泛。</p><p>  STC89C52是STC89C51的升級(jí)產(chǎn)品,與STC89C51比較多了以下功能:

29、STC89C52具有3個(gè)定時(shí)器/計(jì)數(shù)器,STC89C51只有2個(gè)定時(shí)器/計(jì)數(shù)器;STC89C52具有8KB的Flash存儲(chǔ)器,而STC89C51具有4KB的Flash存儲(chǔ)器。</p><p>  STC89C52單片機(jī)內(nèi)部主要有以下部件組成:8KB Flash存儲(chǔ)器,512B數(shù)據(jù)存儲(chǔ)器,32條I/O口線,3個(gè)定時(shí)器/計(jì)時(shí)器,看門狗定時(shí)電路,內(nèi)置4KB的EEPROM,用于多處理機(jī)通信、I/O擴(kuò)展或全雙工UART的串

30、行口;一個(gè)具有8個(gè)中斷源、4個(gè)優(yōu)先級(jí)的中斷嵌套結(jié)構(gòu)。</p><p>  如下圖2.3是STC89C52的管腳示意圖:</p><p>  圖2.3 STC89C52的管腳示意圖</p><p>  STC89C52各個(gè)管腳的功能:</p><p><b>  電源與晶振</b></p><p>

31、;  Vcc接+5V電壓,GND接地。</p><p>  XTAL1接外部晶體振蕩器的一個(gè)引腳。在單片機(jī)內(nèi)部,他是一個(gè)反相放大器的輸入端,此反相放大器構(gòu)成了片內(nèi)振蕩器。</p><p>  XTAL2接外部晶體振蕩器的另一個(gè)引腳。在單片機(jī)內(nèi)部,他是一個(gè)反相放大器的輸出端,輸入到內(nèi)部時(shí)鐘發(fā)生器。</p><p>  I/O:P0、P1、P2、P3共4個(gè)I/O口,32

32、根</p><p>  P0:8位、漏極開路的雙向I/O口,不含內(nèi)部上拉電阻。</p><p>  P1:8位、準(zhǔn)雙向I/O口,內(nèi)部含有上拉電阻。</p><p>  P2:8位、準(zhǔn)雙向I/O口,內(nèi)部含有上拉電阻。</p><p>  P3:8位、準(zhǔn)雙向I/O口,內(nèi)部含有上拉電阻。</p><p><b> 

33、 控制線:共4根</b></p><p>  RST----復(fù)位輸入信號(hào),高電平有效。</p><p>  在振蕩器工作時(shí),在RST上作用兩個(gè)機(jī)器周期以上的高電平,便可實(shí)現(xiàn)復(fù)位操作。</p><p>  EA/Vpp----片外程序存儲(chǔ)器訪問(wèn)允許信號(hào),低電平有效。</p><p>  當(dāng)EA接地。單片機(jī)只執(zhí)行片外存儲(chǔ)器中的程序;當(dāng)

34、EA接Vcc時(shí), CPU首先執(zhí)行片內(nèi)程序存儲(chǔ)器中的程序,然后自動(dòng)轉(zhuǎn)向執(zhí)行片外程序存儲(chǔ)器中的程序。</p><p>  如果程序鎖定位LB1被編程,那么EA值將在復(fù)位時(shí)由片內(nèi)鎖存。在與Flash并行編程/校驗(yàn)期時(shí)。該引腳施加12V的編程電壓Vpp。</p><p>  ALE/PROG----地址鎖存允許信號(hào)輸出。</p><p>  在CPU訪問(wèn)外部程序存儲(chǔ)器或外部

35、數(shù)據(jù)存儲(chǔ)器時(shí),ALE提供一個(gè)地址鎖存信號(hào),將低8位地址鎖存在片外存儲(chǔ)器中。</p><p>  在與Flash并行編程/校驗(yàn)期間,該引腳也是編程負(fù)脈沖的輸入端。</p><p>  在正常操作狀態(tài)下,該引腳端口輸出恒定頻率的脈沖。其頻率為晶振頻率的1/6,可用做外部定時(shí)或其他觸發(fā)信號(hào)。應(yīng)注意,單片機(jī)每次訪問(wèn)內(nèi)部數(shù)據(jù)存儲(chǔ)器時(shí),都要失去一個(gè)ALE脈沖。</p><p>

36、  ALE的禁止位不影響對(duì)外部存儲(chǔ)器的訪問(wèn)。</p><p>  PSEN----片外程序存儲(chǔ)器選通信號(hào),低電平有效。</p><p>  當(dāng)STC89C52執(zhí)行來(lái)自外部程序存儲(chǔ)器的指令代碼時(shí),PSEN每個(gè)機(jī)器周期兩次有效。在訪問(wèn)外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN無(wú)效。[3]</p><p><b>  3 硬件電路設(shè)計(jì)</b></p>

37、<p>  3.1 Proteus軟件介紹</p><p>  Proteus軟件是英國(guó)公司出版的一款EDA軟件。此軟件不僅具有一般EDA軟件的仿真功能,而且能仿真單片機(jī)及其外圍電路。它是目前最好的仿真單片機(jī)及外圍電路軟件。</p><p>  在進(jìn)行各種電路設(shè)計(jì)之前,必須要進(jìn)行電路原理圖的仿真,只有在軟件仿真成功才可能在實(shí)際電路中實(shí)現(xiàn)。并且由于實(shí)驗(yàn)室器件的有限,有些電路無(wú)法在實(shí)

38、際中設(shè)計(jì)出來(lái),所以我們必須要通過(guò)Proteus仿真電路。Proteus軟件是世界上唯一將電路仿真、PCB設(shè)計(jì)和虛擬模型仿真三合一的設(shè)計(jì)平臺(tái),在單片機(jī)電路設(shè)計(jì)中使用更為廣泛。[4]</p><p>  3.2 單片機(jī)最小系統(tǒng)設(shè)計(jì)</p><p>  在利用單片機(jī)設(shè)計(jì)各種電路的過(guò)程中都離不開最小系統(tǒng)的外圍支持,單片機(jī)最小系統(tǒng)是每個(gè)單片機(jī)電路設(shè)計(jì)必不可少的部分,單片機(jī)最小系統(tǒng)包含兩個(gè)部分:時(shí)鐘頻

39、率電路和復(fù)位電路。</p><p>  3.2.1 時(shí)鐘頻率電路設(shè)計(jì)</p><p>  單片機(jī)工作時(shí)需要時(shí)鐘電路產(chǎn)生時(shí)鐘信號(hào),指令執(zhí)行中各信號(hào)之間的相互關(guān)系就是時(shí)序所研究的內(nèi)容。為保證同步工作方式實(shí)現(xiàn),電路應(yīng)在唯一的時(shí)鐘信號(hào)控制下按照時(shí)序進(jìn)行工作。</p><p>  時(shí)鐘信號(hào)可以通過(guò)兩種電路形式得到:內(nèi)部振蕩方式和外部振蕩方式。</p><p

40、>  外部振蕩方式是把外部已有的時(shí)鐘信號(hào)引入單片機(jī)內(nèi)。這種方式適宜用來(lái)使單片機(jī)的時(shí)鐘與外部信號(hào)保持同步。</p><p>  本系統(tǒng)采用內(nèi)部振蕩方式產(chǎn)生時(shí)鐘信號(hào)。STC89C52單片機(jī)內(nèi)部</p><p>  帶有時(shí)鐘電路,因此,只需要將定時(shí)控制元件(晶體振蕩器和電容)通過(guò)XTAL1和XTAL2引腳接入單片機(jī)芯片,即可形成一個(gè)穩(wěn)定的自激振蕩器。</p><p>

41、;  如圖3.1時(shí)鐘芯片DS1302:</p><p>  圖3.1 時(shí)鐘頻率電路</p><p>  3.2.2 復(fù)位電路設(shè)計(jì)</p><p>  在搶答器電路中,難免會(huì)出現(xiàn)操作失誤,使得程序跑偏,或者出錯(cuò),所以需要復(fù)位電路來(lái)使得在出錯(cuò)時(shí)使電路恢復(fù)正常工作。</p><p>  復(fù)位電路是單片機(jī)的初始化操作,使單片機(jī)從0開始執(zhí)行程序。復(fù)位不

42、僅能使單片機(jī)進(jìn)入系統(tǒng)正常初始化,而且當(dāng)程序運(yùn)行出錯(cuò)或操作不當(dāng)使系統(tǒng)死鎖時(shí),按下復(fù)位按鈕重新啟動(dòng),使單片機(jī)正常工作。</p><p>  復(fù)位方式有以下四種:上電自動(dòng)復(fù)位、按鍵電平復(fù)位、外部脈沖復(fù)位、和自動(dòng)復(fù)位。即外部產(chǎn)生復(fù)位信號(hào)由單片機(jī)的9腳(RST)輸入,從而使單片機(jī)完成復(fù)位操作。復(fù)位信號(hào)是高電平有效,有效時(shí)間應(yīng)持續(xù)兩個(gè)機(jī)器周期以上。</p><p>  本系統(tǒng)采用的是按鍵電平復(fù)位方式,

43、如圖3.2所示復(fù)位電路:</p><p><b>  圖3.2復(fù)位電路</b></p><p>  3.3 按鍵輸入電路設(shè)計(jì)</p><p>  在搶答器電路中每位選手會(huì)通過(guò)手中的搶答按鍵來(lái)獲得優(yōu)先答題權(quán)。每位選手的按鍵就構(gòu)成搶答器電路的鍵盤輸入。鍵盤輸入電路是單片機(jī)外圍電路中最常見的一種電路。</p><p>  鍵盤

44、有兩種形式,編碼鍵盤和非編碼鍵盤。當(dāng)有鍵盤被按下時(shí),通過(guò)一種專用的硬件編碼器來(lái)識(shí)別按鍵閉合,并且確定出鍵盤編碼號(hào)碼,這種鍵盤稱為編碼鍵盤,如計(jì)算機(jī)鍵盤。而通過(guò)軟件編程方式來(lái)確定某個(gè)按鍵的閉合的鍵盤稱為非編碼鍵盤,在單片機(jī)組成的各種系統(tǒng)中,用的比較多的是非編碼鍵盤。</p><p>  非編碼鍵盤又分為:獨(dú)立鍵盤和行列式鍵盤(或稱矩陣鍵盤)。</p><p>  對(duì)于每一個(gè)按鍵需要與單片機(jī)的

45、I/O口相連,從而讀出鍵盤的狀態(tài)。單片機(jī)可以通過(guò)軟件編程讀出哪個(gè)鍵按下,從而做出對(duì)應(yīng)的操作。</p><p>  3.3.1 獨(dú)立式鍵盤電路設(shè)計(jì)</p><p>  獨(dú)立式鍵盤是單片機(jī)電路中用的最多的鍵盤輸入,獨(dú)立鍵盤是由鍵盤的兩端直接和單片機(jī)的I/O口與接地相連。當(dāng)鍵盤按下時(shí),對(duì)應(yīng)端口與地相連,則直接將對(duì)應(yīng)的端口變成低電平,然后做出相應(yīng)的操作。每個(gè)獨(dú)立鍵盤需要單獨(dú)使用一根I/O線,所以當(dāng)

46、一個(gè)電路中鍵盤輸入較多時(shí)采用獨(dú)立鍵盤設(shè)計(jì)就會(huì)造成I/O口的大量浪費(fèi),從而造成I/O口不夠用。所以,只有按鍵數(shù)量不多時(shí),采用獨(dú)立鍵盤輸入。電路中的開始搶答按鍵和開始答題按鍵采用的就是獨(dú)立式鍵盤輸入。獨(dú)立鍵盤的好處就是:每個(gè)按鍵單獨(dú)使用一根I/O線,鍵盤掃描容易,且獨(dú)立鍵盤每個(gè)按鍵互不影響。本電路中用到的獨(dú)立鍵盤有下面幾處。</p><p>  如圖3.3所示電路:</p><p><b

47、>  圖3.3 控制電路</b></p><p>  當(dāng)按下開始搶答按鍵時(shí)候,P2.0口被硬件置為低電平,控制整個(gè)電路開始,開始搶答;當(dāng)按下開始答題按鍵時(shí)候,P2.1被硬件置為低電平,顯示答題時(shí)間。</p><p>  3.3.2 矩陣鍵盤電路設(shè)計(jì)</p><p>  在矩陣鍵盤中,每4個(gè)鍵盤構(gòu)成一行,一共四行四列。每一行按鍵的一端連接起來(lái),每一列

48、按鍵的另一端連接起來(lái),總共構(gòu)成8路,所以,一個(gè)單片機(jī)的P3口就可以構(gòu)成16個(gè)鍵盤電路的輸入端口了。</p><p>  在本次設(shè)計(jì)中,有16個(gè)選手或代表隊(duì)參加比賽,每一個(gè)代表隊(duì)需要一個(gè)搶答按鍵,就需要16個(gè)按鈕。在設(shè)計(jì)中發(fā)現(xiàn),如果采用獨(dú)立鍵盤連接電路,則需要一個(gè)端口連接一個(gè)按鍵,所以需要占用16個(gè)I/O口,就會(huì)造成資源的浪費(fèi),成本增高。所以當(dāng)有16位選手參加搶答比賽時(shí),需要16個(gè)鍵盤,采用4 X 4矩陣鍵盤只需要

49、8個(gè)I/O口,從而大大減少了I/O口資源的浪費(fèi)。當(dāng)鍵盤個(gè)數(shù)超過(guò)8個(gè),采用矩陣鍵盤是最為合適的。</p><p>  相比獨(dú)立鍵盤,矩陣鍵盤的特點(diǎn)是:電路的I/O口需要相對(duì)較少,能有效節(jié)省I/O口資源浪費(fèi);但是硬件電路相對(duì)復(fù)雜,鍵盤掃描比獨(dú)立鍵盤掃描繁瑣,需要獨(dú)立軟件編程,完成鍵盤掃描,從而確定那個(gè)按鍵按下,做出相應(yīng)操作,矩陣鍵盤更適合多按鍵電路。</p><p>  以下是搶答器系統(tǒng)的矩陣

50、鍵盤輸入電路,P3口高四位(P3.4-P3.7)作為列線,P3口低四位(P3.0-P3.3)作為行線,電路如圖3.4所示:</p><p>  圖3.4 矩陣鍵盤電路</p><p>  矩陣鍵盤接好以后,就要對(duì)應(yīng)的鍵盤掃描工作,判斷出那個(gè)按鍵按下,從而做出對(duì)應(yīng)操作。當(dāng)沒有按鍵按下的時(shí)候所有行線和列線是開路的。當(dāng)鍵盤上的一個(gè)按鍵被按下的時(shí)候,該按鍵的行線和列線就會(huì)被短路。將所有的列線都置為

51、高電平,行線逐個(gè)置為低電平。例如當(dāng)把第一行線置為低電平,第一行有按鍵按下時(shí)該按鍵的列線也會(huì)變成低電平,從而判斷第一行的某個(gè)按鈕被按下,以此類推,單片機(jī)根據(jù)電平的變化從而掃描出鍵盤操作。</p><p>  鍵盤的掃描分為循環(huán)掃描工作方式和中斷掃描工作方式。</p><p>  循環(huán)掃描工作方式,是在單片機(jī)工作的過(guò)程中調(diào)用鍵盤掃描子程序來(lái)響應(yīng)按鍵輸入。此種掃描方式缺點(diǎn)是,不管鍵盤有無(wú)按下,單

52、片機(jī)都會(huì)掃描鍵盤,然而在工作的過(guò)程中不需要按鍵按下,此時(shí)系統(tǒng)處于空掃描狀態(tài)。為了提高單片機(jī)的工作效率,采用中斷掃描,即只有按鍵按下時(shí),才發(fā)送中斷申請(qǐng),進(jìn)行鍵盤掃描。[5]</p><p>  本次設(shè)計(jì)采用了循環(huán)掃描的工作方式。</p><p>  按鍵在按下的過(guò)程中有可能會(huì)產(chǎn)生抖動(dòng),此時(shí)邏輯電平是不穩(wěn)定,所以在鍵盤掃描過(guò)程中,一定要在軟件設(shè)計(jì)過(guò)程加入去抖部分。在本次設(shè)計(jì)中,我們通過(guò)在軟件編

53、程過(guò)程中,對(duì)按鍵掃描進(jìn)行延時(shí)的方法中來(lái)去除抖動(dòng)。在按下按鍵并處理完相應(yīng)操作時(shí),可以在軟件編程中增加鍵盤釋放的程序。[6]</p><p>  3.4 顯示電路設(shè)計(jì)</p><p>  顯示電路是最常用的輸出設(shè)備。為觀察單片機(jī)的運(yùn)行狀態(tài),往往需要顯示器來(lái)直觀的表現(xiàn)出來(lái)。搶答器電路需要通過(guò)顯示電路,來(lái)顯示目前的搶答階段、搶答選手的標(biāo)號(hào),和倒計(jì)時(shí)顯示。本系統(tǒng)采用LED數(shù)碼管、LED點(diǎn)陣、以及液晶

54、屏顯示,數(shù)碼管前兩位顯示倒計(jì)時(shí),后兩位顯示搶答選手的標(biāo)號(hào)。</p><p>  下圖3.5是搶答器系統(tǒng)的顯示電路:</p><p><b>  圖3.5顯示電路</b></p><p>  3.4.1四位一體數(shù)碼管顯示</p><p>  在經(jīng)過(guò)透明鎖存器的數(shù)據(jù)緩沖電路后,就會(huì)將數(shù)據(jù)傳輸?shù)斤@示器中。比較常用的顯示器有16

55、02液晶顯示器、數(shù)碼管顯示等。由于搶答器電路中需要顯示的數(shù)據(jù)比較簡(jiǎn)單,如若采用1602液晶顯示就會(huì)有些浪費(fèi)。所以本系統(tǒng)的顯示電路采用四位一體共陰數(shù)碼管顯示。每一位數(shù)碼管顯示是由8個(gè)發(fā)光二極管組成的,根據(jù)不同的二極管發(fā)光,從而顯示出不同的數(shù)據(jù)。</p><p>  通常我們?cè)陲@示采用的方法有兩種:動(dòng)態(tài)顯示和靜態(tài)顯示。</p><p>  靜態(tài)顯示原理是:每個(gè)數(shù)碼管由8個(gè)小型的發(fā)光二極管組成,

56、所以不同的二極管發(fā)光便顯示出不同的字符,8個(gè)發(fā)光二極管必須接一個(gè)8位數(shù)據(jù)線來(lái)保持所需顯示的字形,當(dāng)送入一次字形碼的編碼后,即可一直顯示所需字形,直到送入一個(gè)新的字形編碼為止。靜態(tài)顯示的優(yōu)點(diǎn)是占用CPU較少的時(shí)間,數(shù)碼顯示便于控制。缺點(diǎn)是:每一個(gè)字形需要一個(gè)數(shù)碼管,每個(gè)數(shù)碼管需要8位I/O口控制,所需電路復(fù)雜且成本高。[8]</p><p>  動(dòng)態(tài)顯示原理是:將所有位數(shù)碼管的8位發(fā)光二極管的信號(hào)線并聯(lián)在一起,由一

57、個(gè)特殊的位選線控制那一位數(shù)碼管顯示。顯示特性沒有靜態(tài)顯示好,利用二極管發(fā)光的和人眼視覺的暫留作用,讓人感覺好像各位數(shù)碼管在同時(shí)顯示,稱為動(dòng)態(tài)顯示。</p><p>  數(shù)碼顯示分為共陰和共陽(yáng)顯示兩種。下圖3.7是數(shù)碼管顯示的原理圖:</p><p>  圖3.7 共陰數(shù)碼管原理圖</p><p>  CS0、CS1、CS2、CS3分別為四位一體數(shù)碼管的位選端,當(dāng)其中

58、一個(gè)端口置于低電平時(shí),則這一位數(shù)碼管被選中;然后再設(shè)置段選端,段選端由8位數(shù)據(jù)線控制,當(dāng)一個(gè)端口處于高電平是則對(duì)應(yīng)的一段顯示。從而完成數(shù)碼顯示。</p><p>  如圖3.8為所用數(shù)碼管:</p><p>  圖3.8 數(shù)碼管電路</p><p>  圖中A、B、C、D四個(gè)端口分別為數(shù)碼管顯示的位選,a、b、c、d、e、f、g、p為數(shù)碼管的段選。</p>

59、;<p>  數(shù)碼管的位選由P1.0-P1.3控制,段選信號(hào)由P0.0-P0.7控制。當(dāng)程序分別控制P0口和P1口的時(shí)候,然后完成顯示功能。</p><p>  3.5 報(bào)警電路設(shè)計(jì)</p><p>  在搶答器系統(tǒng)里,當(dāng)搶答時(shí)間快要結(jié)束時(shí)或者答題時(shí)間快要結(jié)束時(shí),需要一個(gè)報(bào)警電路來(lái)提示搶答選手,所以在本次設(shè)計(jì)中添加了報(bào)警電路部分。當(dāng)答題時(shí)間和搶答時(shí)間小于5秒后,則會(huì)啟動(dòng)報(bào)警電

60、路。如圖3.9所示,為報(bào)警電路。</p><p><b>  圖3.9 報(bào)警電路</b></p><p>  如上圖所示為報(bào)警電路,當(dāng)P2.2口為低電平時(shí),LED燈通路,則LED燈亮。單片機(jī)的P2.3口負(fù)責(zé)發(fā)聲電路,當(dāng)P2.3為低電平時(shí)候,三極管導(dǎo)通,揚(yáng)聲器工作,從而完成發(fā)聲電路。</p><p>  當(dāng)搶答時(shí)間和答題時(shí)間剩余5秒時(shí),為了及時(shí)提

61、示選手,設(shè)置LED燈和揚(yáng)聲器隔1秒工作一次,從而達(dá)到警示選手的作用。</p><p>  報(bào)警電路中,揚(yáng)聲器部分采用PNP三極管驅(qū)動(dòng),當(dāng)基極為低電平時(shí),三極管導(dǎo)通,從而驅(qū)動(dòng)揚(yáng)聲器電路工作。</p><p>  3.6 電源電路設(shè)計(jì)</p><p>  在整個(gè)搶答系統(tǒng)中,一定會(huì)用到電源,而一般直流電源均為1.5V的倍數(shù),單片機(jī)所需電源為5V。所以電路中需要穩(wěn)壓電源來(lái)滿

62、足單片機(jī)電路的電壓限制。在本次設(shè)計(jì)中,采用7805達(dá)到穩(wěn)壓的效果。7805所需外圍電路簡(jiǎn)單,內(nèi)部具有保護(hù)電路,用起來(lái)方便,并且價(jià)格便宜。在電子設(shè)計(jì)中得到了廣泛的運(yùn)用。</p><p>  如下圖3.10所示為7805的外圍電路:</p><p>  圖3.10 穩(wěn)壓器7805外圍電路</p><p>  將12V直流電源接入左邊,右邊輸出是5V電壓。將單片機(jī)電源以及

63、74HC573電源接入5V電源,即可使本系統(tǒng)工作。</p><p><b>  3.7 下載器電路</b></p><p>  當(dāng)完成上述工作后,一個(gè)完整的系統(tǒng)基本完成,此時(shí)需要一個(gè)下載器電路將軟件程序下載達(dá)到STC89C52單片機(jī)中才能實(shí)現(xiàn)搶答器功能。</p><p>  下載器需要和單片機(jī)的P1.5、P1.6、P1.7、RST端口連接起來(lái),

64、只有這樣才能將軟件程序下載到STC89C52中。</p><p>  下載電路連接方式如圖3.11所示:</p><p>  圖3.11下載電路連接方式</p><p>  將下載器一端與單片機(jī)按照上圖連接起來(lái),同時(shí)將下載器USB一端插入電腦,通過(guò)燒寫軟件將軟件程序?qū)懭氲絊TC89C52中。燒寫成功后,則可驗(yàn)證本系統(tǒng)的軟件部分與硬件部分是否對(duì)應(yīng),以及測(cè)試本系統(tǒng)的是否

65、能實(shí)設(shè)計(jì)要求中的各個(gè)功能模塊。</p><p>  3.8 總體電路設(shè)計(jì)</p><p>  本章詳細(xì)敘述了搶答器各個(gè)模塊的設(shè)計(jì)原理以及具體電路。在以STC89C52為核心電路的基礎(chǔ)上,結(jié)合顯示電路、鍵盤輸入電路、報(bào)警電路、復(fù)位電路和外部時(shí)鐘電路等外圍電路,就設(shè)計(jì)出了基于單片機(jī)的搶答器系統(tǒng)。</p><p>  下圖3.12是單片機(jī)搶答器系統(tǒng)的總圖。</p&g

66、t;<p>  圖3.12 基于單片機(jī)的搶答器電路總圖</p><p>  3.9 實(shí)物電路制作</p><p>  在Proteus上仿真完畢以后,將所需器件羅列出來(lái),然后在實(shí)驗(yàn)室用萬(wàn)能板將每個(gè)器件連接起來(lái)。焊接完畢后,將每個(gè)功能模塊一一測(cè)試出來(lái)。</p><p>  調(diào)試出來(lái)的實(shí)物圖如下圖3.13所示:</p><p>  

67、圖3.13 實(shí)物電路展示</p><p><b>  4 軟件設(shè)計(jì)</b></p><p>  4.1 Keil C51軟件簡(jiǎn)介</p><p>  在硬件設(shè)計(jì)完畢后,就要通過(guò)軟件編程,將設(shè)計(jì)的功能逐一實(shí)現(xiàn)。寫單片機(jī)軟件語(yǔ)言時(shí),我們可以采用匯編語(yǔ)言和C語(yǔ)言來(lái)完成,二者殊途同歸。匯編語(yǔ)言是機(jī)器語(yǔ)言,而C語(yǔ)言是中級(jí)語(yǔ)言。匯編語(yǔ)言的特點(diǎn)是執(zhí)行效率高,

68、對(duì)單片機(jī)中的寄存器直接操作,但是開發(fā)周期長(zhǎng),移植性不強(qiáng)。C語(yǔ)言具有使用范圍廣,可移植性強(qiáng),開發(fā)周期短,但是執(zhí)行效率較匯編語(yǔ)言低。</p><p>  在本系統(tǒng)的軟件開發(fā)中,我們采用C語(yǔ)言在Keil軟件上來(lái)完成軟件編程。</p><p>  4.2 主程序系統(tǒng)結(jié)構(gòu)</p><p>  軟件設(shè)計(jì)分為以下五個(gè)部分:主程序設(shè)計(jì),開始鍵掃描子程序,搶答鍵盤掃描子程序,顯示程序

69、,定時(shí)器中斷。</p><p>  圖4.1 主程序系統(tǒng)框圖</p><p>  上圖為主程序系統(tǒng)框圖,程序代碼部分均參照上述邏輯設(shè)計(jì)。</p><p><b>  4.3 程序流程圖</b></p><p>  任何一個(gè)C語(yǔ)言程序,都先從主程序開始執(zhí)行,從主程序執(zhí)行開始鍵掃描程序,若開始鍵按下,則觸發(fā)定時(shí)器中斷1,并掃

70、描鍵盤,若有搶答選手按下按鍵,則顯示剩余答題時(shí)間,并顯示鎖存搶答選手號(hào)碼,并且伴隨提示音。此外,當(dāng)有選手按下后,就要封鎖電路,禁止其他選手搶答。若無(wú)選手搶答,則倒計(jì)時(shí),當(dāng)剩余五秒時(shí),觸發(fā)報(bào)警程序,即定時(shí)器中斷2。當(dāng)主持人按下開始鍵,活著復(fù)位鍵時(shí),復(fù)位電路。重新開始電路。</p><p>  下圖4.2為程序流程圖:</p><p><b>  圖4.2程序流程圖</b>

71、;</p><p><b>  4.4 程序設(shè)計(jì)</b></p><p>  4.4.1主程序設(shè)計(jì)</p><p>  主程序是軟件設(shè)計(jì)的靈魂部分,是關(guān)系到程序能否順利執(zhí)行的關(guān)鍵部分,主程序如下所示。</p><p>  以下是定時(shí)參數(shù)的初始化:</p><p>  void init()<

72、/p><p><b>  {</b></p><p>  TMOD=0x01;</p><p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p>  TH1=(65536-50000)/256;</p>

73、<p>  TL1=(65536-50000)%256;</p><p><b>  EA=1;</b></p><p><b>  ET0=1;</b></p><p><b>  ET1=1;</b></p><p><b>  }</b>&

74、lt;/p><p>  這部分選擇定時(shí)器工作方式的選擇;通過(guò)對(duì)方式寄存器TMOD的設(shè)置,定時(shí)器/計(jì)數(shù)器T0,T1可選擇4種不同的工作方式。定時(shí)器中斷是當(dāng)數(shù)據(jù)溢出時(shí)觸發(fā)中斷,并且計(jì)數(shù)器是加1計(jì)數(shù)的,所以需要預(yù)先置入初始值,當(dāng)數(shù)據(jù)溢出時(shí)觸發(fā)中斷。</p><p>  主程序首先將執(zhí)行判斷開始鍵是否按下,以下是開始鍵的掃描程序:</p><p>  void start_sc

75、an()</p><p><b>  {</b></p><p><b>  if(K0==0)</b></p><p><b>  {</b></p><p>  delay(10);</p><p><b>  if(K0==0)</

76、b></p><p><b>  {</b></p><p>  while(!K0);</p><p><b>  TR0=1;</b></p><p>  time=qdtime;</p><p><b>  flag=1;</b></p

77、><p><b>  s_flag=1;</b></p><p><b>  b_flag=1;</b></p><p><b>  beep=1;</b></p><p><b>  gled=1;</b></p><p><b

78、>  key=0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  判斷是否開始鍵是否按下,對(duì)按鍵進(jìn)行去抖操作后,若開始鍵按下,則打開倒計(jì)時(shí),將各個(gè)標(biāo)志位初

79、始化,flag為開始標(biāo)志位。當(dāng)開始按下時(shí),即會(huì)顯示倒計(jì)時(shí)。</p><p>  當(dāng)判斷完開始按鍵的操作后,如果開始按鍵按下,則會(huì)出現(xiàn)兩種情況:開始鍵按下,無(wú)人搶答;開始鍵按下,有人搶答。</p><p>  當(dāng)開始鍵按下,有人搶答時(shí):</p><p>  if((flag==1)&(s_flag==0)) //當(dāng)開始鍵按下并有人搶答,進(jìn)行答題倒計(jì)時(shí)&l

80、t;/p><p><b>  {</b></p><p>  if(K_time==0) //開始答題按鍵掃描</p><p>  {delay(10); //去抖操作</p><p>  if(K_time==0)</p><p>  {while(!K_time

81、);</p><p>  time=dttime;</p><p><b>  TR0=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p

82、><p>  當(dāng)開始鍵按下時(shí),s_flag是矩陣鍵盤的標(biāo)志位,s_flag=0表示矩陣鍵盤有人按下,即有人搶答。當(dāng)開始鍵按下,且矩陣鍵盤中有人按下,程序開始判斷答題按鍵是否按下,當(dāng)答題控制鍵按下,則啟動(dòng)答題倒計(jì)時(shí)。 </p><p>  當(dāng)開始鍵按下,無(wú)人搶答時(shí):</p><p>  if((flag==1)&(s_flag==1)) //開始鍵按下且答題鍵沒

83、有人按下,進(jìn)行鍵盤掃描</p><p><b>  {</b></p><p>  keyscan(); //鍵盤掃描子函數(shù)調(diào)用</p><p><b>  }</b></p><p>  當(dāng)開始鍵按下,s_flag=1表示沒人搶答,則進(jìn)行矩陣鍵盤掃描。矩陣鍵盤掃描過(guò)程中,如果鍵

84、盤沒有人按下,則s_flag=1,所以一直掃描鍵盤,當(dāng)?shù)褂?jì)時(shí)剩余5秒,就會(huì)報(bào)警。若倒計(jì)時(shí)為0秒時(shí)還沒人搶答,則主持人按下開始按鈕即可。若鍵盤有人按下則s_flag=0,進(jìn)入有人搶答的程序中。[9]</p><p>  4.4.2延時(shí)子程序</p><p>  在單片機(jī)軟件操作過(guò)程中會(huì)用到許多的延時(shí)程序,譬如,當(dāng)要去除鍵盤抖動(dòng)時(shí),就需要延時(shí)程序來(lái)達(dá)到。在數(shù)碼管的動(dòng)態(tài)顯示上,也需要通過(guò)延時(shí)程序

85、來(lái)達(dá)到目的。</p><p>  void delay(uint z)</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>

86、;0;y--);</p><p><b>  }</b></p><p>  以上就是延時(shí)函數(shù),參數(shù)z為形式參數(shù),當(dāng)需要調(diào)用延時(shí)函數(shù)時(shí),只需在函數(shù)里賦值,即可達(dá)到所需的延長(zhǎng)時(shí)間,如delay(50000)就為半秒鐘延時(shí)。</p><p>  4.4.3鍵盤掃描程序</p><p>  搶答器中每位選手配備一個(gè)搶答器,當(dāng)選

87、手按下時(shí),需要一個(gè)鍵盤掃描程序來(lái)掃描。并將掃描結(jié)果返回。在矩陣鍵盤掃描的過(guò)程中,需要先將端口賦值,然后通過(guò)電平的變化來(lái)掃描出鍵盤的按鍵按下。</p><p>  void keyscan()</p><p><b>  {</b></p><p>  P3=0xfe; //將P3口賦值<

88、;/p><p><b>  temp=P3;</b></p><p>  temp=temp&0xf0; //判斷電平是否有變化;</p><p>  if(temp!=0xf0) //電平有變化,說(shuō)明有按鍵按下</p><p><

89、b>  {</b></p><p>  delay(15); //鍵盤去抖操作</p><p><b>  temp=P3;</b></p><p>  temp=temp&0xf0;</p><p>  if(temp!=0xf0)</p>&

90、lt;p>  當(dāng)掃描矩陣鍵盤的第一行鍵盤時(shí),將第一行線置為低電平,若第一行中有鍵盤按下,則對(duì)應(yīng)的列線就會(huì)變?yōu)榈碗娖?。通過(guò)temp=temp&0xf0就可以對(duì)比出那個(gè)按鍵按下。</p><p><b>  {</b></p><p><b>  temp=P3;</b></p><p>  switch(tem

91、p)</p><p><b>  {</b></p><p>  case 0x7e:key=1;TR0=0;TR1=1;s_flag=0;</p><p>  break; //當(dāng)?shù)谝粋€(gè)鍵按下時(shí),觸發(fā)事件操作</p><p>  case 0xbe:key=2;TR0=0;TR1=1;s_flag=0;<

92、/p><p>  break; //當(dāng)?shù)诙€(gè)鍵按下時(shí),觸發(fā)事件操作</p><p>  case 0xde:key=3;TR0=0;TR1=1;s_flag=0;</p><p>  break; //當(dāng)?shù)谌齻€(gè)鍵按下時(shí),觸發(fā)事件操作</p><p>  case 0xee:key=4;TR0=0;TR1=1;s_flag=0;&l

93、t;/p><p>  break; //當(dāng)?shù)谒膫€(gè)鍵按下時(shí),觸發(fā)事件操作</p><p>  default:key=0; //當(dāng)有兩人同時(shí)按下時(shí),鍵盤顯示</p><p><b>  }</b></p><p>  while(temp!=0xf0) //釋放</p><p>  {

94、temp=P3;</p><p>  temp=temp&0xf0;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b&

95、gt;</p><p>  以上是第一行鍵盤的掃描過(guò)程,當(dāng)?shù)诙墟I盤掃描時(shí)將處置設(shè)為P3=0xfd;當(dāng)?shù)谌袙呙钑r(shí)將設(shè)置為P3=0xfb;當(dāng)?shù)谒男墟I盤掃描時(shí)將</p><p>  處置設(shè)為P3=0xf7。每行鍵盤掃描都是以此類推,當(dāng)鍵盤掃描完畢后,將釋放鍵盤,這樣將會(huì)及時(shí)清理掉緩存。</p><p>  4.4.4顯示程序設(shè)計(jì)</p><p>

96、;  顯示程序是程序中唯一的輸出部分,顯示程序部分包括數(shù)據(jù)編碼,和位選控制。</p><p>  當(dāng)無(wú)選手按下時(shí),需要顯示搶答倒計(jì)時(shí);有選手按下時(shí),需要顯示選手號(hào)碼。</p><p>  如下為顯示子程序代碼部分:</p><p>  if(flag==1)</p><p><b>  { </b></p&

97、gt;<p>  if(key!=0) //判斷是否有選手搶答</p><p><b>  {</b></p><p>  shi=key/10; </p><p>  ge=key%10;</p><p>  WL=1; //位選打開</p&g

98、t;<p>  P1=0xfb;//第三位顯示</p><p>  WL=0; //位選關(guān)閉</p><p>  DL=1; //段選打開</p><p>  P0=table[shi];</p><p><b>  delay(5);</b></p&

99、gt;<p><b>  WL=1;</b></p><p>  P1=0xf7;//第四位顯示</p><p><b>  WL=0;</b></p><p><b>  DL=1;</b></p><p>  P0=table[ge];</p>

100、;<p>  delay(5);</p><p><b>  }</b></p><p>  當(dāng)flag==1,即開始鍵按下,時(shí)開始判斷key的值,若key不為0,則有選手搶答,顯示選手搶答號(hào)碼,并顯示剩余倒計(jì)時(shí)。</p><p><b>  WL=1;</b></p><p>  

101、P1=0xfe;//第一位顯示</p><p><b>  WL=0;</b></p><p><b>  DL=1;</b></p><p>  P0=table[time/10];</p><p><b>  delay(5);</b></p>&l

102、t;p><b>  WL=1;</b></p><p>  P1=0xfd;//第二位顯示</p><p><b>  WL=0;</b></p><p><b>  DL=1;</b></p><p>  P0=table[time%10];</p>

103、<p><b>  delay(5);</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  無(wú)論是否有選手搶答,都需要進(jìn)行倒計(jì)時(shí),所以,倒計(jì)時(shí)操作一直在進(jìn)行。倒計(jì)時(shí)操作是在數(shù)碼的前兩位,當(dāng)有選手按下時(shí),鎖存選手號(hào)碼,并保存剩余答題時(shí)間

104、,當(dāng)控制答題按鈕按下時(shí),將顯示20秒剩余答題時(shí)間。顯示過(guò)程中,首先要打開位選,選通那一位顯示,其次才能打開段選,進(jìn)行段選碼控制。動(dòng)態(tài)顯示,需要借用余暉和人眼暫留的效果,所以每顯示一位需要短暫的延時(shí)。</p><p>  共陰數(shù)碼管的編碼表如下表4.1所示:</p><p><b>  表4.1共陰編碼表</b></p><p>  4.4.5中

105、斷函數(shù)設(shè)計(jì)</p><p>  搶答器中會(huì)用到倒計(jì)時(shí)顯示,所以會(huì)用到單片機(jī)內(nèi)部的定時(shí)器中斷,當(dāng)用到定時(shí)器中斷的時(shí)候就需要寫中斷服務(wù)函數(shù)。以下是中斷服務(wù)函數(shù):</p><p>  定時(shí)器T0的中斷服務(wù)函數(shù):</p><p>  void timer0() interrupt 1</p><p>  {TH0=(65536-50000)/256

106、; //對(duì)定時(shí)器重新賦值</p><p>  TL0=(65536-50000)%256;</p><p>  if(b_flag) //蜂鳴器標(biāo)志位</p><p><b>  {</b></p><p><b>  beep=0;</b>&l

107、t;/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  beep=1;</b></p><p><b>  }</b></p><p>  下面部分為報(bào)警程序設(shè)計(jì),當(dāng)?shù)褂?jì)時(shí)剩下

108、5秒時(shí),蜂鳴器和小燈交替工作,即小燈亮一下,蜂鳴器響一下,提示選手。</p><p>  if(time<5)</p><p>  {if(time%2==0)</p><p><b>  {</b></p><p><b>  b_flag=1;</b></p><p&

109、gt;<b>  gled=0;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>  {b_flag=0;</p><p><b>  gled=1;</b></p><p

110、><b>  }</b></p><p><b>  }</b></p><p>  下面程序?yàn)榈褂?jì)時(shí)程序部分。當(dāng)每次進(jìn)入中斷函數(shù),num會(huì)自動(dòng)加1,當(dāng)num=20時(shí)表示,計(jì)數(shù)器計(jì)數(shù)滿,到達(dá)1秒,則完成時(shí)間減少1秒,關(guān)閉蜂鳴器。</p><p><b>  num++;</b></p>

111、;<p>  if(num==20)</p><p><b>  {num=0;</b></p><p><b>  time--;</b></p><p><b>  b_flag=0;</b></p><p><b>  }</b>&l

112、t;/p><p>  當(dāng)剩余時(shí)間為0秒時(shí),關(guān)閉定時(shí)器,關(guān)閉各個(gè)標(biāo)志位。搶答無(wú)效。</p><p>  if(time==0)</p><p><b>  {</b></p><p><b>  TR0=0;</b></p><p><b>  time=0;</

113、b></p><p><b>  s_flag=1;</b></p><p><b>  gled=1;</b></p><p><b>  }</b></p><p>  當(dāng)啟動(dòng)定時(shí)器T1時(shí),蜂鳴器開始工作,當(dāng)工作1秒后,關(guān)閉定時(shí)器,同時(shí)關(guān)閉蜂鳴器,定時(shí)器T1的中斷服務(wù)

114、函數(shù):</p><p>  void timer1() interrupt 3</p><p><b>  {</b></p><p>  TH1=(65536-50000)/256;</p><p>  TL1=(65536-50000)%256;</p><p><b>  beep

115、=0;</b></p><p><b>  num++;</b></p><p>  if(num==160)</p><p><b>  {</b></p><p><b>  num=0;</b></p><p><b>  T

116、R1=0;</b></p><p><b>  beep=1;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  這是單片機(jī)內(nèi)置定時(shí)器T1的工作函數(shù),觸發(fā)蜂鳴器發(fā)聲,即是當(dāng)按鍵按下時(shí),蜂鳴器發(fā)聲提示,此部分為

117、蜂鳴器發(fā)聲電路。</p><p><b>  結(jié) 論</b></p><p>  在本次基于單片機(jī)的搶答器設(shè)計(jì)過(guò)程中,查閱了所用的電子元件的資料,利用單片機(jī)STC89C52的功能,設(shè)計(jì)出所需的外圍電路來(lái)完成搶答器功能。利用單片機(jī)的定時(shí)/計(jì)數(shù)器的計(jì)數(shù)功能等功能,將軟硬件有機(jī)結(jié)合起來(lái)設(shè)計(jì)單片機(jī)。并且對(duì)鍵盤設(shè)置原理、數(shù)碼管顯示原理都有了進(jìn)一步的了解和掌握。</p

118、><p>  本設(shè)計(jì)的主要內(nèi)容包括以下幾個(gè)部分:</p><p>  第一部分主要介紹了設(shè)計(jì)背景、設(shè)計(jì)意義、畢業(yè)設(shè)計(jì)要求以及創(chuàng)新方案。</p><p>  第二部分介紹了設(shè)計(jì)的大致功能和預(yù)期結(jié)果,以及STC89C52單片機(jī)的工作原理。</p><p>  第三部分主要介紹基于STC89C52單片機(jī)設(shè)計(jì)出的各個(gè)功能模塊,外部時(shí)鐘電路設(shè)計(jì),復(fù)位電路,

119、矩陣鍵盤輸入和數(shù)碼管顯示模塊。同時(shí)介紹了各個(gè)模塊的軟件編程。</p><p>  本次設(shè)計(jì)雖然已經(jīng)完成了搶答器所具備的基本功能,但是還有好多功能沒有實(shí)現(xiàn)。我們還可以在本設(shè)計(jì)的基礎(chǔ)上添加以下功能:</p><p>  增加計(jì)分版,為每組或每個(gè)參賽選手增加一個(gè)數(shù)碼管,讓其顯示該答題選手的分?jǐn)?shù)。</p><p>  將每位選手的搶答鍵設(shè)置成無(wú)線鍵盤控制,這樣就能美觀實(shí)用,

120、在搶答比賽中更方便使用。</p><p>  添加調(diào)時(shí)按鈕,自己設(shè)置搶答時(shí)間以及答題時(shí)間的控制。</p><p>  將上述功能逐一實(shí)現(xiàn)后,能完善使得搶答器電路更加簡(jiǎn)潔、實(shí)用,能給搶答器的使用者帶來(lái)極大的方便。</p><p><b>  參 考 文 獻(xiàn)</b></p><p>  [1] 龔昌來(lái). 單片機(jī)控制的智能型搶

121、答器設(shè)計(jì)[J]. 廣東自動(dòng)化與信息工程,2003,3:28-30.</p><p>  [2] 傅貴興. 兩款不用芯片搶答器的制作[J]. 電子制作 ,2011,09:110-115.</p><p>  [3] 李念強(qiáng),張魯?shù)?單片機(jī)原理及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2007.3:1-200</p><p>  [4] 汪文,陳林. 單片機(jī)原理及應(yīng)用[M].

122、武漢:華中科技大學(xué)出版社, 2007.100-150</p><p>  [5] 臧殿紅. 基于AT89S51的八路搶答器的設(shè)計(jì)[J]. 科技信息,2011,(25):518-530. [6] 朱斌. 利用單片機(jī)制作簡(jiǎn)易的8路搶答器及仿真[J]. 科技信息, 2011,01:101-102.</p><p>  [7] 張靖武,周靈彬. 單片機(jī)系統(tǒng)的Proteus 設(shè)計(jì)與仿真[M].北京

溫馨提示

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