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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

29、些器件的鎖存對于數(shù)據(jù)是透明的(也就是說輸出同步)。當(dāng)鎖存使能變低時,符合建立時間和保持時間的數(shù)據(jù)會被鎖存。 </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ù)碼管簡介</p><p>  LED數(shù)碼管是目前最常用的數(shù)字顯示器,圖A、B為共陰管和共陽管的電路,圖C為兩種不同出線形式的引出腳功能圖。</p><p>  一個LED數(shù)碼管可用來顯示一位0~9十進制數(shù)和一個小數(shù)點。小型數(shù)碼

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

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

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

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

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

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

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

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

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

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

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

43、該端所連接的字段導(dǎo)通并點亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時,要求段驅(qū)動電路能吸收額定的段導(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è)計

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

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

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

47、t;/p><p>  1.李朝青.單片機原理及接口技術(shù). 北京: 北京航空航天大學(xué)出版社,2009.</p><p>  2.張迎新.單片機初級教程. 北京: 北京航空航天大學(xué)出版社,2007.</p><p>  3. 張義和protel99pcb99設(shè)計與應(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ù)</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ū)動函數(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>  開機函數(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等.壓縮文件請下載最新的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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論