課程設(shè)計---八路搶答器_第1頁
已閱讀1頁,還剩45頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  《智能化電子產(chǎn)品設(shè)計》課程設(shè)計</p><p>  2012 屆</p><p>  注;學(xué)生1為小組組長。</p><p><b>  續(xù)表:</b></p><p>  注: 此表在指導(dǎo)老師的指導(dǎo)下填寫。</p><p>  基于單片機AT89C51的搶答器設(shè)計

2、</p><p><b>  摘 要</b></p><p>  搶答器作為一種電子產(chǎn)品已廣泛應(yīng)用于各種智力和知識競賽場合。一個八路搶答器的設(shè)計需要考慮到可更改回答及搶答時間功能,利用AT89C51單片機及外圍接口實現(xiàn)的搶答系統(tǒng),利用單片機的定時器/計數(shù)器定時和記數(shù)的原理,將軟硬件有機的結(jié)合起來,使得系統(tǒng)能夠正確地進(jìn)行計時,同時使數(shù)碼管能夠正確地顯示時間。用開關(guān)做鍵

3、盤輸出,揚聲器發(fā)聲提示。同時系統(tǒng)能夠?qū)崿F(xiàn)在搶答中只有開始后搶答才有效,如果在開始搶答前搶答為無效;搶答限定時間和回答問題的時間可在1-60s設(shè)定,可以實現(xiàn)是哪位選手有效搶答和無效搶答,搶答時間和回答問題時間倒計時顯示,在有效狀態(tài)下,按鍵無效非法。</p><p>  基于單片機AT89C51的搶答器設(shè)計,首先完成總體方案的論證制定,繪制控制臺的總體框圖,然后分析系統(tǒng)的工作原理,在此基礎(chǔ)上設(shè)計出各部分單元電路原理圖

4、,分析其工作原理,進(jìn)一步完成對系統(tǒng)電路的設(shè)計。在對系統(tǒng)工作原理充分研究的基礎(chǔ)上,選擇合適的原件號和參數(shù),再用protel繪圖軟件畫出電路原理圖。</p><p>  關(guān)鍵字 AT89C51,數(shù)碼管,搶答器,計時器</p><p><b>  目 錄</b></p><p>  1.概 述--------------------------

5、-----------------------------------------------1</p><p>  1.1任務(wù)描述-----------------------------------------------------------------1</p><p>  1.2 研究內(nèi)容---------------------------------------------

6、-------------------1</p><p>  2.系統(tǒng)方案分析與論證-------------------------------------------------------2</p><p>  2.1 方案選擇----------------------------------------------------------------3</p>&l

7、t;p>  2.2 按鍵的選擇-------------------------------------------------------------4</p><p>  3.系統(tǒng)硬件設(shè)計----------------------------------------------------------------5</p><p>  3.1 總體設(shè)計框圖-----------

8、-----------------------------------------------6</p><p>  3.2 系統(tǒng)需求分析----------------------------------------------------------7</p><p>  3.3 各部分硬件模塊設(shè)計及其原理-------------------------------------7&l

9、t;/p><p>  3.4 AT89C51特殊功能寄存器--------------------------------------------8</p><p>  3.5 硬件電路圖及功能----------------------------------------------------8</p><p>  4.系統(tǒng)軟件設(shè)計-----------------

10、-----------------------------------------------9</p><p>  4.1 軟件任務(wù)分析----------------------------------------------------------10</p><p>  4.2 軟件流程圖-----------------------------------------------

11、--------------11</p><p>  5.程序源代碼-------------------------------------------------------------------15</p><p>  6.系統(tǒng)調(diào)試及結(jié)果分析-------------------------------------------------------11</p>&l

12、t;p>  參考文獻(xiàn)------------------------------------------------------------------------12</p><p>  致 謝-------------------------------------------------------------------------13</p><p>  附 錄--

13、-----------------------------------------------------------------------14</p><p>  附錄1:八路搶答器程序清單---------------------------------------26</p><p>  附錄2:元器件目錄表-------------------------------------

14、-----------38</p><p><b>  引 言</b></p><p>  搶答器是為智力競賽參賽者答題時進(jìn)行搶答而設(shè)計的一種優(yōu)先判決器電路,廣泛應(yīng)用于各種知識競賽、文娛活動等場合。能夠?qū)崿F(xiàn)搶答器功能的方式有多種,可以采用前期的模擬電路、數(shù)字電路或模擬與數(shù)字電路相結(jié)合的方式,但這種方式制作過程復(fù)雜,而且準(zhǔn)確性與可靠性不高,成品面積大,安裝、維護(hù)困難

15、。本節(jié)介紹一種利用51單片機作為核心部件進(jìn)行邏輯控制及信號產(chǎn)生的八路搶答器。</p><p>  近年來,隨著單片機檔次的不斷提高,功能的不斷完善,其應(yīng)用日趨成熟、應(yīng)用領(lǐng)域日趨擴大,特別是工業(yè)測控、尖端武器和日用家電等領(lǐng)域更是因為有了單片機而生輝增色。單片機應(yīng)用技術(shù)已成為一項新的工程應(yīng)用技術(shù)。本次項目我們做的是八路搶答器,我們采用AT89C51單片機實現(xiàn)搶答功能,性能更穩(wěn)定,更易操作調(diào)試。</p>

16、<p><b>  一、概述</b></p><p><b>  1.1 任務(wù)描述</b></p><p>  在自動控制的單片機應(yīng)用系統(tǒng)中,單片機往往是作為一個核心部件來使用,僅單片機方面知識是不夠的,還應(yīng)根據(jù)具體硬件結(jié)構(gòu),以及針對具體應(yīng)用對象特點的軟件結(jié)合,以作完善。本設(shè)計是以單片機的C51環(huán)境來進(jìn)行軟件設(shè)計,使指令的執(zhí)行速度快,節(jié)

17、省存儲空間。為了便于擴展和更改,軟件的設(shè)計采用模塊化結(jié)構(gòu),使程序設(shè)計的邏輯關(guān)系更加簡潔明了。使硬件在軟件的控制下協(xié)調(diào)運作。</p><p>  一個完整的搶答器包括4個模塊。即:單片機模塊、按鍵模塊、數(shù)碼管顯示模塊、蜂鳴器模塊。按鍵模塊、數(shù)碼管顯示模塊和蜂鳴器模塊采用單片機來控制。其中,按鍵模塊選用4×4行列矩陣按鍵,與獨立按鍵相比,占用I/O口端線較少,適用于按鍵較多的場合等優(yōu)點。</p>

18、<p><b>  1.2 研究內(nèi)容</b></p><p>  系統(tǒng)采用模塊化設(shè)計智能搶答器。在搶答比賽中廣泛應(yīng)用,各組分別有一個搶答按鈕。主持人有開始和結(jié)束、復(fù)位鍵。在后臺主持人可以修改,搶答時間和選手回答問題的時間設(shè)置,原始狀態(tài)下?lián)尨饡r間為60s,回答問題時間為60s。通過加鍵和減鍵修改上述時間,改完后結(jié)束鍵確定。新時間開始有效,主持人按鍵開始后,選手開始搶答為有效,數(shù)碼

19、顯示屏顯示搶答時間倒計時和選手號。如果主持人沒有按下開始鍵而選手就搶答視為無效。主持人按鍵結(jié)束,新一輪搶答開始。</p><p>  二、系統(tǒng)方案分析與論證</p><p><b>  2.1方案選擇</b></p><p>  方案一:八路搶答器可以利用硬件電子元器件實現(xiàn),系統(tǒng)各部分采用中小規(guī)模集成數(shù)字電路,用機械開關(guān)按鈕作為控制開關(guān),完成搶

20、答輸入信號的觸發(fā)。該方案的特點是中小規(guī)模集成電路應(yīng)用技術(shù)成熟,性能可靠,能方便地完成選手搶答的基本功能,但是電路結(jié)構(gòu)復(fù)雜,調(diào)試?yán)щy,涉及到外圍元件多,并且制作過程程序比較繁瑣,不便于安裝,實驗給實際操作帶來很大麻煩。</p><p>  方案二:該系統(tǒng)采用MCS—51系列單片機AT89C51作為控制核心,其片內(nèi)帶有4KFlashROM,128的RAM,以及8根I/O口線能滿足設(shè)計要求。該系統(tǒng)可以完成運算控制、信號

21、識別以及顯示功能的實現(xiàn)。利用單片機程序判斷選手按鍵是否有效,給出相應(yīng)的延時,選手按正常的操作搶答,軟件倒計時時,利用AT89C51的數(shù)碼管,實現(xiàn)倒計時顯示時間,若再規(guī)定時間內(nèi)未作答,啟動蜂鳴器。由于用了單片機,使其技術(shù)比較成熟,應(yīng)用起來方便、簡單并且單片機周圍的輔助電路也比較少,便于控制和實現(xiàn)。整個系統(tǒng)具有極其靈活的可編程性,能方便的對系統(tǒng)進(jìn)行功能的擴張和更改性。</p><p>  方案比較分析:從第一個方案我

22、們可以看出,這個搶答器是由搶答電路,定時電路,報警電路,時序控制電路組成。擴展電路是由秒鐘脈沖信號產(chǎn)生電路,譯碼電路,顯示電路等,它的功能很齊全,設(shè)計的電路也很穩(wěn)定。但是它的造價卻很高,僅僅是集成電路他就用了8個,這個跟我們當(dāng)初的設(shè)計理念是相沖突的。我們要的是功能齊全,但是造價比較低的設(shè)計。所以我們放棄這個方案。而方案二采用單片機,可靠性好,結(jié)構(gòu)簡單,具有顯示出臺號,倒計時功能等。該模式充分體驗了原有系統(tǒng)性能的改進(jìn),功能的擴展以及其他同

23、類系統(tǒng)的不同之處,它包括硬件邏輯圖與軟件流程圖,比較經(jīng)濟實用,所以我們選用單片機的方案。</p><p><b>  2.2 按鍵的選擇</b></p><p>  鍵盤的控制方式分為獨立式按鍵和矩陣式按鍵。</p><p>  獨立式按鍵的原理是,一鍵一線,各鍵相互獨立,每個按鍵各接一條I/O口線,通過檢測I/O輸入線的電平狀態(tài),可以很容易地

24、判斷哪個按鍵被按下。 獨立式按鍵電路配置靈活,每個按鍵需占用一條I/O口線,軟件結(jié)構(gòu)簡單,適用于按鍵較少的場合。</p><p>  矩陣式按鍵的原理是每條行線和列線在交叉處不直接連通,而是通過一個按鍵加以連接。當(dāng)按鍵沒有按下時,所有的輸入端都是高電平,代表無鍵按下。行線輸出是低電平,一旦有鍵按下,則輸入線就會被拉低,這樣,通過讀入輸入線的狀態(tài)就可得知是否有鍵按下了。矩陣式按鍵占用I/O線較少,軟件結(jié)構(gòu)相對復(fù)雜,

25、適用于按鍵較多的場合。</p><p>  本項目由于需較多按鍵,占用I/O線較多,因此選用4×4矩陣式按鍵。</p><p><b>  三、系統(tǒng)硬件設(shè)計</b></p><p>  3.1 總體設(shè)計框圖</p><p>  數(shù)字搶答器系統(tǒng)設(shè)計是借用單片機采用模塊設(shè)計的八路搶答器,包括8路搶答按鈕、計時顯示、

26、提示功能、開始與結(jié)束控制按鈕、時限設(shè)定、各種相關(guān)顯示調(diào)控功能等。</p><p>  參賽者系統(tǒng),除享有搶答按鈕的權(quán)利功能外,還有人性化的提示功能和時間提示功能,也可設(shè)定由主控制控制參賽者終端表現(xiàn)的趣味性功能等;主控系統(tǒng)的控制按鈕做開始與結(jié)束控制,根據(jù)活動參賽者的層次,對提前搶答者的行為設(shè)定阻隔。系統(tǒng)的主要功能模塊方框圖如圖3—1所示。</p><p>  3.2 系統(tǒng)需求分析</

27、p><p>  a.在搶答中,只有開始后搶答才有效,如果在開始搶答前搶答為無效。</p><p>  b.搶答限定時間和回答問題時間可以再1-60s設(shè)定。</p><p>  c.搶答時間和回答問題時間倒計時顯示,時間完成后由主持人復(fù)位。</p><p>  d.按鍵鎖定,在有效狀態(tài)下,按鍵無效。</p><p>  3.

28、3 各部分硬件模塊設(shè)計及其原理</p><p>  3.2.1 單片機最小電路</p><p>  AT89C51單片機是ATMAL公司89系列單片機的一種8位Flash單片機。它最大特點是片內(nèi)含有Flash存儲器。用途十分廣泛,特別是在生產(chǎn)便攜式商品,手提式儀器等方面,有著十分廣泛的應(yīng)用。</p><p>  AT89C51單片機內(nèi)部主要有以下不見:8031CP

29、U、振蕩電路、總線控制部件、中斷控制部件、片內(nèi)Flash存儲器、片內(nèi)RAM、并行I/O接口、定時器和串行I/O接口。</p><p>  AT89C51單片機內(nèi)部由CPU、4KB的FPERROM,128B的RAM,兩個16位的定時/計數(shù)器T0和T1,4個8位的I/O端P0、P1、P2、P3等組成。單片微機內(nèi)部最核心的部分是CPU。CPU主要功能是產(chǎn)生各種控制信號,控制存儲器、輸入/輸出端口的數(shù)據(jù)傳輸、數(shù)據(jù)的算術(shù)運

30、算、邏輯運算以及位操作處理等,CPU按其功能可分為運算器和控制器兩部分??刂破饔沙绦蛴嫈?shù)器PC、指令存儲器、指令譯碼器、實時控制與條件轉(zhuǎn)移邏輯電路等組成。它的功能是對來自存儲器中的指令進(jìn)行譯碼,通過實時控制電路,在規(guī)定的時刻發(fā)出各種操作所需的內(nèi)部和外部的控制信號,使各部分協(xié)調(diào)工作,完成指令所規(guī)定的操作。運算器由算術(shù)邏輯器部件ALU、累加器ACC、暫存器、程序狀態(tài)字存儲器PSW、BCD碼運算調(diào)整電路等組成。</p><

31、p>  AT89C51的主要性能</p><p>  ·與MCS-51 兼容 </p><p>  ·4K字節(jié)可編程閃爍存儲器 </p><p>  ·壽命:1000寫/擦循環(huán)</p><p>  ·數(shù)據(jù)保留時間:10年</p><p>  ·全靜態(tài)工作:0Hz-

32、24MHz</p><p>  ·三級程序存儲器鎖定</p><p>  ·128×8位內(nèi)部RAM</p><p>  ·32可編程I/O線</p><p>  ·兩個16位定時器/計數(shù)器</p><p><b>  ·5個中斷源 </b>

33、;</p><p><b>  ·可編程串行通道</b></p><p>  ·低功耗的閑置和掉電模式</p><p>  ·片內(nèi)振蕩器和時鐘電路</p><p>  AT89C51單片機引腳功能說明</p><p><b>  VCC:供電電壓。</

34、b></p><p><b>  GND:接地。</b></p><p>  P0口:P0口為一個8位漏級開路雙向I/O口,每腳可吸收8TTL門電流。當(dāng)P1口的管腳第一次寫1時,被定義為高阻輸入。P0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在FIASH編程時,P0 口作為原碼輸入口,當(dāng)FIASH進(jìn)行校驗時,P0輸出原碼,此時P0外部必須被拉

35、高。</p><p>  P1口:P1口是一個內(nèi)部提供上拉電阻的8位雙向I/O口,P1口緩沖器能接收輸出4TTL門電流。P1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,P1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在FLASH編程和校驗時,P1口作為第八位地址接收。 </p><p>  P2口:P2口為一個內(nèi)部上拉電阻的8位雙向I/O口,P2口緩沖器可接收,輸出4個TT

36、L門電流,當(dāng)P2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,P2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。P2口當(dāng)用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進(jìn)行存取時,P2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當(dāng)對外部八位地址數(shù)據(jù)存儲器進(jìn)行讀寫時,P2口輸出其特殊功能寄存器的內(nèi)容。P2口在FLASH編程和校驗時接收高八位地址信號和控制信號。</p><

37、p>  P3口:P3口管腳是8個帶內(nèi)部上拉電阻的雙向I/O口,可接收輸出4個TTL門電流。當(dāng)P3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下拉為低電平,P3口將輸出電流(ILL)這是由于上拉的緣故。</p><p>  P3口也可作為AT89C51的一些特殊功能口,如下表所示:</p><p>  P3.0 RXD(串行輸入口)</p>&l

38、t;p>  P3.1 TXD(串行輸出口)</p><p>  P3.2 /INT0(外部中斷0)</p><p>  P3.3 /INT1(外部中斷1)</p><p>  P3.4 T0(記時器0外部輸入)</p><p>  P3.5 T1(記時器1外部輸入)</p><p>  P3.6 /WR(外部數(shù)據(jù)

39、存儲器寫選通)</p><p>  P3.7 /RD(外部數(shù)據(jù)存儲器讀選通)</p><p>  P3口同時為閃爍編程和編程校驗接收一些控制信號。</p><p>  RST:復(fù)位輸入。當(dāng)振蕩器復(fù)位器件時,要保持RST腳兩個機器周期的高電平時間。</p><p>  ALE/PROG:當(dāng)訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地址的地

40、位字節(jié)。在FLASH編程期間,此引腳用于輸入編程脈沖。在平時,ALE端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當(dāng)用作外部數(shù)據(jù)存儲器時,將跳過一個ALE脈沖。如想禁止ALE的輸出可在SFR8EH地址上置0。此時, ALE只有在執(zhí)行MOVX,MOVC指令是ALE才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ALE禁止,置位無效。</p>

41、;<p>  /PSEN:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/PSEN有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/PSEN信號將不出現(xiàn)。</p><p>  /EA/VPP:當(dāng)/EA保持低電平時,則在此期間外部程序存儲器(0000H-FFFFH),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/EA將內(nèi)部鎖定為RESET;當(dāng)/EA端保持高電平時,此間內(nèi)部程序存儲器

42、。在FLASH編程期間,此引腳也用于施加12V編程電源(VPP)。</p><p>  XTAL1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。</p><p>  XTAL2:來自反向振蕩器的輸出。</p><p>  AT89S51的最小系統(tǒng)</p><p>  所謂最小系統(tǒng),是指單片機能夠正確工作的基本電路系統(tǒng),是單片機應(yīng)用系統(tǒng)的

43、 硬件電路在單片機最小系統(tǒng)的基礎(chǔ)上增加輸入輸出接口電路和外圍電路構(gòu)成。</p><p>  單片機最小系統(tǒng)以AT89C51單片機為核心,由單片機、時鐘電路、復(fù)位電路等組成。如圖4所示。主要負(fù)責(zé)各個模塊的初始化工作;讀取并處理時間;處理按鍵響應(yīng);控制數(shù)碼管的顯示等。</p><p>  圖4 單片機最小系統(tǒng)</p><p>  時鐘電路是由XTAL1和XT

44、AL2之間跨接的晶體振蕩器和微調(diào)電容構(gòu)成。圖中,由C1、C2和X1構(gòu)成了振蕩電路。時鐘電路中晶體振蕩器的頻率高則系統(tǒng)的時鐘頻率就高,所以該系統(tǒng)采用12M晶振;</p><p>  復(fù)位電路有兩種形式:手動按鍵復(fù)位和上電復(fù)位,在本系統(tǒng)中采用的是上電復(fù)位。如圖4所示,R1和C3組成系統(tǒng)上電復(fù)位電路。</p><p>  AT89C51特殊功能寄存器</p><p>  

45、特殊功能寄存器也稱專用寄存器,是具有特殊功能的所有寄存器的集合,簡稱SFR。特殊功能寄存器共含有22個不同的寄存器。它們的地址分配在80H-FFH中,即在RAM地址中。這些寄存器的名稱和地址見下表。</p><p>  雖然特殊功能寄存器地址在80H-FFH之中,但在80H-FFH的地址單元中,不是所有的單元都被特殊功能寄存器占用,未被占用的單元,其內(nèi)容是不正確的,如果對這些單元進(jìn)行操作,得到的是一些隨機數(shù),而寫

46、入則無效。所以,用戶編程時不應(yīng)該將數(shù)據(jù)寫入這些未確定的地址單元,它們是公司留待將來開發(fā)新產(chǎn)品時使用的。</p><p>  3.5 硬件電路圖及功能</p><p>  搶答器設(shè)計分為硬件設(shè)計和軟件設(shè)計,這兩者相互結(jié)合,不可分離;從時間上看,硬件設(shè)計的絕大部分工作量是在最初階段,到后期往往還要做一些修改。只要技術(shù)準(zhǔn)備充分,精簡設(shè)計的大返工是比較少的,軟件設(shè)計的任務(wù)貫徹始終,到中后期基本上都

47、是軟件設(shè)計任務(wù),隨著集成電路技術(shù)的飛速發(fā)展,各種功能很強的芯片不斷出現(xiàn),使硬件電路的集成度越來越高,硬件設(shè)計的工作量在整個項目中的所占的比重逐漸下降。為使硬件電路設(shè)計盡可能合理,應(yīng)注意以下幾個方面:</p><p>  a.盡可能采用功能強的芯片,以簡化電路,功能強的芯片可以代替若干普通芯片,隨著生產(chǎn)工藝的提高,新型芯片的價格不斷下降,并不一定比若干普通芯片價格的總和高。</p><p>

48、  b.留有設(shè)計余地。在設(shè)計硬件電路時,要考慮到將來修改擴展的方便。因為很少有一錘定音的電路設(shè)計,如果現(xiàn)在不留余地,將來可能要位一點小小的修改活擴展而被迫進(jìn)行全面返工。</p><p>  c.程序空間,選用片內(nèi)程序空間足夠大的單片機,本設(shè)計采用AT89C51單片機。</p><p>  d. RAM空間,AT89C51內(nèi)部RAM不多,當(dāng)要增強軟件數(shù)據(jù)處理功能時,往往覺得不足。如果系統(tǒng)配置

49、了外部RAM,則建議多留一些空間。有大批數(shù)據(jù)需要處理,則應(yīng)配置足夠的RAM。隨著軟件設(shè)計水平的提高,往往只要改變或增加軟件中的數(shù)據(jù)處理算法,就可以使系統(tǒng)功能提高很多,而系統(tǒng)的硬件不必做任何更換就使系統(tǒng)升級換代。只要在硬件電路上設(shè)計初期考慮到這一點,就應(yīng)該為系統(tǒng)將來升級留足夠的RAM空間,哪怕多設(shè)計一個RAM的插座,咱不插芯片也好。</p><p>  e. I/O端口:在樣機研制出來后進(jìn)行現(xiàn)場使用時,往往會發(fā)現(xiàn)一

50、些被忽視的問題,而這些問題不是靠單純的軟件措施來解決的。如有些信號需要采集,就必須增加輸入檢測段;有些物理量需要控制,就必須增加輸出端。如果在硬件電路設(shè)計就預(yù)留出一些I/O端口,雖然當(dāng)時空著沒用,那么用的時候就派上用場了。</p><p><b>  硬件電路圖</b></p><p><b>  系統(tǒng)軟件設(shè)計</b></p>&l

51、t;p><b>  4.1軟件任務(wù)分析</b></p><p>  軟件任務(wù)分析和硬件電路設(shè)計結(jié)合進(jìn)行,那些功能由硬件完成,那些任務(wù)由軟件完成,在硬件電路設(shè)計基本定型后,也就基本上決定下來了。</p><p>  軟件任務(wù)分析環(huán)節(jié)是為軟件設(shè)計做一個總體規(guī)劃。從軟件的功能來看可分為兩大類:一類是執(zhí)行軟件,它能完成各種實質(zhì)性的功能,如測量,計算,顯示,打印,輸出控制

52、和通信等,另一類是監(jiān)控軟件,它是專門用來協(xié)調(diào)各執(zhí)行模塊和操作者的關(guān)系,在系統(tǒng)軟件中充當(dāng)組織調(diào)度角色的軟件。這兩類軟件的設(shè)計方法各有特色,執(zhí)行軟件的設(shè)計偏重算法效率,與硬件關(guān)系密切,千變?nèi)f化。</p><p>  軟件人物分析時,應(yīng)將各執(zhí)行模塊一一列出,并為每一個執(zhí)行模塊進(jìn)行功能定義和接口定義。在各執(zhí)行模塊進(jìn)行定義時,將要牽扯到的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型問題也一并規(guī)劃好。</p><p>  各執(zhí)

53、行模塊規(guī)劃好后,就可以監(jiān)控程序了。首先根據(jù)系統(tǒng)功能和鍵盤設(shè)置選擇一種最合適的監(jiān)控程序結(jié)構(gòu)。相對來講,執(zhí)行模塊任務(wù)明確單純,比較容易編程,而監(jiān)控程序較易出問題。這如同當(dāng)一名操作工人比較容易,而當(dāng)一個廠長就比較難了。</p><p><b>  4.2軟件流程圖</b></p><p> ?。?)數(shù)碼顯示軟件流程圖</p><p><b>

54、; ?。?)倒計時流程圖</b></p><p>  程序源代碼(見附錄A)</p><p><b>  系統(tǒng)調(diào)試及結(jié)果分析</b></p><p>  1) 先在Keil軟件里編譯通過程序源代碼,同時需要在Output選項卡里設(shè)置Creat HEX File和Debug 選項卡里設(shè)置采用Proteus VSM Simulator仿

55、真。</p><p>  2)編譯產(chǎn)生了HEX文件后,在ISIS 6 Professional軟件里為AT89C51添加HEX文件。</p><p>  3) 然后就可以Debug。調(diào)試效果圖如圖所示:</p><p><b>  參 考 文 獻(xiàn)</b></p><p>  [1] 李建忠,《單片機原理及應(yīng)用[M]》,西

56、安電子科技大學(xué)出版社,2008.2. </p><p>  [2] 李廣弟,朱月秀,王秀山,《單片機基礎(chǔ)[M]》,北京:北京航空航天大學(xué)出版社,2001.7.</p><p>  [3] 趙曙光,郭萬有,楊頌華,《可編程邏輯器件原理開發(fā)與應(yīng)用[M]》,西安:西安電子科技大學(xué), 2000.</p><p>  [4] 陳小忠,黃寧,《單片機接口技術(shù)實用子程序[M]》,

57、北京:北京人民郵電出版社, 2005.</p><p>  [5] 賈立新,王涌,《電子系統(tǒng)設(shè)計與實踐[M]》,北京:清華大學(xué)出版社,2007.</p><p><b>  致 謝</b></p><p>  在課程設(shè)計的寫作過程中,我們的指導(dǎo)老師傾注了大量的心血,從選題到開題報告,從寫作提綱到一遍又一遍地指出報告中的具體問題,嚴(yán)格把關(guān),循循

58、善誘。老師多次詢問研究進(jìn)程,并為我們指點迷津,幫助我們開拓研究思路,精心點撥、熱忱鼓勵。老師一絲不茍的作風(fēng),嚴(yán)謹(jǐn)求實的態(tài)度,踏踏實實的精神,不僅授我以文,而且教我做人,對老師的感激之情是無法用言語表達(dá)的,在此我們表示衷心感謝。她嚴(yán)肅的科學(xué)態(tài)度,嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神,精益求精的工作作風(fēng),精神地感染和激勵著我們。此外,我們還要感謝在報告寫作中給予我們幫助的各位同學(xué)。由于經(jīng)驗的匱乏,難免有許多考慮不周全的地方。如果沒有老師的督促知道以及周圍同學(xué)的幫

59、助,想要完成這個設(shè)計是難以想象的。正是由于你們的幫助和支持,我們才能克服一個個的困難和疑惑,直至報告的順利完成。</p><p>  在報告即將完成之際,我們的心情無法平靜,從開始進(jìn)去課題到報告的順利完成,有多少可敬的師長、同學(xué)、朋友給了我無言的幫助,在這里請接受我誠摯的謝意!同事感謝IVT為我們提供了良好的課程設(shè)計環(huán)境。</p><p>  最后再一次感謝所有在課程設(shè)計中曾經(jīng)幫助過我的良

60、師益友和同學(xué),以及在設(shè)計中被我們應(yīng)用或參考的論著的作者。因我們水平有限,設(shè)計中可能有許多不當(dāng)之處,還望讀者批評指正,謝謝!</p><p><b>  附 錄</b></p><p>  附錄1:八路搶答器程序清單</p><p>  #include<reg51.h>//變量預(yù)處理定義模塊</p><p>

61、;  #define uint unsigned int</p><p>  #define uchar unsigned char</p><p>  #define K1_1 1 ; //主持人按鍵開始</p><p>  #define K1_2 2</p><p>  #define K1_3 3</p><p

62、>  #define K1_4 4</p><p>  #define K2_1 5</p><p>  #define K2_2 6</p><p>  #define K2_3 7</p><p>  #define K2_4 8</p><p>  #define K3_1 9 //選手按鍵<

63、;/p><p>  #define K3_2 10 //主持人按鍵答對加分,按一下加一分</p><p>  #define K3_3 11 //答錯減分 </p><p>  #define K3_4 12 </p><p>  #define K4_1 13</p><p>  #define K

64、4_2 14</p><p>  #define K4_3 15</p><p>  #define K4_4 16</p><p>  sbit P3_0=P3^0;</p><p>  sbit P3_1=P3^1;</p><p>  sbit m1=P3^2;</p><p>  sbi

65、t m2=P3^3;</p><p>  sbit P3_4=P3^4;</p><p>  sbit P3_5=P3^5;</p><p>  sbit P3_6=P3^6;</p><p>  sbit P3_7=P3^7;</p><p>  sbit beep=P2^7; //蜂鳴器</p>&

66、lt;p>  #define KEY_MASK 0xf0</p><p>  #define NO_KEY 0x00</p><p>  //緩沖區(qū)設(shè)置和函數(shù)說明模塊</p><p>  code unsigned char seg[17]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//0

67、-9</p><p>  0x88,0x83,0xa7,0xa1,0x86,0x8e}; // A~F 共陽極數(shù)碼管的字型碼</p><p>  code unsigned char seg1[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,//0~9</p><p>  0x77,0x7c,0

68、x39,0x5e,0x79,0x71}; // A~F 共陰極數(shù)碼管的字型碼</p><p>  uchar fenshu,xuanshou,count,i;</p><p>  uint second,minute,hour;</p><p>  uchar tcount;</p><p>  uchar score1,score

69、2,score3,score4,score5,score6,score7,score8;//選手1~8的分?jǐn)?shù)</p><p>  uint t,m,n,a,a1,a2,a3,a4,a5,a6,a7,a8;</p><p>  unsigned char read_keybord(void);</p><p>  void display();</p>

70、<p>  void process(uchar key);</p><p>  void DelayMS(uint x) //X ms延時函數(shù)</p><p><b>  {</b></p><p><b>  uchar t;</b></p><p>  while(x--)&

71、lt;/p><p><b>  {</b></p><p>  for(t=120;t>0;t--);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void delay(uint x) /

72、/X ms延時函數(shù)</p><p><b>  {</b></p><p><b>  uchar t;</b></p><p>  while(x--)</p><p><b>  {</b></p><p>  for(t=120;t>0;t-

73、-);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void Timer() //定時中斷初始化模塊</p><p><b>  {</b></p><p>  TMOD=0x01;</p&

74、gt;<p>  TH0=(65536-50000)/256;</p><p>  TL0=(65536-50000)%256;</p><p><b>  ET0=1;</b></p><p>  EA=1; </p><p><b>  tcount=0;</b></

75、p><p><b>  }</b></p><p>  void tim(void) interrupt 1 using 2//定時中斷服務(wù)模塊</p><p><b>  { </b></p><p>  TH0=(65536-50000)/256;</p><p>  T

76、L0=(65536-50000)%256;</p><p><b>  tcount++;</b></p><p>  if(tcount==20)</p><p><b>  { </b></p><p><b>  tcount=0;</b></p>&l

77、t;p><b>  second--;</b></p><p>  if(second==-1) {second=0; TR0=0;beep=0;}</p><p><b>  }</b></p><p><b>  }</b></p><p>  //4×4行

78、列矩陣按鍵掃描模塊</p><p>  unsigned char read_keybord()</p><p>  { static unsigned char key_state = 0;</p><p>  static unsigned char key_value, key_line;</p><p>  static unsi

79、gned char key_return = NO_KEY;</p><p>  unsigned char i,key_returnE = NO_KEY;</p><p>  switch(key_state)</p><p><b>  {</b></p><p><b>  case 0:</b&g

80、t;</p><p>  key_line = 0xFE; //0b11111110;</p><p>  for(i=1;i<=4;i++) //按鍵掃描</p><p><b>  {</b></p><p>  P1 = key_line; //輸出行線電平

81、</p><p>  P1 = key_line; //輸出兩次</p><p>  DelayMS(1);</p><p>  key_value = KEY_MASK & P1; //讀列電平</p><p>  if(key_value == KEY_MASK)</p><p><b>  

82、{ </b></p><p>  key_line <<= 1;//沒有按鍵,繼續(xù)掃描 </p><p>  display();</p><p>  key_line |= 0x01;</p><p>  DelayMS(2); </p><p><

83、;b>  }</b></p><p><b>  else</b></p><p>  { DelayMS(1);</p><p>  key_value = KEY_MASK & P1; //讀列電平</p><p>  if(key_value == KEY_MASK) </p

84、><p>  key_line<<= 1; //沒有按鍵,繼續(xù)掃描 </p><p>  key_line |= 0x01;</p><p><b>  break;}</b></p><p>  else key_state++; //有鍵按下,停止掃描</p><p>  bre

85、ak; //轉(zhuǎn)消抖確認(rèn)狀態(tài)</p><p><b>  } </b></p><p><b>  }</b></p><p><b>  break;</b></p><p><b>  case 1:</b></p><p>

86、;  { key_value=key_line & 0x0f | key_value ;</p><p>  switch(key_value) //確認(rèn)按鍵</p><p><b>  { </b></p><p>  case 0xEE: //0b1110 1110:</p><p>

87、;  key_return = K1_1; </p><p><b>  break;</b></p><p>  case 0xDE: //0b11011110:</p><p>  key_return = K1_2; </p><p><b>  b

88、reak;</b></p><p>  case 0xBE: //0b10111110:</p><p>  key_return = K1_3;</p><p>  break; </p><p>  case 0x7E: //0b 0111

89、1110 :</p><p>  key_return = K1_4;</p><p>  break; </p><p>  case 0xED: //0b 11101101 :</p><p>  key_return = K2_1;</p><p><b>  

90、break;</b></p><p>  case 0xDD: //0b1101 1101:</p><p>  key_return = K2_2;</p><p><b>  break;</b></p><p>  case 0xBD: //0b101

91、11101:</p><p>  key_return = K2_3;</p><p>  break; </p><p>  case 0x7D: //0b01111101:</p><p>  key_return = K2_4;</p><p>  break; </p

92、><p>  case 0xEB: //0b 11101011:</p><p>  key_return = K3_1;</p><p><b>  break;</b></p><p>  case 0XDB: //0b 11011011:</p><

93、;p>  key_return = K3_2;</p><p><b>  break;</b></p><p>  case 0xBB: //0b1011 1011:</p><p>  key_return = K3_3;</p><p>  break;

94、 </p><p>  case 0x7B: //0b01111011:</p><p>  key_return = K3_4;</p><p>  break; </p><p>  case 0xE7: //0b11100111:</p><p

95、>  key_return = K4_1;</p><p><b>  break;</b></p><p>  case 0xD7: //0b1101 0111:</p><p>  key_return = K4_2;</p><p><b>  break;</b&g

96、t;</p><p>  case 0xB7: //0b10110111:</p><p>  key_return = K4_3;</p><p><b>  break; </b></p><p>  case 0x77: //0b0111 0111:</

97、p><p>  key_return = K4_4;</p><p><b>  break; </b></p><p><b>  } </b></p><p>  key_state++; //轉(zhuǎn)入按鍵釋放狀態(tài) </p

98、><p><b>  }</b></p><p><b>  break;</b></p><p>  case 2: //等待按鍵釋放</p><p>  P1= 0XF0; //行線全部輸出低電平 </p><p><b>  P1= 0

99、xF0;</b></p><p>  P2=seg1[key_return-1]|0x80;</p><p>  if((KEY_MASK & P1) == KEY_MASK)</p><p>  { key_returnE=key_return;</p><p>  key_state = 0; //列線全部為高

100、電平,返回狀態(tài)0</p><p><b>  } </b></p><p><b>  break; </b></p><p><b>  }</b></p><p>  return(key_returnE);</p><p><b>  }

101、</b></p><p>  //動態(tài)掃描顯示模塊</p><p>  void display()//顯示函數(shù)</p><p><b>  { </b></p><p>  P0=seg[(second%10)]; </p><p>  P3_7=0; </p

102、><p>  DelayMS(2);</p><p><b>  P3_7=1;</b></p><p>  DelayMS(1);</p><p>  P0=seg[(second/10)];</p><p>  P3_6=0; </p><p>  D

103、elayMS(2);</p><p><b>  P3_6=1;</b></p><p>  DelayMS(1); </p><p><b>  P0=0xBF; </b></p><p>  P3_5=0; </p><p>  DelayMS(2);

104、</p><p><b>  P3_5=1;</b></p><p>  DelayMS(1);</p><p>  P0=seg[0]; </p><p>  P3_4=0; </p><p>  DelayMS(2);</p><p><b

105、>  P3_4=1;</b></p><p>  DelayMS(1);</p><p>  P0=seg[(fenshu%10)];</p><p>  m2=0; </p><p>  DelayMS(2);</p><p><b>  m2=1;</b&

106、gt;</p><p>  DelayMS(1);</p><p><b>  P0=0xff;</b></p><p>  P0=seg[(fenshu/10)]; </p><p>  m1=0; </p><p>  DelayMS(2);</p><

107、p><b>  m1=1;</b></p><p>  DelayMS(1);</p><p><b>  P0=0xBF; </b></p><p>  P3_1=0; </p><p>  DelayMS(2);</p><p><b>

108、;  P3_1=1;</b></p><p>  DelayMS(1);</p><p>  /* P0=seg[(hour%10)]; </p><p>  DelayMS(2);</p><p><b>  P3_1=1; </b></p><p>  De

109、layMS(1);*/</p><p>  P0=seg[xuanshou]; </p><p><b>  P3_0=0;</b></p><p>  DelayMS(2);</p><p>  P3_0=1; </p><p>  DelayMS(1); </p><

110、;p><b>  }</b></p><p><b>  //任務(wù)處理模塊</b></p><p>  void process(uchar key)</p><p>  { if(key==1){ second=60;TR0=1;xuanshou=0; }</p><p>  else

111、if( key<10 && key>1) </p><p>  {if(xuanshou==0){xuanshou=key-1,TR0=0; }}</p><p><b>  else </b></p><p>  switch(key)</p><p><b>  {</b

112、></p><p>  case 10: if(fenshu<20)fenshu++;</p><p>  break; </p><p>  case 11: if(fenshu>0)fenshu--;</p><p>  break; //燈亮</p><p><

113、b>  }</b></p><p>  if(key==1) //主持人按下開始鍵</p><p><b>  {</b></p><p><b>  //dis();</b></p><p><b>  m=0;</b></p><p

114、><b>  n=0;</b></p><p>  if(second==10){beep=1;delay(500);beep=0;}</p><p>  if(second==0)</p><p><b>  {</b></p><p>  TR0=0;n=1;</p><

115、;p>  if(key==0)</p><p>  {beep=1;delay(500);beep=0;second=29;TR0=1;m=1;}</p><p><b>  }</b></p><p><b>  if(n==0)</b></p><p><b>  {</b

116、></p><p>  if(key==2) {t=1;}</p><p>  else if(key==3) {t=2;}</p><p>  else if(key==4) {t=3;}</p><p>  else if(key==5) {t=4;}</p><p>  else if(key==6) {t

117、=5;}</p><p>  else if(key==7) {t=6;}</p><p>  else if(key==8) {t=7;}</p><p>  else if(key==9) {t=8;}</p><p>  else if(key==10) {t=0;}</p><p>  else if(key

118、==11) {t=0;i=0;second=29;beep=1;delay(500);beep=0;TR0=1;}</p><p><b>  while(t)</b></p><p><b>  {</b></p><p>  if(m==0) //開關(guān),保證程序只執(zhí)行一次</p><p>&l

119、t;b>  {</b></p><p><b>  switch(t)</b></p><p><b>  {</b></p><p><b>  case 1:</b></p><p><b>  {</b></p>&l

120、t;p>  TR0=0;i=1;second=0;beep=1;delay(500);beep=0;</p><p>  a1=0;a2=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;</p><p><b>  }</b></p><p><b>  case 2:</b>&l

121、t;/p><p><b>  {</b></p><p>  TR0=0;i=2;second=0;beep=1;delay(500);beep=0;</p><p>  a2=0;a1=1;a3=1;a4=1;a5=1;a6=1;a7=1;a8=1;m=1;break;</p><p><b>  }</b

122、></p><p><b>  case 3:</b></p><p><b>  {</b></p><p>  TR0=0;i=3;second=0;beep=1;delay(500);beep=0;</p><p>  a3=0;a1=1;a2=1;a4=1;a5=1;a6=1;a7=1

123、;a8=1;m=1;break;</p><p><b>  }</b></p><p><b>  case 4:</b></p><p><b>  {</b></p><p>  TR0=0;i=4;second=0;beep=1;delay(500);beep=0;&l

124、t;/p><p>  a4=0;a1=1;a2=1;a3=1;a5=1;a6=1;a7=1;a8=1;m=1;break;</p><p><b>  }</b></p><p><b>  case 5:</b></p><p><b>  {</b></p>&l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論