2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  摘 要</b></p><p>  本次課程設(shè)計(jì)是采用7端數(shù)碼管顯示結(jié)果,以AT89C51單片機(jī)為核心,由八個(gè)搶答按鈕,兩個(gè)鎖存器,開始按鈕,復(fù)位按鈕組成。八位智能定時(shí)搶答器可靠性高,反應(yīng)速度靈敏,搶答器具有PC接口,可以對(duì)系統(tǒng)進(jìn)行初始化、工作方式、顯示時(shí)間的集中設(shè)置,使用人機(jī)界面操作,使操作簡(jiǎn)單易行。</p><p>  單片機(jī)應(yīng)用的重

2、要意義在于從根本上改變了傳統(tǒng)的控制系統(tǒng)設(shè)計(jì)思想和設(shè)計(jì)方法,以前必須由模擬電路或數(shù)字電路實(shí)現(xiàn)大部分功能,現(xiàn)在已能用單片機(jī)通過軟件方法來實(shí)現(xiàn)了。</p><p><b>  目 錄</b></p><p>  一、課程設(shè)計(jì)目的:3</p><p>  二、課程設(shè)計(jì)內(nèi)容:3</p><p><b>  三、硬件設(shè)

3、計(jì):3</b></p><p>  3.1、硬件總原理圖(見附錄1)3</p><p>  3.2、主要硬件介紹4</p><p>  3.2.1 AT89C51簡(jiǎn)介4</p><p>  3.2.2 74HC573簡(jiǎn)介10</p><p>  3.2.3 LED數(shù)碼管簡(jiǎn)介11</p>

4、;<p>  四、軟件設(shè)計(jì)、13</p><p>  4.1主程序流程圖13</p><p>  4.2 定時(shí)器T0\T1中斷服務(wù)處理13</p><p>  4.3 搶答處理設(shè)計(jì)14</p><p>  4.4鍵盤掃描程序流程圖15</p><p>  4.5 搶答數(shù)碼顯示軟件程序設(shè)計(jì)17&

5、lt;/p><p>  4.6軟件程序(見附錄2)18</p><p>  五、設(shè)計(jì)總結(jié):18</p><p><b>  參考文獻(xiàn):19</b></p><p><b>  附錄120</b></p><p><b>  附錄221</b><

6、;/p><p>  單片機(jī)原理及接口技術(shù)課程設(shè)計(jì)</p><p>  (8位智能定時(shí)搶答器)</p><p><b>  一、課程設(shè)計(jì)目的:</b></p><p>  熟悉單片機(jī)仿真軟件Proteus,單片機(jī)開發(fā)環(huán)境Keil的應(yīng)用;</p><p>  增進(jìn)對(duì)單片機(jī)的感性認(rèn)識(shí),加深對(duì)單片機(jī)理論方面的

7、理解;</p><p>  使學(xué)生了解和掌握單片機(jī)應(yīng)用系統(tǒng)的軟硬件設(shè)計(jì)過程、方法及實(shí)現(xiàn),為以后設(shè)計(jì)和實(shí)現(xiàn)單片機(jī)應(yīng)用系統(tǒng)打下良好基礎(chǔ)。</p><p><b>  二、課程設(shè)計(jì)內(nèi)容:</b></p><p>  此倒計(jì)時(shí)搶答器可容納8組參賽的數(shù)字式搶答器,它們的編號(hào)分別是1、2、3、4、5、6、7、8,首先按下電源開關(guān),指示燈亮,再按下啟動(dòng)按鈕S

8、B1,搶答器可以進(jìn)行20秒倒計(jì)時(shí),選手必須在20秒之內(nèi)進(jìn)行搶答,八個(gè)選手,誰先按下自己手中的按鈕,LED顯示器SM就會(huì)顯示相對(duì)應(yīng)的選手號(hào)碼,如果20秒還沒有人搶答,那么搶答器自鎖,本次搶答無效,按下復(fù)位按鈕S10后可繼續(xù)搶答。</p><p>  聲控功能:在麥克風(fēng)接口MIC處插入麥克風(fēng),主持人喊一聲“開始”,搶答器開始進(jìn)入20秒倒計(jì)時(shí)搶答階段。聲控切換按鈕SB2和啟動(dòng)搶答開始按鈕S9具有互鎖功能,當(dāng)聲控切換按鈕

9、SB2開啟之后,開始按鈕S9處于無效狀態(tài),防止主持人在沒說“開始”之前就誤按了啟動(dòng)搶答按鈕,八個(gè)選手,誰先按下自己手中的按鈕,LED顯示器SM就會(huì)顯示相對(duì)應(yīng)的選手號(hào)碼。</p><p><b>  三、硬件設(shè)計(jì):</b></p><p>  3.1、硬件總原理圖(見附錄1)</p><p>  3.2、主要硬件介紹</p><

10、;p>  3.2.1 AT89C51簡(jiǎn)介</p><p>  3.2.1.1 AT89C51描述</p><p>  單片機(jī)全稱為單片微型計(jì)算機(jī)(Single Chip Microcomputer)。因?yàn)閱纹瑱C(jī)主要用于控制系統(tǒng)中,所以又稱微控制器(Microcontroller Unit,MCU)或嵌入式控制器(Embedded Controller)。它具有嵌入式應(yīng)用系統(tǒng)所要求的體

11、系結(jié)構(gòu),微處理器,指令系統(tǒng),總線方式,管理模式等。他把計(jì)算機(jī)的基本部件都微型化集成到一塊芯片上了,通常片內(nèi)部都含有中央處理部件(CPU),數(shù)據(jù)存儲(chǔ)器(RAM),程序存儲(chǔ)器(ROM,EPROM,F(xiàn)lsh ROM),定時(shí)器/計(jì)數(shù)器和各種輸入/輸出(I/O)接口他們之間的相互連接結(jié)構(gòu)如圖2-1所示。AT89C51是一個(gè)低電壓,高性能CMOS。8位單片機(jī)帶有4K字節(jié)的可反復(fù)擦寫的程序存儲(chǔ)器(PENROM)和128字節(jié)的存取數(shù)據(jù)存儲(chǔ)器(RAM),

12、這種器件采用ATMEL公司的高密度、不容易丟失存儲(chǔ)技術(shù)生產(chǎn),并且能夠與MCS-51系列的單片機(jī)兼容。片內(nèi)含有8位中央處理器和閃爍存儲(chǔ)單元,有較強(qiáng)的功能的AT89C51單片機(jī)能夠被應(yīng)用到控制領(lǐng)域中。 </p><p>  圖2-1 單片機(jī)結(jié)構(gòu)</p><p>  3.2.1.2 AT89C51單片機(jī)內(nèi)部結(jié)構(gòu)</p><p>  AT89C51是MCS-51系列單片機(jī)的

13、典型產(chǎn)品,我們以這一代表性的機(jī)型進(jìn)行系統(tǒng)的講解。 AT89C51單片機(jī)包含中央處理器、程序存儲(chǔ)器(ROM)、數(shù)據(jù)存儲(chǔ)器(RAM)、定時(shí)/計(jì)數(shù)器、并行接口、串行接口和中斷系統(tǒng)等幾大單元及數(shù)據(jù)總線、地址總線和控制總線等三大總線,現(xiàn)在我們分別加以說明:</p><p><b>  ·中央處理器</b></p><p>  中央處理器(CPU)是整個(gè)單片機(jī)的核心部件

14、,是8位數(shù)據(jù)寬度的處理器,能處理8位二進(jìn)制數(shù)據(jù)或代碼,CPU負(fù)責(zé)控制、指揮和調(diào)度整個(gè)單元系統(tǒng)協(xié)調(diào)的工作,完成運(yùn)算和控制輸入輸出功能等操作。</p><p>  ·數(shù)據(jù)存儲(chǔ)器(RAM)</p><p>  AT89C51內(nèi)部有128個(gè)8位用戶數(shù)據(jù)存儲(chǔ)單元和128個(gè)專用寄存器單元,它們是統(tǒng)一編址的,專用寄存器只能用于存放控制指令數(shù)據(jù),用戶只能訪問,而不能用于存放用戶數(shù)據(jù),所以,用戶能

15、使用的RAM只有128個(gè),可存放讀寫的數(shù)據(jù),運(yùn)算的中間結(jié)果或用戶定義的字型表。</p><p>  ·程序存儲(chǔ)器(ROM)</p><p>  AT89C51共有4096個(gè)8位掩膜ROM,用于存放用戶程序,原始數(shù)據(jù)或表格。</p><p>  ·定時(shí)/計(jì)數(shù)器(ROM)</p><p>  AT89C51有兩個(gè)16位的可編

16、程定時(shí)/計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)或計(jì)數(shù)產(chǎn)生中斷用于控制程序轉(zhuǎn)向。</p><p>  ·并行輸入輸出(I/O)口</p><p>  AT89C51共有4組8位I/O口(P0、 P1、P2或P3),用于對(duì)外部數(shù)據(jù)的傳輸。</p><p><b>  ·全雙工串行口</b></p><p>  AT89C51

17、內(nèi)置一個(gè)全雙工串行通信口,用于與其它設(shè)備間的串行數(shù)據(jù)傳送,該串行口既可以用作異步通信收發(fā)器,也可以當(dāng)同步移位器使用。</p><p><b>  ·中斷系統(tǒng)</b></p><p>  AT89C51具備較完善的中斷功能,有兩個(gè)外中斷、兩個(gè)定時(shí)/計(jì)數(shù)器中斷和一個(gè)串行中斷,可滿足不同的控制要求,并具有2級(jí)的優(yōu)先級(jí)別選擇。</p><p>

18、;<b>  ·時(shí)鐘電路</b></p><p>  AT89C51內(nèi)置最高頻率達(dá)12MHz的時(shí)鐘電路,用于產(chǎn)生整個(gè)單片機(jī)運(yùn)行的脈沖時(shí)序,但8051單片機(jī)需外置振蕩電容。</p><p>  單片機(jī)的結(jié)構(gòu)有兩種類型,一種是程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分開的形式,即哈佛(Harvard)結(jié)構(gòu),另一種是采用通用計(jì)算機(jī)廣泛使用的程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器合二為一的結(jié)構(gòu),即普

19、林斯頓(Princeton)結(jié)構(gòu)。INTEL的MCS-51系列單片機(jī)采用的是哈佛結(jié)構(gòu)的形式,而后續(xù)產(chǎn)品16位的MCS-96系列單片機(jī)則采用普林斯頓結(jié)構(gòu)。</p><p>  3.2.1.3 AT89C51引腳功能特性</p><p>  圖2-2 89C51單片機(jī)引腳圖</p><p>  AT89C51提供以下的功能標(biāo)準(zhǔn):4K字節(jié)閃爍存儲(chǔ)器,128字節(jié)隨機(jī)存取數(shù)據(jù)

20、存儲(chǔ)器,32個(gè)I/O口,2個(gè)16位定時(shí)/計(jì)數(shù)器,1個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),1個(gè)串行通信口,片內(nèi)震蕩器和時(shí)鐘電路。另外, AT89C51還可以進(jìn)行0HZ的 </p><p>  靜態(tài)邏輯操作,并支持兩種軟件的節(jié)電模式。 圖2-2 AT89C51引腳示意圖</p><p>  閑散方式停止中央處理器的工作,能夠允許隨機(jī)存取數(shù)據(jù)存儲(chǔ)器、定時(shí)/計(jì)數(shù)器、串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保

21、存隨機(jī)存取數(shù)據(jù)存儲(chǔ)器中的內(nèi)容,但震蕩</p><p>  器停止工作并禁止其它所有部件的工作直到下一個(gè)復(fù)位。</p><p>  1、VCC:電源電壓</p><p><b>  2、GND:接地</b></p><p>  3、P0口: P0口是一組8位漏極開路雙向I/O口,即地址/數(shù)據(jù)總線復(fù)用口。作為輸出口時(shí),每一個(gè)

22、管腳都能夠驅(qū)動(dòng)8個(gè)TTL電路。當(dāng)“1”被寫入P0口時(shí),每個(gè)管腳都能夠作為高阻抗輸入端。P0口還能夠在訪問外部數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器時(shí),轉(zhuǎn)換地址和數(shù)據(jù)總線復(fù)用,并在這時(shí)激活內(nèi)部的上拉電阻。P0口在閃爍編程時(shí),P0口接收指令,在程序校驗(yàn)時(shí),輸出指令,需要接電阻。</p><p>  4、P1口:P1口一個(gè)帶內(nèi)部上拉電阻的8位雙向I/O口,P1的輸出緩沖級(jí)</p><p>  圖2-3 MCS

23、-51系列單片機(jī)的內(nèi)部結(jié)構(gòu)示意圖</p><p>  可驅(qū)動(dòng)4 個(gè)TTL電路。對(duì)端口寫“1”,通過內(nèi)部的電阻把端口拉到高電平,此時(shí)可作為輸入口。因?yàn)閮?nèi)部有電阻,某個(gè)引腳被外部信號(hào)拉低時(shí)輸出一個(gè)電流。閃爍編程時(shí)和程序校驗(yàn)時(shí),P1口接收低8位地址。</p><p>  5、P2口:P3口是一組帶有內(nèi)部電阻的8位雙向I/O口,P3口輸出緩沖故可驅(qū)動(dòng)4個(gè)TTL電路。對(duì)P3口寫如“1”時(shí),它們被內(nèi)部

24、電阻拉到高電平并可作為輸入端時(shí),被外部拉低的P3口將用電阻輸出電流。P3口除了作為一般的I/O口外,更重要的用途是它的第二功能(表1所示)。除此之外P3口還接收一些用于閃爍存儲(chǔ)器編程和程序校驗(yàn)的控制信號(hào)。 </p><p>  6、RST:復(fù)位輸入。當(dāng)震蕩器工作時(shí),RET引腳出現(xiàn)兩個(gè)機(jī)器周期以上的高電平將使單片機(jī)復(fù)位。</p><p>  7、ALE/:當(dāng)訪問外部程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),

25、ALE輸出脈沖用于鎖存地址的低8位字節(jié)。即使不訪問外部存儲(chǔ)器,ALE以時(shí)鐘震蕩頻率的1/16輸出固定的正脈沖信號(hào) ,因此它可對(duì)輸出時(shí)鐘或用于定時(shí)目的。要注意的是:每當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí)將跳過一個(gè)ALE脈沖時(shí),閃爍存儲(chǔ)器編程時(shí),這個(gè)引腳還用于輸入編程脈沖。如果必要,可對(duì)特殊寄存器區(qū)中的8EH單元的D0位置禁止ALE操作。這個(gè)位置后只有一條MOVX和MOVC指令A(yù)LE才會(huì)被應(yīng)用。此外,這個(gè)引腳會(huì)微弱拉高,單片機(jī)執(zhí)行外部程序時(shí),應(yīng)設(shè)置ALE

26、無效。</p><p>  表1 P3口的第二功能</p><p>  8、:程序儲(chǔ)存允許輸出是外部程序存儲(chǔ)器的讀選通信號(hào),當(dāng)AT89C51由外部程序存儲(chǔ)器讀取指令時(shí),每個(gè)機(jī)器周期兩次PSEN 有效,即輸出兩個(gè)脈沖。在此期間,當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),這兩次有效的PSEN 信號(hào)不出現(xiàn)。</p><p>  9、EA/VPP:外部訪問允許。欲使中央處理器僅訪問外部程序存

27、儲(chǔ)器,EA端必須保持低電平。需要注意的是:如果加密位LBI被編程,復(fù)位時(shí)內(nèi)部會(huì)鎖存EA端狀態(tài)。如EA端為高電平,CPU則執(zhí)行內(nèi)部程序存儲(chǔ)器中的指令。閃爍存儲(chǔ)器編程時(shí),該引腳加上+12V的編程允許電壓VPP,當(dāng)然這必須是該器件是使用12V編程電壓VPP。</p><p>  10、XTAL1:震蕩器反相放大器及內(nèi)部時(shí)鐘發(fā)生器的輸入端。</p><p>  11、XTAL2:震蕩器反相放大器的

28、輸出端。</p><p>  3.2.2 74HC573簡(jiǎn)介 </p><p>  74HC573 (八進(jìn)制3 態(tài)非反轉(zhuǎn)透明鎖存器)跟LS/AL573 的管腳一樣。器件的輸入是和標(biāo)準(zhǔn)CMOS 輸出兼容的。加上拉電阻,他們能和LS/ALSTTL輸出兼容。當(dāng)鎖存使能端為高時(shí),這

29、些器件的鎖存對(duì)于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時(shí),符合建立時(shí)間和保持時(shí)間的數(shù)據(jù)會(huì)被鎖存。 </p><p>  圖2-4 SL74HC573</p><p>  SL74HC573使用參數(shù):輸出能直接接到CMOS,NMOS 和TTL 接口上</p&

30、gt;<p>  操作電壓范圍:2.0V~6.0V</p><p>  低輸入電流:1.0uA </p><p>  CMOS 器件的高噪聲抵抗特性</p><p>  SL74HC573功能如表2所示。 </p><p>  表2

31、 SL74HC573功能</p><p>  注:X=無 Z=高阻抗 </p><p>  3.2.3 LED數(shù)碼管簡(jiǎn)介</p><p>  LED數(shù)碼管是目前最常用的數(shù)字顯示器,圖A、B為共陰管和共陽管的電路,圖C為兩種不同出線形式的引出腳功能圖。</p><p>  一個(gè)LED數(shù)碼管可用來顯示一位0~9十進(jìn)制數(shù)和一個(gè)小數(shù)點(diǎn)。小型數(shù)碼

32、管(0.5寸和0.36寸)每段發(fā)光二極管的正向壓降,隨顯示光(通常為紅、綠、黃、橙色)的顏色不同略有差別,通常約為2~2.5V,每個(gè)發(fā)光二極管的點(diǎn)亮電流在5~10mA。LED數(shù)碼管要顯示BCD碼所表示的十進(jìn)制數(shù)字就需要有一個(gè)專門的譯碼器,該譯碼器不但要完成譯碼功能,還要有相當(dāng)?shù)尿?qū)動(dòng)能力。</p><p>  圖A 共陰連接(“1”電平驅(qū)動(dòng)) 圖B 共陽連接(“0”電平驅(qū)動(dòng))</p>

33、<p>  圖2-5 LED數(shù)碼管符號(hào)及引腳功能圖</p><p>  LED顯示器有靜態(tài)和動(dòng)態(tài)兩種工作方式</p><p>  LED顯示器工作在靜態(tài)顯示方式下,共陰極或共陽極連接在一起,然后接地或+5V;每位的段選線(A,B,…,G,H)與一個(gè)8位并行口相連。這樣,只要在每一位的段選線上保持段選碼電平,該位就能保持相應(yīng)的顯示字符。</p><p> 

34、 在多位LED顯示時(shí),為了化簡(jiǎn)電路,降低成本,將所有位的斷選線并聯(lián)在一起,由一個(gè)8位的I/O口控制,即控制段選碼而共陰極或共陽極點(diǎn)分別由相應(yīng)的I/O線控制即控制位選碼,這就是動(dòng)態(tài)顯示。</p><p>  4位LED動(dòng)態(tài)顯示電路只需一個(gè)8位I/O口及一個(gè)4位I/O口,其中8個(gè)I/O控制段選碼,4位I/O控制位選。進(jìn)行4位字符顯示時(shí),采用掃描顯示方式,即在每一瞬間只使某一位顯示相應(yīng)字符,在此瞬間,段選控制I/O口輸

35、出相應(yīng)字符段選碼,位選控制I/O口在該顯示位送入選通電平(共陰極送低電平,共陽極送高電平),以保證該位顯示相應(yīng)字符。如此輪流,使每位顯示該位應(yīng)顯示字符,并保持延遲一段時(shí)間(1~5ms),以造成視覺暫留效果。不斷循環(huán)送出相應(yīng)的段選碼、位選碼,就可以獲得視覺穩(wěn)定的顯示狀態(tài)。</p><p><b>  四、軟件設(shè)計(jì)、</b></p><p><b>  4.1主

36、程序流程圖</b></p><p>  此程序的及時(shí)采用定時(shí)器T0和T1中斷完成,其余狀態(tài)循環(huán)調(diào)用顯示子程序。系統(tǒng)主程序流程圖如圖4-1所示:</p><p><b>  圖4-1</b></p><p>  4.2 定時(shí)器T0\T1中斷服務(wù)處理</p><p>  定時(shí)器T0用于響鈴程序,定時(shí)器T1用于計(jì)時(shí)

37、程序。當(dāng)答題剩余5秒種時(shí)P3.7口不斷取反使喇叭發(fā)出一定頻率的聲音,提示選手當(dāng)有選手第一個(gè)按下?lián)尨鹌靼磁r(shí)數(shù)碼管顯示選手號(hào)碼,開始倒計(jì)時(shí),并鎖定搶答。當(dāng)在此選手之后再有選手按下按扭時(shí)無效,數(shù)碼管不變。</p><p>  定時(shí)中斷程序流程圖如4-2所示: </p><p><b>  圖4-2</b></p><p>  4.3 搶答處理設(shè)計(jì)&

38、lt;/p><p>  通過89S51芯片的控制,從而構(gòu)成了整個(gè)電路。搶答組數(shù)可以在八組以內(nèi)任意使用,流程圖設(shè)計(jì)如下圖1-8所示:</p><p><b>  圖4-3</b></p><p>  4.4鍵盤掃描程序流程圖</p><p>  本系統(tǒng)的鍵盤采用的是4×4矩陣式鍵盤,矩陣式鍵盤由行線和列線組成,按鍵位

39、于行、列線的交叉點(diǎn)上。一個(gè)4×4的行、列結(jié)構(gòu)可以構(gòu)成一個(gè)含有16個(gè)按鍵的鍵盤,顯然,在按鍵數(shù)量較多時(shí),矩陣式鍵盤較之獨(dú)立式按鍵鍵盤要節(jié)省很多I/O口。</p><p>  矩陣式鍵盤中,行、列線分別連接到按鍵開關(guān)的兩端,在進(jìn)行鍵盤掃描時(shí),首先把矩陣鍵盤列線的第一根線置高,然后分別再檢測(cè)矩陣鍵盤行線是否有高電平的信號(hào),如果有信號(hào),那么就證明這根行線與第一根列線相交處的按鍵被按下了,單片機(jī)就讀入這個(gè)鍵值。如

40、果所有的四根行線都沒有信號(hào),那么就把第一根列線置低,把第二根列線置高,再一次檢測(cè)行線有沒有信號(hào),然后依次類推。</p><p>  由于鍵盤掃描的速度很快,而人按鍵總會(huì)持續(xù)一定的時(shí)間,因此只要單片機(jī)處在等待輸入的狀態(tài),這個(gè)鍵盤掃描程序基本上不會(huì)錯(cuò)過任何一個(gè)按鍵信號(hào)。由于一般人按鍵會(huì)有抖動(dòng),抖動(dòng)信號(hào)造成鍵盤掃描時(shí)會(huì)出現(xiàn)一些錯(cuò)誤的信號(hào),要不就是掃描不進(jìn)數(shù)據(jù),要不就是重復(fù)輸入很多次數(shù)據(jù),因此需要有一個(gè)消除抖動(dòng)的程序。讓

41、單片機(jī)不響應(yīng)一些相關(guān)的抖動(dòng)信號(hào),而只響應(yīng)一次確實(shí)存在的按鍵信號(hào)。消抖動(dòng)程序是這樣實(shí)現(xiàn)的,當(dāng)檢測(cè)到一個(gè)脈沖信號(hào)時(shí),并不立即認(rèn)為是一次按鍵,而是延時(shí)一段時(shí)間以后再進(jìn)行檢測(cè),如果三次檢測(cè)都有信號(hào),那么就認(rèn)為有一次按鍵動(dòng)作發(fā)生了。延時(shí)的選擇非常重要,太快了,起不到消除抖動(dòng)的效果,太慢了又讓鍵盤太不靈活,錯(cuò)過較多的按鍵信號(hào)。鍵盤掃描程序的流程圖如圖4-4示。</p><p>  圖4-4鍵盤掃描程序流程</p>

42、<p>  4.5 搶答數(shù)碼顯示軟件程序設(shè)計(jì)</p><p>  采用靜態(tài)顯示,顯示器由9個(gè)共陽極數(shù)碼管組成。輸入只有兩個(gè)信號(hào),它們是串行數(shù)據(jù)線DIN和移位信號(hào)CLK。9個(gè)串/并移位寄存器芯片74LS164首尾相連,了九位共陽極七段數(shù)碼管,共陽極數(shù)碼管的8個(gè)發(fā)光二極管的陽極(二極管正端)連接在一起,通常,公共陽極接高電平(一般接電源),七它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為低電平時(shí),則

43、該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來確定相應(yīng)的限流電阻,這里的限流電阻選100Ω。數(shù)碼顯示程序流程如圖4-5:</p><p>  圖4-5數(shù)碼顯示程序流程</p><p>  4.6軟件程序(見附錄2)</p><p><b>  五、設(shè)計(jì)

44、總結(jié):</b></p><p>  本設(shè)計(jì)定位于本學(xué)科發(fā)展方向?qū)纹瑱C(jī)的編程及數(shù)字電路的應(yīng)用進(jìn)行研究,并且得到了一些有意義的結(jié)論。搶答器的出現(xiàn)已經(jīng)很多年了,并且種類很多。目前搶答器的功能是比較完善的,即智能化,可靠性高,速度快,工作穩(wěn)定。本設(shè)計(jì)采用了部分智能化,在搶答時(shí)間方面還須改進(jìn),而且在準(zhǔn)確性方面也有待于改進(jìn)。一個(gè)學(xué)期的單片機(jī)學(xué)習(xí)主要是課本上理論知識(shí)的學(xué)習(xí),這些理論知識(shí)遠(yuǎn)不滿足對(duì)單片機(jī)的應(yīng)用的要求

45、,這次設(shè)計(jì)給我們提供了一次很好的理論聯(lián)系實(shí)際的機(jī)會(huì),使得我們對(duì)單片機(jī)的功能以及應(yīng)用有了更深的了解。</p><p>  另外,程序設(shè)計(jì)是本次的一個(gè)難點(diǎn),由于對(duì)指令的運(yùn)用不夠熟練使得在編程時(shí)碰壁。特別對(duì)于一些中斷程序,因涉及到一些標(biāo)志位而使得編程難度更高,雖然通過查資料以及同學(xué)老師的指導(dǎo)解決了這些問題,但編程方面的欠缺還是很大的,這為我以后的學(xué)習(xí)敲響了警鐘,在以后我應(yīng)加強(qiáng)這方面的練習(xí)以提高自己。</p>

46、<p>  在此期間,其中的酸甜苦辣都嘗到了,在這過程中幾乎每晚12點(diǎn)后睡覺,遇到問題及時(shí)通過網(wǎng)絡(luò)查找資料,就連晚上睡覺都會(huì)時(shí)常夢(mèng)到做設(shè)計(jì)。很久很久沒有這樣的感覺了,雖然很累,但感覺很充實(shí),很有收獲,尤其是最后看到自己設(shè)計(jì)的成果成功運(yùn)行后那種感覺無法用語言來描敘,感覺所有的付出都得到了回報(bào),是那么的理所當(dāng)然又是那么的出人意料。</p><p><b>  參考文獻(xiàn):</b>&l

47、t;/p><p>  1.李朝青.單片機(jī)原理及接口技術(shù). 北京: 北京航空航天大學(xué)出版社,2009.</p><p>  2.張迎新.單片機(jī)初級(jí)教程. 北京: 北京航空航天大學(xué)出版社,2007.</p><p>  3. 張義和protel99pcb99設(shè)計(jì)與應(yīng)用技巧, 北京:科學(xué)出版社2000版.</p><p><b>  附錄1&

48、lt;/b></p><p><b>  附錄2</b></p><p>  #include <reg52.h></p><p>  /*-----------------------------------------------------------</p><p><b>  宏定義

49、</b></p><p>  ------------------------------------------------------------*/</p><p>  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  /*--

50、---------------------------------------------------------</p><p>  共陽極數(shù)碼管編碼表 0 - f顯示</p><p>  ------------------------------------------------------------*/</p><p>  uchar code tabl

51、e[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X88,0X83,0XC6,0XA1,0X86,0X8E};</p><p>  /*-----------------------------------------------------------</p><p><b>  變量定義</b><

52、/p><p>  ------------------------------------------------------------*/</p><p>  sbit start_stop = P3^6;</p><p>  sbit reset = P3^7;</p><p>  sbit key1 = P1^0;</p>

53、<p>  sbit key2 = P1^1;</p><p>  sbit key3 = P1^2;</p><p>  sbit key4 = P1^3;</p><p>  sbit key5 = P1^4;</p><p>  sbit key6 = P1^5;</p><p>  sbit key7

54、 = P1^6;</p><p>  sbit key8 = P1^7;</p><p>  sbit state = P3^4;</p><p>  sbit kaishi=P3^1;</p><p>  bit start_stop_flag = 0;</p><p>  bit key1_flag = 0;<

55、;/p><p>  bit key2_flag = 0;</p><p>  bit key3_flag = 0;</p><p>  bit key4_flag = 0;</p><p>  bit key5_flag = 0;</p><p>  bit key6_flag = 0;</p><p&

56、gt;  bit key7_flag = 0;</p><p>  bit key8_flag = 0;</p><p>  bit reset_flag = 0;</p><p>  bit action = 0;</p><p>  bit kaishi_flag=0;</p><p>  uchar second

57、 = 20;</p><p>  uchar timer0_count = 0;</p><p>  uchar number = 0;</p><p>  uchar number_display = 0;</p><p>  /*-------------------------------------------------------

58、----</p><p><b>  延時(shí)函數(shù)</b></p><p>  ------------------------------------------------------------*/</p><p>  void delay(uint z)</p><p><b>  {</b>&

59、lt;/p><p><b>  uint x,y;</b></p><p>  for(x=z;x>0;x--)</p><p>  for(y=110;y>0;y--);</p><p><b>  }</b></p><p>  /*---------------

60、--------------------------------------------</p><p><b>  數(shù)碼管顯示驅(qū)動(dòng)函數(shù)</b></p><p>  ------------------------------------------------------------*/</p><p>  void display(ucha

61、r number,uchar second)</p><p><b>  {</b></p><p>  uchar second_first,second_second;</p><p>  second_first = second / 10;</p><p>  second_second = second % 1

62、0;</p><p>  P2 = 0x01;</p><p>  P0 = table[number];</p><p><b>  delay(2);</b></p><p>  P2 = 0x02;</p><p>  P0 = 0xbf;</p><p><b

63、>  delay(2);</b></p><p>  P2 = 0x04;</p><p>  P0 = table[second_first];</p><p><b>  delay(2);</b></p><p>  P2 = 0x08;</p><p>  P0 = ta

64、ble[second_second];</p><p>  delay(2);</p><p><b>  }</b></p><p>  /*-----------------------------------------------------------</p><p><b>  開始鍵掃描函數(shù)&l

65、t;/b></p><p>  ------------------------------------------------------------*/</p><p>  void start_stop_keyscan()</p><p><b>  {</b></p><p>  if(start_stop

66、 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((start_stop == 0)&&(!start_stop_flag))</p><p><b>  {</b></

67、p><p>  start_stop_flag = 1;</p><p>  action = 1;</p><p><b>  TR0 = 1;</b></p><p>  state = 0;</p><p><b>  }</b></p><p>

68、<b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  start_stop_flag = 0;</p><p><b>  }</b></p><p>

69、<b>  }</b></p><p>  /*-----------------------------------------------------------</p><p><b>  八位搶答鍵掃描函數(shù)</b></p><p>  ----------------------------------------

70、--------------------*/</p><p>  uchar key_scan8()</p><p><b>  {</b></p><p>  if(key1 == 0)</p><p><b>  {</b></p><p><b>  dela

71、y(8);</b></p><p>  if((key1 == 0)&&(!key1_flag))</p><p><b>  {</b></p><p>  key1_flag = 1;</p><p>  number = 1;</p><p>  number_

72、display = number;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  key1_

73、flag = 0;</p><p>  number = 0;</p><p><b>  }</b></p><p>  if(key2 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b>&l

74、t;/p><p>  if((key2 == 0)&&(!key2_flag))</p><p><b>  {</b></p><p>  key2_flag = 1;</p><p>  number = 2;</p><p>  number_display = number;

75、</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  key2_flag = 0;</p&g

76、t;<p>  number = 0;</p><p><b>  }</b></p><p>  if(key3 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p&g

77、t;  if((key3 == 0)&&(!key3_flag))</p><p><b>  {</b></p><p>  key3_flag = 1;</p><p>  number = 3;</p><p>  number_display = number;</p><p

78、><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  key3_flag = 0;</p><p>  nu

79、mber = 0;</p><p><b>  }</b></p><p>  if(key4 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((key4 == 0

80、)&&(!key4_flag))</p><p><b>  {</b></p><p>  key4_flag = 1;</p><p>  number = 4;</p><p>  number_display = number;</p><p><b>  }&

81、lt;/b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  key4_flag = 0;</p><p>  number = 0;</p

82、><p><b>  }</b></p><p>  if(key5 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((key5 == 0)&&(!key5

83、_flag))</p><p><b>  {</b></p><p>  key5_flag = 1;</p><p>  number = 5;</p><p>  number_display = number;</p><p><b>  }</b></p&g

84、t;<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  key5_flag = 0;</p><p>  number = 0;</p><p>&l

85、t;b>  }</b></p><p>  if(key6 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((key6 == 0)&&(!key6_flag))</p>

86、<p><b>  {</b></p><p>  key6_flag = 1;</p><p>  number = 6;</p><p>  number_display = number;</p><p><b>  }</b></p><p><

87、b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  key6_flag = 0;</p><p>  number = 0;</p><p><b>  }</b&

88、gt;</p><p>  if(key7 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((key7 == 0)&&(!key7_flag))</p><p><b&

89、gt;  {</b></p><p>  key7_flag = 1;</p><p>  number = 7;</p><p>  number_display = number;</p><p><b>  }</b></p><p><b>  }</b>

90、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  key7_flag = 0;</p><p>  number = 0;</p><p><b>  }</b></p>&l

91、t;p>  if(key8 == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((key8 == 0)&&(!key8_flag))</p><p><b>  {</b>&

92、lt;/p><p>  key8_flag = 1;</p><p>  number = 8;</p><p>  number_display = number;</p><p><b>  }</b></p><p><b>  }</b></p><

93、p><b>  else</b></p><p><b>  {</b></p><p>  key8_flag = 0;</p><p>  number = 0;</p><p><b>  }</b></p><p>  if(numbe

94、r_display != 0)</p><p><b>  {</b></p><p><b>  return 1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p>

95、<b>  {</b></p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*-----------------------------------

96、------------------------</p><p><b>  復(fù)位鍵掃描函數(shù)</b></p><p>  ------------------------------------------------------------*/</p><p>  void reset_keyscan()</p><p&g

97、t;<b>  {</b></p><p>  if(reset == 0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((reset == 0)&&(!reset_flag))<

98、;/p><p>  {second=20;</p><p>  reset_flag = 1;</p><p>  number_display = 0;</p><p>  state = 1;</p><p><b>  }</b></p><p><b>  

99、}</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  reset_flag = 0;</p><p><b>  }</b></p><p><b>  }</

100、b></p><p><b>  /*</b></p><p><b>  開機(jī)函數(shù)*/</b></p><p>  void kaishi_keyscan()</p><p><b>  {</b></p><p>  if(kaishi ==

101、0)</p><p><b>  {</b></p><p><b>  delay(8);</b></p><p>  if((kaishi == 0)&&(!kaishi_flag))</p><p><b>  {</b></p><p

102、>  kaishi_flag = 1;</p><p>  number_display = 0;</p><p>  state = 1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else&

103、lt;/b></p><p><b>  {</b></p><p>  kaishi_flag = 0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*-----------------

104、------------------------------------------</p><p><b>  主函數(shù)</b></p><p>  ------------------------------------------------------------*/</p><p>  void main()</p>&l

105、t;p><b>  {</b></p><p>  TMOD=0x01;</p><p><b>  TH0=0x3c;</b></p><p><b>  TL0=0xb0;</b></p><p><b>  EA=1;</b></p>

106、;<p><b>  ET0=1;</b></p><p><b>  TR0=0;</b></p><p><b>  while(1)</b></p><p>  {while((kaishi == 0)&&(!kaishi_flag))</p>&l

107、t;p>  {start_stop_keyscan();</p><p>  reset_keyscan();</p><p>  while(action)</p><p><b>  {</b></p><p>  while(!key_scan8())</p><p><b&g

108、t;  {</b></p><p>  display(number_display,second);</p><p>  if(second == 0)</p><p><b>  {</b></p><p>  second = 20;</p><p><b>  bre

109、ak;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  TR0 = 0;</b></p><p>  second = 0;</p><p>  display(number

110、_display,second);</p><p>  action = 0;</p><p><b>  break;</b></p><p><b>  }</b></p><p>  display(number_display,second);</p><p>&l

111、t;b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  /*-----------------------------------------------------------</p><p><b>

112、  中斷服務(wù)函數(shù)</b></p><p>  ------------------------------------------------------------*/</p><p>  void timer0() interrupt 1</p><p><b>  {</b></p><p><b

113、>  TH0=0x3c;</b></p><p><b>  TL0=0xb0;</b></p><p>  timer0_count ++;</p><p>  if(timer0_count == 20)</p><p><b>  {</b></p><p

114、>  timer0_count = 0;</p><p>  second --;</p><p>  if(second == 0)</p><p><b>  {</b></p><p><b>  TR0 = 0;</b></p><p>  number_dis

溫馨提示

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