微機課程設(shè)計報告八路搶答器_第1頁
微機課程設(shè)計報告八路搶答器_第2頁
微機課程設(shè)計報告八路搶答器_第3頁
微機課程設(shè)計報告八路搶答器_第4頁
微機課程設(shè)計報告八路搶答器_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄第一章 論證方案11.1 方案一11.1.1 硬件選擇及說明11.1.2 原理框圖及原理11.1.3 經(jīng)濟及應(yīng)用論證21.2 方案二21.2.1 硬件選擇及說明21.2.2 原理框圖及原理21.2.3 經(jīng)濟及應(yīng)用論證3第二章 總體設(shè)計32.1 總體設(shè)計32.2 系統(tǒng)工作原理4第三章 硬件設(shè)計43.1 鍵盤顯示模塊電路圖43.2 鍵盤掃描模塊功能43.3鍵盤掃描模塊的工作原理53.4 數(shù)碼管顯示原理5第四章 軟件設(shè)計64.1軟件設(shè)計思想64.2程序流程圖6第五章 編碼及調(diào)試125.1源程序代碼125.2硬件調(diào)試195.3軟件測試19第六章 總結(jié)20第一章 論證方案本設(shè)計以微機原理及接口技術(shù)為

2、基礎(chǔ),以實驗箱為工具,完成pc機鍵盤控制的智能搶答器設(shè)計。該智能搶答器包括8088最小應(yīng)用系統(tǒng)整體設(shè)計模塊、鍵盤處理模塊(dos調(diào)用)、答題計時與聲光報警模塊、led數(shù)碼管顯示模塊。選用8086作為微處理器、擴展可編程并行i/o接口8255a芯片、可編程定時計數(shù)芯片8254、可編程中斷控制器8259a(或不用)、led數(shù)碼管及鍵盤和發(fā)光二極管等元件,制定方案如下:1.1 方案一1.1.1 硬件選擇及說明選用8255a,8254,8259,試驗箱鍵盤顯示區(qū)。(1)8254作為定時器使用。(2)8259利用ir0端作為定時到的中斷引入端,ir2端作為開始鍵按下的中斷引入端ir3端作為清零鍵按下的中

3、斷引入端ir4端作為暫停鍵按下的中斷引入端ir5端作為退出鍵按下的中斷引入端。(3)8255a作為并行輸入輸出,a口接鍵盤顯示區(qū),c口接燈光報警系統(tǒng),b口輸出位碼。(4)鍵盤顯示區(qū)由四個led數(shù)碼管和12個按鍵組成。1.1.2 原理框圖及原理利用8255a,8259,8254,鍵盤顯示區(qū)共同實現(xiàn),其中8255a作為并行輸出輸入,8259作為定時到的中斷采集,8254作為定時。其中鍵盤顯示區(qū)中kl1-kl4作為行,kh1-kh4作為列,當(dāng)kl1-kl4為高電平時四個數(shù)碼管選通,當(dāng)給數(shù)據(jù)線送數(shù)據(jù)時將顯示所要顯示的數(shù)據(jù)。當(dāng)kl1-kl4與kh1-kh4共同配合使用時可作為鍵盤掃描讀入使用并在led數(shù)

4、碼管上顯示按下的鍵對應(yīng)的數(shù)值。如圖1-1所示:60s倒計時模塊8086cpuled數(shù)碼顯示模塊鍵盤輸入模塊聲光報警模塊圖1-1 硬件原理框圖1.1.3 經(jīng)濟及應(yīng)用論證對于這種方案,8259中斷的引入使程序更易讀,更簡單一些,操作相對簡單一些,但硬件相應(yīng)增多,費用也相應(yīng)增多。1.2 方案二1.2.1 硬件選擇及說明選用8255a,8254,8259,實驗箱鍵盤顯示區(qū)。1.2.2 原理框圖及原理利用8255a的a口,c口作為并行輸入輸出,其中c口定義為高四位輸出,低四位輸入,a口定義為輸出,b口定義為輸出。利用8254的通道0和1作為紅燈亮3秒定時器,綠燈亮定時器,而8254的通道2用來接黃燈和蜂

5、鳴器具體的功能實現(xiàn):通過8255端口c來掃描鍵盤輸入,并有一定的削抖功能。信號傳輸至cpu進行處理。通過軟件進行倒記時,進行加減分,送led顯示。信號燈,蜂鳴器作相應(yīng)的反應(yīng)。硬件原理框圖如下圖所示:答題計時顯示模塊cpu 82558284led顯示模塊 8254 聲光報警模塊 鍵盤掃描模塊圖1-2 原理框圖1.2.3 經(jīng)濟及應(yīng)用論證對于這種方案可以看出,硬件設(shè)備較少設(shè)計,避免了8259的使用,節(jié)約了設(shè)計成本,軟件編程也并不是很復(fù)雜,相對于方案一有一定優(yōu)勢。但在調(diào)試中由于軟件相對復(fù)雜會使運行過程稍微復(fù)雜,但可以采用整塊運行調(diào)試,但須對程序非常熟悉。方案比較:方案二采用掃描,沒有用到8259,程序

6、編制簡單,但是cpu耗費了更多的時間在掃描,效率相對來說較低。方案一采用中斷,程序結(jié)構(gòu)化更為清晰,且cpu少了循環(huán)掃描的時間,效率較高。但是多用了一個8259中斷控制芯片,程序編制上涉及到中斷服務(wù)子程序的編寫,稍顯復(fù)雜??梢妰煞N方案各有優(yōu)劣。方案選擇:經(jīng)過對比,先采用更實用、經(jīng)濟的方案二,完成基本和擴展功能。若有時間,再采用方案一完成實驗。第二章 總體設(shè)計2.1 總體設(shè)計總體設(shè)計框圖如圖1-2。2.2 系統(tǒng)工作原理本設(shè)計主要是以8088為核心,通過加上必要的支持芯片,比如時鐘電路、地址鎖存器、譯碼器、總線驅(qū)動器以及存儲器和i/o接口電路及基本外圍設(shè)備,構(gòu)成一臺完整微機系統(tǒng)。通過8255a與外部

7、鍵盤相連,工作方式為定時掃描,利用定時器產(chǎn)生中斷、cpu響應(yīng)中斷后對鍵盤進行掃描,或軟件定時掃描,并在有鍵按下時轉(zhuǎn)入鍵功能處理程序。將8255a端口c的上(輸入方式)、下(輸出方式)半部分分別用作鍵盤的行線和列線,程序使某行為低電平,然后讀入并查詢列值;如果列值中有某位為低電平,則說明行列交叉點處的鍵被按下;否則掃描下一行,直到掃描全部行線。8255a的端口a用來輸出顯示字符;設(shè)置tab為led段選碼表的首地址,要顯示的數(shù)字的地址正好為起始地址加數(shù)字值,其地址存放著對應(yīng)于該數(shù)字值的顯示代碼。8255a的端口b用來控制led的顯示位,即位控端口,在軟件的設(shè)計上通過逐個接通8位led,把a口輸出的

8、代碼送到相應(yīng)的位上顯示,以減少硬件開支。利用8254產(chǎn)生定時,通道0用于60s倒計時定,定時時間到蜂明器發(fā)出聲響,黃燈閃爍,由裁判控制答案正確與否,這兩個通道分別用來定時3s,答案正確綠燈亮3秒,led顯示的數(shù)據(jù)加10分,否則紅燈亮3秒,數(shù)據(jù)減10分。第三章 硬件設(shè)計3.1 鍵盤顯示模塊電路圖圖3-1 鍵盤顯示電路圖3.2 鍵盤掃描模塊功能鍵盤掃描模塊的功能是通過8255擴展口實現(xiàn)對選手搶答信號的確定。1-8號選手中先按下按鍵者,led數(shù)碼管顯示其選手號碼(后按下無效)。 選手按下答題結(jié)束鍵,停止倒記時。 若該選手回答正確,裁判按加分鍵;錯誤按減分鍵。3.3鍵盤掃描模塊的工作原理為減少引線,鍵

9、盤采用矩陣式。鍵盤的識別采用行掃描法,程序使某行為低電平,則說明行列交叉點處的鍵被按下,然后,再具體確定按下的是哪個鍵。為此先使所在行輸出為0,再檢查列線是否有0。如果有零的話,此時由于不能確定閉合鍵所在的行,于是再用行掃描法來具體定位。如果讀得數(shù)據(jù)全部為1,則說明無鍵閉合。硬件上將8255端口c的上、下半部分分別用作鍵盤的行線和列線。用電平邏輯開關(guān)輸出高低電平來代替鍵盤按鍵。3.4 數(shù)碼管顯示原理數(shù)碼管的段位順序如右圖所示:一般來說在一個字節(jié)中按照abcdefg dp的順序放置字型碼,比如在一個“共陰極”數(shù)碼管上要顯示“1”,則b、c段需被點亮,因此在段選線中寫入60h。對應(yīng)規(guī)則:a-d7

10、b-d6c-d5d-d4 e-d3 f-d2g-d1 圖3-2數(shù)碼管顯示dp-d0圖3-3 4位8段led動態(tài)顯示器電原理圖led顯示器的顯示方法有兩種靜態(tài)顯示法和動態(tài)掃描顯示法。靜態(tài)顯示就是每一個顯示器各筆畫段都要獨占具有所存功能的輸出口線,cpu把要顯示的字符代碼送到輸出口上,就可以是顯示器顯示所需的數(shù)字后符號。但由于它站用的i/o口線較多,硬件成本高。所以我們選用了動態(tài)掃描顯示法。第四章 軟件設(shè)計4.1軟件設(shè)計思想本次實驗的軟件設(shè)計思想如下:利用8255a的a口,c口作為并行輸入輸出,其中c口定義為高四位輸出,低四位輸入,a口定義為輸出,b口定義為輸出。利用8254的通道0和1作為紅燈亮

11、3秒定時器,綠燈亮定時器,而8254的通道2用來接黃燈和蜂鳴器具體的功能實現(xiàn):通過8255端口c來掃描鍵盤輸入,并有一定的削抖功能。信號傳輸至cpu進行處理。通過軟件進行倒記時,進行加減分,送led顯示。信號燈,蜂鳴器作相應(yīng)的反應(yīng)。至此整體思路已如上所描述。整個編程思想如下所述:首先,為了使主程序易讀,本次設(shè)計采用了將多個功能的模塊編成為子程序的方法,所用程序為:鍵盤顯示子程序,鍵盤掃描子程序,60秒倒記時子程序,聲光報警子程序。第一,初始化8255a,8254,給8254送初值。這一部分主要完成8255a、8254的初始化。第二,查詢是否有鍵盤按鍵按下,若沒有按下則繼續(xù)查詢,8254仍未開始

12、定時,直到檢測出有按鍵按下為止才可以開始定時。第三,當(dāng)開始鍵按下,給8254送初值開始定時,然后用test指令來進行查詢。第四,當(dāng)定時60s開始時每進行一次循環(huán)要判斷是否有答題結(jié)束鍵按下。如果有,結(jié)束60s倒記時,若沒有,倒記時至0并打開聲光報警系統(tǒng);第五,通過8255檢測鍵盤是否有“正確”鍵按下。如果有,則調(diào)用加法指令,并綠燈閃爍。否則調(diào)用減法指令,紅燈閃爍。因此,在設(shè)計該軟件時考慮到程序設(shè)計的基本要求中要求:程序應(yīng)簡單、易讀、便于讀者理解,更重要的是設(shè)計者自身的設(shè)計思想應(yīng)清晰,編制的程序應(yīng)易于理解。所以本次設(shè)計采用的軟件思想如上所述。4.2程序流程圖該設(shè)計的程序流程圖可以分為五個:主程序流

13、程圖、鍵盤顯示子程序流程圖、鍵盤掃描子程序流程圖、60秒倒記時聲光報警模塊程序流程圖、計分模塊程序流程圖。注:程序流程圖如下所示:圖4-1 主程序流程圖60秒倒記時聲光報警模塊程序流程圖:圖4-2 聲光警報模塊流程圖鍵盤掃描子程序流程圖:圖4-3 鍵盤掃描流程圖計時分部分程序流程圖:圖4-4 設(shè)計部分流程圖鍵盤顯示子程序流程圖:圖4-5 鍵盤顯示流程圖第五章 編碼及調(diào)試5.1源程序代碼:datasegmentkeyv db ?p8255a equ 0e180hp8255b equ 0e184hp8255c equ 0e182hp8255_ctrlequ 0e186hp82540 equ 0e1

14、90hp82541equ 0e192hp82542 equ 0e194hp8254_ctrlequ 0e196hdis_tabledb0c0h,0f9h,0a4h,0b0h,099h,92h,82hdb0f8h,080h,90h,88h,83h,0c6h,0a1hdb86h,8eh,0ffh,8ch,89h,8eh,0bfh,0f7h dis_bit0db?dis_bit1 db?dis_bit2 db?dis_bit3db ?num db ?baidb ?tensdb ?seconddb ?fendw ?chundb?shiequ000ahchushudb ?shang db ?yushu

15、db ?dataendscodesegmentassumecs:code,ds:datastart;movax,datamovds,axmovbai,0movtens,6movsecond,0start1:moval,10001000bmovdx,p8255_ctrloutdx,almoval,00010001bmovdx,p8254_ctloutdx,alnext:call keymoval,blcmpal,07janextaddbl,1movmum,blcall display1movcx,60moval,00010001bmovdx, p8254_ctloutdx,almoval,32h

16、movdx, p8254_1outdx,alpush axpush bxpush cxpush dxlea bx,dis_tablemovax, 60movcx,60lop: movdx, p8255_boutdx,0fbhcalldjsxsxlatmovdx, p8255_aoutdx ,almoval,ahxlatmovdx, p8255_boutdx,0f7h movdx, p8255_aoutdx,alcalldelay1smovdx,p8255_cinal,dxtestax,0f3hjzll decaxlooplopcallsgbaojingll:popdx popcx popbx

17、popaxcallkeywarning:movax,fensdivax,100movbai,almoval,ahmovah,0div10movtens,almovsecond,ahcalldisplay1callkeymov al ,bl cmpal,10 jlwarning cmp al,11 jg warning cmp al,10 je jia clc mov ax,fens sub ax,10 movfens,ax divax,100movbai,almoval,ahmovah,0div10movtens,almovsecond,ahcalldisplay1 mov dx,8284_c

18、trl mov al,10010001b out dx,al mov dx,8254_1 mov al,96h out dx, aljia: mov ax,fens(num-1) add ax,10 mov fens,axdivax,100movbai,almoval,ahmovah,0div10movtens,almovsecond,ahcalldisplay1mov dx,8254_ctrl mov al,00010001b out dx,al mov dx,8254_2 mov al,96h out dx, alchaxun: call display1 mov dx,p8255_c i

19、nal,dx cmpal,7bh jne chaxun mov al,00000000b mov dx,p8255_b out dx,aljmp start1keyprocfar mov dx,p8255_ctrl mov al,10001000b out dx,al call keyscan cmp bl,0ffh jnz wait retwait: mov key_v,bl call delay call keyscan cmp bl,key_v jz release retrelease:mov al,0f0h mov dx,p8255_c out dx,al in al,dx anda

20、l,0f0h cmp al,0f0h jnz release retkeyendpkeyscanporcfarkeyscan:mov al,0f0h mov dx,p8255_c out dx,al in al,dx and al,0f0h cmp al,0f0h jnz done mov bl,0ffh retdone: mov bl,0 mov cl,0feh mov ch,3frow: mov al,cl mov dx, p8255_c out dx,al rcl al,1 mov cl,al in al,dx and al,0f0h cmp al,0f0h jnz fcol add b

21、l,4 dec ch jnz frow retfcol: rclal,1 nc fcol1 inc bl jmp fcolfcol1: retkeyscanendp display1procnear push axpushbx push cx push dx lea bx,dis_tablemov al,numxlatand al,01111111bmov dis_bit0,al mov al,baixlatmov dis_bit1,almov al,tensxlatmov dis_bit2,almov al,secondxlatmov dis_bit3,al dis_lop1: movdx,

22、p8255_b moval,01houtdx,almovdx,p8255_amoval,dis_bit0outdx,almovcx,000loop$movdx,p8255_bmoval,02houtdx,almovdx,p8255_amoval,dis_bit1outdx,almovcx,000loop$movdx,p8255_bmoval,03houtdx,almovdx,p8255_amoval,dis_bit2outdx,almovcx,000loop $movdx,p8255_bmoval,04houtdx,almovdx,p8255_amoval,dis_bit3outdx,almo

23、vcx,000loop$pop axpop bxpop cxpop dxretdisplay1endpdjsxsprocnearmov chushu,10div chushumov shang,almov yushu,ahdjsxs endpdelay1s proc nearpush axpush bxpush cxpush dxmov bl,100delay:mov cx,2801wait:loop waitdec bljnz delaypop dxpop cxpop bxpop axretdelay1sendpsgbaojingproc farpush ax push bx push cx

24、push dxcall delay60s mov al,00000000b mov dx,p8254_ctrmov al,97houtdx,al mov dx,p8254-2 mov al,60outdx,aljnz delay2dec dxjnz delay1 mov al,00000000b mov dx,p8254-2 out dx,al pop dx pop cx pop bx pop axprocdelay60sfar mov dx,60delay1: mov bl,100delay2: mov cx,2801wait1:loopwait1decbldelay60sendpsgbao

25、jingendpcodeendsendstart5.2硬件調(diào)試為了使每次實驗都能準(zhǔn)確進行,實驗前先進行硬件調(diào)試。首先,檢測led數(shù)碼管是否顯示良好。其次,檢測數(shù)碼管為良好顯示后。再檢查8255a的三個輸送端口a口b口c口是否可以正常輸出輸入,作為并行端口使用。再次,查8254的良好性,只能通過簡單小程序單步進行檢測,或用示波器來進行檢測。最后確定實驗時排線連接正確,及電源開關(guān)正確。盡量避免長時間將實驗箱處于開電源狀態(tài)以使實驗箱溫度過高。5.3軟件測試在進行軟件調(diào)試時遇到了許多問題,下面敘述如下:在剛開始編程時,各種功能大部分是由主程序來完成的。由于主程序過于復(fù)雜,可讀性不高。使得在以后的程序的調(diào)試中遇到了很大的麻煩。后來把主程序的部分功能轉(zhuǎn)化成子程序來實現(xiàn),并在一些重要的地方增加了注釋,使的程序的可讀性大大加強。調(diào)試也變的比較簡單了。到此基本解決了第一個問題。在編程時,子程序的調(diào)試也是相當(dāng)重要,由于子程序不可避免的使用axbxcxdx通用寄存器一個或幾個。使得原主程序中的通用寄存器的內(nèi)容很容易被覆蓋,對子程序中所有的通用寄存器出入棧即可以避免上訴的問題,不用考慮使用的是哪幾個寄存器,使用起來又比較簡單方便。所以至此這個問題也已基本解決。軟件的調(diào)試是一個復(fù)雜煩瑣而漫長的過程。在調(diào)試的過程中一定要耐下心來去做,否則一旦出現(xiàn)煩躁的心里,就會事倍功半,適得

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論