西安電子科技大學(xué)通信工程學(xué)院課程設(shè)計(jì)_第1頁
西安電子科技大學(xué)通信工程學(xué)院課程設(shè)計(jì)_第2頁
西安電子科技大學(xué)通信工程學(xué)院課程設(shè)計(jì)_第3頁
西安電子科技大學(xué)通信工程學(xué)院課程設(shè)計(jì)_第4頁
西安電子科技大學(xué)通信工程學(xué)院課程設(shè)計(jì)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告010812#跳舞機(jī)設(shè)計(jì)一.設(shè)計(jì)目的:掌握矩陣鍵盤和顯示接口的硬件設(shè)計(jì)方法掌握鍵盤掃描程序和顯示程序的編程方法實(shí)用程序設(shè)計(jì)及學(xué)習(xí)DOS、BIOS調(diào)用1.基本功能設(shè)計(jì):至少設(shè)計(jì)4個(gè)數(shù)碼管和4個(gè)按鍵數(shù)碼管顯示的舞蹈動(dòng)作是隨機(jī)的可以統(tǒng)計(jì)游戲者的分?jǐn)?shù)2.擴(kuò)展功能:電腦和實(shí)驗(yàn)版上可以加一些聲光電的效果3.創(chuàng)新功能:, 作為正常,當(dāng)作反向應(yīng)用,即。二.系統(tǒng)方案:設(shè)計(jì)思路如下:產(chǎn)生4個(gè)隨機(jī)數(shù),將隨機(jī)數(shù)和方向?qū)?yīng)。將隨機(jī)方向顯示在數(shù)碼管上,從按鍵獲得方向輸入,比較兩方向的值。時(shí)間結(jié)束將統(tǒng)計(jì)到的正確值轉(zhuǎn)換成評分,輸出評分等級。程序分為以下幾大部分:主程序,RDNUM,DISPLAY,SCANNU

2、M1,CMPNUM。其中RDNUM 調(diào)用系統(tǒng)時(shí)間規(guī)范化產(chǎn)生隨機(jī)數(shù),載入BUF,;DISPLAY則將BUF1的數(shù)值在TABEL2查詢獲得數(shù)碼管值,并將內(nèi)容顯示出來;SCANNUM1循環(huán)調(diào)用DISPLAY以維持在掃描鍵值期間的數(shù)碼管顯示,同時(shí)監(jiān)控按鍵獲得鍵值,查詢TABE1將鍵值轉(zhuǎn)換為數(shù)值,超時(shí)則記為-1;CMPNUM調(diào)整鍵值和隨機(jī)數(shù),將他們的對應(yīng)域統(tǒng)一,形成映射,比較二者的值;主程序通過循環(huán)調(diào)用SCANNUM1持續(xù)監(jiān)控按鍵直到超時(shí),4次調(diào)用CMPNUM,統(tǒng)計(jì)正確數(shù),最后對結(jié)果評分等級NICE,GOOD,PASS,FAIL,調(diào)用DISPLAY顯示評分。1.主程序:MOV AX,DATAMOV DS

3、,AX ;數(shù)據(jù)段段址送DS。MOV AX,STACKMOV SS,AX ;堆棧段段址送SS。MOV SP,OFFSET TOP ;獲取堆棧指針。MOV DX,0EE03H ;DX指向8255的D口。MOV AL,10001001B ;工作方式狀態(tài)控制字,表示方式0,端口C輸出。OUT DX,AL ;完成8255初始化。STEP1:CALL FAR PTR RDNUM ;調(diào)用RDNUM生成隨機(jī)數(shù),存儲(chǔ)于BUF。LEA DI,BUF ;DI傳遞當(dāng)前正在比較的隨機(jī)數(shù)。MOV CX,4 STEP2:CALL FAR PTR SCANNUM1 ;掃描鍵值,返回值star t初始化8255產(chǎn)生隨機(jī)數(shù),存入

4、緩存掃描鍵盤,將掃描到的鍵值存入緩存,超時(shí)則標(biāo)記-1比較隨機(jī)數(shù)和鍵值統(tǒng)計(jì)正確值數(shù)碼管顯示評分等級end存于BL。CALL FAR PTR CMPNUM ;比較數(shù)值。INC DI ;讀取下一個(gè)隨機(jī)數(shù)。LOOP STEP2;循環(huán)四次逐個(gè)鍵值掃描,比較。STEP3: ;將成績轉(zhuǎn)換對應(yīng)評分。MOV AX,RESULTCMP AL,4JE NICECMP AL,3JE GOODCMP AL,2JE PASSFAIL: ;成績小于2輸出FAIL。MOV AH,0FHMOV BUF0,AHMOV AH,0AHMOV BUF1,AHMOV AH,1HMOV BUF2,AHMOV BUF3,AHJMP STEP

5、4PASS: ;成績?yōu)?輸出PASS。MOV AH,21HMOV BUF0,AHMOV AH,0AHMOV BUF1,AHMOV AH,5HMOV BUF2,AHMOV BUF3,AHJMP STEP4GOOD: ;成績?yōu)?輸出GOOD。MOV AH,6HMOV BUF0,AHMOV AH,22HMOV BUF1,AHMOV BUF2,AHMOV AH,0HMOV BUF3,AHJMP STEP4NICE: ;成績?yōu)?輸出NICE。MOV AH,10HMOV BUF0,AHMOV AH,1HMOV BUF1,AHMOV AH,0CHMOV BUF2,AHMOV AH,0EHMOV BUF3,A

6、HJMP STEP4STEP4:MOV CX,9000STP5:CALL FAR PTR DISPLAY ;顯示評分。LOOP STP5 ;閃爍維持評分顯示。MOV AH,4CHINT 21HCODE1 SEGMENTASSUME CS:CODE1RDNUM PROC FARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DI ;寄存器保護(hù)。DO1:MOV AH,2CH ;2CH號功能調(diào)用,取系統(tǒng)時(shí)間:DL存放毫秒INT 21HMOV AL,DL ;將毫秒值除以5,調(diào)整隨機(jī)偏移量的取值在0-4之間。MOV AH,0MOV BL,5DIV BL ;AH是一個(gè)0-4的隨機(jī)數(shù)去查詢

7、偽隨機(jī)表。RDNU MRET獲取系統(tǒng)時(shí)間產(chǎn)生隨機(jī)數(shù)隨機(jī)數(shù)查表獲得偽隨機(jī)序列序列依次載入B UFLEA DI,TABLE3RDSCAN:MOV AL,DI ;將隨機(jī)表內(nèi)容放入AL。INC DIINC DI ;指向轉(zhuǎn)換表下一個(gè)查找字節(jié)。CMP AL,AH ;比較AL,AH。JNZ RDSCAN ;不等則繼續(xù)查找。MOV AL,DI-1 ;相等則開始查表對BUF賦值。MOV BUF0,ALMOV AL,DI+1MOV BUF1,AL MOV AL,SI+3 MOV BUF2,AL MOV AL,SI+5 MOV BUF3,ALPOP DIPOP DXPOP CXPOP BXPOP AXRET ;返回

8、。RDNUM ENDP CODE1 ENDSCODE2 SEGMENTASSUME CS:CODE2DISPLA Y PROC FARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIPUSH SI ;寄存器保護(hù)。MOV CX,4 ;循環(huán)顯示4個(gè)數(shù)碼管。LEA DI, BUF ;DI指向輸入的數(shù)據(jù)。MOV AH,00001000B ;由左至右顯示。DO2:MOV BL,DI ;將輸入數(shù)據(jù)放入BL。LEA SI,TABLE2 ;SI指向由BUF到LED數(shù)碼管的轉(zhuǎn)換表。MOV DX,0EE00H ;DX指向A口地址。MOV AL,0FFH ;顯示為空。OUT DX,AL ;將A

9、L內(nèi)容顯示。DO3:MOV BH,SI ;將轉(zhuǎn)換表內(nèi)容放入BH。MOV DH,0FFHINC SIINC SI ;指向轉(zhuǎn)換表下一個(gè)查找字節(jié)。CMP BL,BH ;比較BL,BH。JNZ DO3 ;在轉(zhuǎn)換表中查找對應(yīng)值。MOV DX,0EE01H ;將DX指向B口。MOV AL,AH ;給AL賦值(應(yīng)顯示那個(gè)數(shù)碼管。OUT DX,AL ;控制哪個(gè)管顯示。MOV DX,0EE00H ;將DX指向A口。MOV AL,SI-1 ;查找到的數(shù)碼管值寫入AL。OUT DX,ALDELAY: ;維持顯示,使數(shù)碼管數(shù)據(jù)顯示清晰。PUSH CXPUSH AXMOV AX,200REP1: ;用兩個(gè)循環(huán)來控制時(shí)延

10、。MOV CX,1000REP2:CX=4隨機(jī)數(shù)查表轉(zhuǎn)換8255輸出待顯值時(shí)延,維持顯示更新待顯值和數(shù)碼管CX=0?RETCX-1DISP LAYLOOP REP2DEC AXCMP AX,0JNZ REP1;AX不為0繼續(xù)循環(huán)。POP AXPOP CXROR AH,1 ;循環(huán)左移。INC DI ;更換下一個(gè)顯示數(shù)據(jù)。LOOP DO2 ;POP SIPOP DIPOP DXPOP CXPOP BXPOP AXRETDISPLA Y ENDP CODE2 ENDSCODE3 SEGMENTASSUME CS:CODE3SCANNUM1 PROC FARPUSH AXPUSH CXPUSH DXP

11、USH DIPUSH SI ;寄存器保護(hù),將BX作為參數(shù)傳遞的方式,不壓棧。MOV CX,SCANNUM ;控制掃描循環(huán)次數(shù)。SCANLOOP1:CALL FAR PTR DISPLAY ;調(diào)用DISPLAY 顯示。MOV AL,00001111BMOV DX,0EE05HAND AL,LEDOUT DX,AL ;74L374口高位置零。MOV DX,0EE02H ;控制C口。IN AL,DX ;將C口內(nèi)容讀到AL。AND AL,00001111B;取出AL低四位。CMP AL,00001111B ;判斷是否有鍵按下(無鍵按下時(shí)為全1。JE SCANLOOP3 ;無鍵值時(shí)跳轉(zhuǎn)。MOV AH,1

12、1101111B ;掃描第一行。SCANLOOP2:MOV AL,AH ;有鍵按下則開始掃描。MOV DX,0EE05HOUT DX,ALMOV DX,0EE02HIN AL,DXAND AL,00001111B;取出AL低四位。CMP AL,00001111B ;判斷是否有鍵按下(無鍵按下時(shí)為全1。JNE SCANLOOP4 ;有則譯鍵碼。ROL AH,1 ;AH左移讀取下一行。CMP AH,11111110B ;循環(huán)四次,各行掃完結(jié)束?JNZ SCANLOOP2 ;沒有則進(jìn)行下一次掃描。SCANLOOP3:LOOP SCANLOOP1MOV BL,0FFH ;超時(shí)標(biāo)記。JMP SCANLO

13、OP7 ;循環(huán)結(jié)束,跳出掃描。SCANLOOP4: ;鍵值查表。SCAN調(diào)用DISPLAY,顯示行輸出全0列輸入值=1111?行輸出初值A(chǔ)H=1110 1111行輸出 AH列輸入值=1111?AH左環(huán)移4行掃描完否?NNYNY調(diào)用DISPLAY,消抖讀入列值列輸入值=1111?調(diào)用DISPLAY,消抖獲得鍵值將鍵值譯碼放入BLDECXYRETCX=0?BL=-1Y(CX-1CXNNAND AH,0F0H ;AH帶有行號特征, AND后行特征位為0。MOV BL,ALOR BL,AH ;行列OR獲得鍵值。MOV DI,OFFSET TABLE1 ;獲取鍵值對應(yīng)表的地址。SCANLOOP5: ;鍵

14、值和隨機(jī)數(shù)映射。MOV BH,DIINC DIINC DICMP BL,BH ;鍵值和查表比較。JNZ SCANLOOP5MOV BL,DI-1 ;查到值放入BL。SCANLOOP6:CALL FAR PTR DISPLAY ;調(diào)用顯示。IN AL,DXAND AL,00001111BCMP AL,00001111B ;判斷按鍵是否松開。JNE SCANLOOP6 ;沒有繼續(xù)監(jiān)聽。SCANLOOP7:CALL FAR PTR DISPLAY ;消抖。POP SIPOP DIPOP DXPOP CXPOP AXRETSCANNUM1 ENDPCODE3 ENDSCODE4 SEGMENTASSU

15、ME CS:CODE4CMPNUM PROC FARPUSH CXPUSH DXPUSH SI ;寄存器壓棧保護(hù)。MOV BH,DI ;BH裝載隨機(jī)數(shù),BL裝載鍵值。CHANGE1: ;鍵值映射范圍調(diào)整。PUSH BXPUSH AXMOV AL,BLMOV AH,0 ;數(shù)值載入AX。MOV BL,4 ;除以4。DIV BLMOV DL,AH ;余數(shù)載入DL。POP AXPOP BXCHANGE2: ;隨機(jī)數(shù)映射范圍調(diào)整。PUSH BXPUSH AXMOV AL,BHSUB AL,10H ;將之前加上的10H減除。MOV AH,0 ;數(shù)值載入AX。MOV BL,4 ;除以4。DIV BLMOV

16、DH,AH ;余數(shù)載入DH。POP AXPOP BXCMP DL,DHJNZ WRONG1 ;不等則報(bào)錯(cuò)。MOV CX,RESULTINC CXMOV RESULT,CX ;正確則計(jì)數(shù)。JMP END1WRONG1:MOV DL,07H ;按鍵出錯(cuò)后主板上的蜂鳴器報(bào)警。MOV AH,02H ;調(diào)用系統(tǒng)報(bào)錯(cuò)。CMPN UMBX載入隨機(jī)數(shù)和鍵值取余將值與四方向?qū)?yīng)比較隨機(jī)數(shù)與鍵值報(bào)錯(cuò)相等?成績加1RET INT 21H END1: POP SI POP DXPOP CX RETCMPNUM ENDP CODE4 ENDS8255硬件原理及電路原理圖 一 與CPU 連接部分8255能并行傳送8位數(shù)據(jù)

17、,所以其數(shù)據(jù)線為8根D0D7。由于8255具有3個(gè)通道A 、B 、C ,所以只要兩根地址線就能尋址A 、B 、C 口及控制寄存器,故地址線為兩根A0A1。此外CPU 要對8255進(jìn)行讀、寫與片選操作,所以控制線為片選、復(fù)位、讀、寫信號。各信號的引腳編號如下:(1數(shù)據(jù)總線DB :編號為D0D7,用于8255與CPU 傳送8位數(shù)據(jù)。(2地址總線AB :編號為A0A1,用于選擇A 、B 、C 口與控制寄存器。(3控制總線CB :片選信號、復(fù)位信號RST 、寫信號、讀信號。當(dāng)CPU 要對8255進(jìn)行讀、寫操作時(shí),必須先向8255發(fā)片選信號選中8255芯片,然后發(fā)讀信號或?qū)懶盘枌?255進(jìn)行讀或?qū)憯?shù)據(jù)的

18、操作。二 與外設(shè)接口部分根據(jù)定義,8255有3個(gè)通道A 、B 、C 與外設(shè)連接,每個(gè)通道又有8根線與外設(shè)連接,所以8255可以用24根線與外設(shè)連接,若進(jìn)行開關(guān)量控制,則8255可同時(shí)控制24路開關(guān)。各通道的引腳編號如下:(1A 口:編號為PA0PA7,用于8255向外設(shè)輸入輸出8位并行數(shù)據(jù)。 (2B 口:編號為PB0PB7,用于8255向外設(shè)輸入輸出8位并行數(shù)據(jù)。(3C 口:編號為PC0PC7,用于8255向外設(shè)輸入輸出8位并行數(shù)據(jù),當(dāng)8255工作于應(yīng)答I/O 方式時(shí),C 口用于應(yīng)答信號的通信。三 控制器8255將3個(gè)通道分為兩組,即PA0PA7與PC4PC7組成A 組,PB0PB7與PC0P

19、C3組成B 組。如圖7.5所示,相應(yīng)的控制器也分為A 組控制器與B 組控制器,各組控制器的作用如下:(1A 組控制器:控制A 口與上C 口的輸入與輸出。 (2B 組控制器:控制B 口與下C 口的輸入與輸出。當(dāng)向A1=1,A0=1的端口寄存器(即控制寄存器發(fā)送D7=1的控制字時(shí),其作用為方式控制字,各個(gè)位的含義如圖所示 74LS374硬件原理及電路原理圖74LS374的管腳圖如圖:74LS374作為八上升沿D 觸發(fā)器,主要端口的含義: D0D7 數(shù)據(jù)輸入端OE 三態(tài)允許控制端(低電平有效 CP 時(shí)鐘輸入端 O0-O7 輸出端 電路接線如下:8255AP A 4P A 5P A 6P A 7P B

20、 7P B 6P B 5P B 4P B 3P A 3P A 2P A 1P A 0P C 7P C 6P C 5P C 4P C 3P C 2P C 1P C 0P B 0P B 1P B 2+5V 123456789def g DpC O M5a f bg C O MDpc d e 74LS374D 7D 6D 5D 4D 0D 1D 2D 3COM 4COMCOM 3COMCOM 2COMCOM 1COM COM 0COMP C 2P C 3P C 1P C 0D 4D 5D 6D 7ab c d e f gD pC O M 0C O M 1C O M 2C O M 3C O M 4C

21、O M 5三.其它技術(shù)要點(diǎn)LED 數(shù)碼顯示器擴(kuò)展:字型和字型碼對應(yīng):0,0C0H,01H,0F9H,05H,92H,06H,82H,0AH,88H,0CH,0C6H,0DH,0A1H,0EH,86H,0FH,84H,21H,8CH,22H,0A3H,10H,0C8H,11H,0F0H,12H,0C1H,13H,0C6H,14H,0F7H,15H,0CFH,16H,0FEH,17H,0F9H 。其中21H,22H 代表P 和O 。10H-17H表示,。 動(dòng)態(tài)顯示原理:建立顯示緩沖區(qū)BUF:存放字形代碼,由運(yùn)算程序?qū)懭隑UF 顯示子程序DISPLAY 動(dòng)態(tài)掃描顯示: 關(guān)顯示器:位選信號無效(全0

22、送字形代碼 送位選信號當(dāng)前位亮2ms 左右 重復(fù)亮下一位 顯示子程序DISPLAY:調(diào)用一次掃描6位,約12ms 每秒調(diào)用24次左右 DISPLAY 可用作延時(shí)矩陣鍵盤的擴(kuò)展:鍵盤采用行輸入列輸出的方式進(jìn)行控制,輸出不同的數(shù)值,讓不同的行生效,通過列輸入判斷列數(shù)值,把輸出數(shù)據(jù)和輸入數(shù)據(jù)組合起來計(jì)算鍵值。完成按鍵的確認(rèn)。 行輸出值 列輸入值 1110 1111 無鍵按下 1110 0 1101 1 1011 2 0111 3 1101 1111 無鍵按下 1110 41101 5 1011 6 0111 7 1011 鍵值轉(zhuǎn)換:采用查詢方式獲得鍵值,建立了TABLE1存儲(chǔ)對應(yīng)鍵值和特征值:TAB

23、LE1 DB 11101110B,0,11101101B,01H,11101011B,02H,.鍵盤的消除抖動(dòng)處理:當(dāng)按鍵被按下時(shí)會(huì)引起抖動(dòng),抖動(dòng)時(shí)間不超過15ms 。 ab cdef g DpCOM a f bg COM Dpc d e 引腳圖.COMa b c d e f gDp.共陽極按鍵按下前沿抖動(dòng)后沿抖動(dòng)處理的方法是:(1當(dāng)某按鍵被按下后,調(diào)用DISPLAY子程序,前沿消抖(2識(shí)別按鍵是否抬起(3按鍵抬起時(shí)也應(yīng)消除抖動(dòng)隨機(jī)序列生成:系統(tǒng)調(diào)用產(chǎn)生隨機(jī)時(shí)間值,在循環(huán)調(diào)用時(shí)數(shù)值有很大的相關(guān)性,隨機(jī)性得不到保證。采用偽隨機(jī)碼列表查詢的方式由隨機(jī)時(shí)間值查詢序列獲得隨機(jī)序列,保證了隨機(jī)值的不重復(fù)

24、性。四.心得體會(huì):通過本次設(shè)計(jì),我們復(fù)習(xí)了微機(jī)原理與接口技術(shù)的相關(guān)知識(shí),熟悉了8255, 74LS374的相關(guān)技術(shù),加深了對于匯編的理解和運(yùn)用,掌握矩陣鍵盤和顯示接口的硬件的設(shè)計(jì)方法,掌握鍵盤掃描程序和顯示程序的編程方法,無論是軟件還是硬件的相關(guān)方面,都有所收獲。由于設(shè)計(jì)的工作量比較大,代碼較長,使得我們形成了工作規(guī)劃的習(xí)慣與分治策略:將每個(gè)小功能模塊獨(dú)立以便于維護(hù)和可讀性,同時(shí)還加深了團(tuán)隊(duì)協(xié)作能力和溝通技巧。實(shí)踐出真知。我們雖然學(xué)習(xí)過微機(jī)原理與接口技術(shù),但是時(shí)間久遠(yuǎn),有點(diǎn)陌生了。通過本次設(shè)計(jì),自己查詢資料,自己寫代碼并維護(hù),一個(gè)小小的失誤都導(dǎo)致運(yùn)行出錯(cuò),由此每一個(gè)程序的錯(cuò)誤都記憶深刻,在設(shè)計(jì)

25、過程中必須萬分謹(jǐn)慎,牢記每個(gè)知識(shí)點(diǎn),這比書本上告訴我們的要來的高效得多。最后,感謝在本次設(shè)計(jì)幫助過我們的老師,同學(xué)。補(bǔ)充:完整代碼DA TA SEGMENTBUF DB 4 DUP(0 ;存儲(chǔ)隨機(jī)數(shù)。TABLE1 DB11101110B,0,11101101B,01H,11101011B,02H,11100111B,03H,11011110B,04H,11011101B,05H,11011011B,06H, 11010111B,07HDB10111110B,08H,10111101B,09H,10111011B,0AH,10110111B,0BH,01111110B,0CH,01111101B

26、,0DH,01111011B, 0EH,01110111B,0FH ;鍵值對應(yīng)表。TABLE2 DB 0,0C0H,01H,0F9H,05H,92H,06H,82H,0AH,88H,0CH,0C6H,0DH,0A1H,0EH,86H,0FH,8EHDB21H,8CH,22H,0A3H,10H,0C8H,11H,0F0H,12H,0C1H,13H,0C6H,14H,0F7H,15H,0CFH,16H,0FEH,17H,0 F9H ;鍵值對應(yīng)顯示表。TABLE3 DB 0,17H,1,11H,2,13H,3,15H,4,10H,5,12H,6,14H,7,16H ;定義偽隨機(jī)表SCANNUM DW

27、 9000 ;定義掃描次數(shù)。RESULT DW 0 ;定義成績。LED DB 11111010BDA TA ENDSSTACK SEGMENT STACKDW 256 DUP(? ;定義堆棧,預(yù)留256個(gè)單元。TOP LABEL WORD ;標(biāo)記棧頂。STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATAMOV DS,AX ;數(shù)據(jù)段段址送DS。MOV SS,AX ;堆棧段段址送SS。MOV SP,OFFSET TOP ;獲取堆棧指針。MOV DX,0EE03H ;DX指向8255的D口。MOV AL,1000

28、1001B ;工作方式狀態(tài)控制字,表示方式0,端口C輸出。OUT DX,AL ;完成8255初始化。STEP1:CALL FAR PTR RDNUM ;調(diào)用RDNUM生成隨機(jī)數(shù),存儲(chǔ)于BUF。LEA DI,BUF ;DI傳遞當(dāng)前正在比較的隨機(jī)數(shù)。MOV CX,4STEP2:CALL FAR PTR SCANNUM1 ;掃描鍵值,返回值存于BL。CALL FAR PTR CMPNUM ;比較數(shù)值。INC DI ;讀取下一個(gè)隨機(jī)數(shù)。LOOP STEP2;循環(huán)四次逐個(gè)鍵值掃描,比較。STEP3: ;將成績轉(zhuǎn)換對應(yīng)評分。MOV AX,RESULTCMP AL,4JE NICECMP AL,3JE GO

29、ODCMP AL,2JE PASSFAIL: ;成績小于2輸出FAIL。MOV AH,0FHMOV BUF0,AHMOV AH,0AHMOV BUF1,AHMOV AH,1HMOV BUF2,AHMOV BUF3,AHJMP STEP4PASS: ;成績?yōu)?輸出PASS。MOV AH,21HMOV BUF0,AHMOV AH,0AHMOV BUF1,AHMOV AH,5HMOV BUF2,AHMOV BUF3,AHJMP STEP4GOOD: ;成績?yōu)?輸出GOOD。MOV AH,6HMOV BUF0,AHMOV AH,22HMOV BUF1,AHMOV BUF2,AHMOV AH,0HMOV

30、 BUF3,AHJMP STEP4NICE: ;成績?yōu)?輸出NICE。MOV AH,10HMOV BUF0,AHMOV AH,1HMOV BUF1,AHMOV AH,0CHMOV BUF2,AHMOV AH,0EHMOV BUF3,AHJMP STEP4STEP4:STP5:CALL FAR PTR DISPLAY ;顯示評分。LOOP STP5 ;閃爍維持評分顯示。MOV AH,4CHINT 21HCODE ENDSCODE1 SEGMENTASSUME CS:CODE1RDNUM PROC FARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DI ;寄存器保護(hù)。DO1:

31、MOV AH,2CH ;2CH號功能調(diào)用,取系統(tǒng)時(shí)間:DL存放毫秒INT 21HMOV AL,DL ;將毫秒值除以5,調(diào)整隨機(jī)偏移量的取值在0-4之間。MOV AH,0MOV BL,5DIV BL ;AH是一個(gè)0-4的隨機(jī)數(shù)去查詢偽隨機(jī)表。LEA DI,TABLE3RDSCAN:MOV AL,DI ;將隨機(jī)表內(nèi)容放入AL。INC DIINC DI ;指向轉(zhuǎn)換表下一個(gè)查找字節(jié)。CMP AL,AH ;比較AL,AH。JNZ RDSCAN ;不等則繼續(xù)查找。MOV AL,DI-1 ;相等則開始查表對BUF賦值。MOV BUF0,ALMOV AL,DI+1MOV BUF1,ALMOV AL,DI+3M

32、OV BUF2,ALMOV AL,DI+5MOV BUF3,ALPOP DIPOP DXPOP CXPOP BXPOP AXRET ;返回。RDNUM ENDPCODE1 ENDSCODE2 SEGMENTASSUME CS:CODE2DISPLA Y PROC FARPUSH AXPUSH BXPUSH CXPUSH DXPUSH DIPUSH SI ;寄存器保護(hù)。MOV CX,4 ;循環(huán)顯示4個(gè)數(shù)碼管。LEA DI, BUF ;DI指向輸入的數(shù)據(jù)。MOV AH,00001000B ;(共陽管由左至右顯示。DO2:MOV BL,DI ;將輸入數(shù)據(jù)放入BL。LEA SI,TABLE2 ;SI指

33、向由BUF到LED數(shù)碼管的轉(zhuǎn)換表。MOV DX,0EE00H ;DX指向A口地址。MOV AL,0FFH ;顯示為空。OUT DX,AL ;將AL內(nèi)容顯示。DO3:MOV BH,SI ;將轉(zhuǎn)換表內(nèi)容(每相鄰兩個(gè)字節(jié)的第一字節(jié)放入BH。MOV DH,0FFHINC SIINC SI ;指向轉(zhuǎn)換表下一個(gè)查找字節(jié)。CMP BL,BH ;比較BL,BH。JNZ DO3 ;在轉(zhuǎn)換表中查找對應(yīng)值。MOV DX,0EE01H ;將DX指向B口。MOV AL,AH ;給AL賦值(應(yīng)顯示那個(gè)數(shù)碼管。OUT DX,AL ;控制哪個(gè)管顯示。MOV DX,0EE00H ;將DX指向A口。MOV AL,SI-1 ;查找

34、到的數(shù)碼管值寫入AL。OUT DX,ALDELAY: ;維持顯示,使數(shù)碼管數(shù)據(jù)顯示清晰。PUSH CXPUSH AXMOV AX,200REP1: ;用兩個(gè)循環(huán)來控制時(shí)延。MOV CX,1000REP2:LOOP REP2DEC AXCMP AX,0JNZ REP1;AX不為0繼續(xù)循環(huán)。POP AXPOP CXROR AH,1 ;循環(huán)左移。INC DI ;更換下一個(gè)顯示數(shù)據(jù)。LOOP DO2 ;POP SIPOP DIPOP DXPOP CXPOP BXPOP AXRETDISPLA Y ENDPCODE2 ENDSCODE3 SEGMENTASSUME CS:CODE3SCANNUM1 PR

35、OC FARPUSH AXPUSH CXPUSH DXPUSH DIPUSH SI ;寄存器保護(hù),將BX作為參數(shù)傳遞的方式,不壓棧。MOV CX,SCANNUM ;控制掃描循環(huán)次數(shù)。SCANLOOP1:CALL FAR PTR DISPLAY ;調(diào)用DISPLAY顯示隨機(jī)數(shù)。MOV AL,00001111BMOV DX,0EE05HAND AL,LEDOUT DX,AL ;74L374口高位置零。MOV DX,0EE02H ;控制C口。IN AL,DX ;將C口內(nèi)容讀到AL。AND AL,00001111B;取出AL低四位。CMP AL,00001111B ;判斷是否有鍵按下(無鍵按下時(shí)為全1。JE SCANLOOP3 ;無鍵值時(shí)跳轉(zhuǎn)。MOV AH,11101111B ;掃描第一行。SCANLOOP2:MOV AL,AH ;有鍵按下則開始掃描。MOV DX,0EE05HOUT DX,ALMOV DX,

溫馨提示

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

評論

0/150

提交評論