打字練習(xí)課程設(shè)計(jì)_第1頁(yè)
打字練習(xí)課程設(shè)計(jì)_第2頁(yè)
打字練習(xí)課程設(shè)計(jì)_第3頁(yè)
打字練習(xí)課程設(shè)計(jì)_第4頁(yè)
打字練習(xí)課程設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩20頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1.引言 匯編語(yǔ)言程序設(shè)計(jì)是電子信息類專業(yè)的重要基礎(chǔ)課程,是計(jì)算機(jī)應(yīng)用開(kāi)發(fā)人員必須接受的最重要的專業(yè)基礎(chǔ)訓(xùn)練之一,是計(jì)算機(jī)軟,硬件研究的基礎(chǔ),是一個(gè)優(yōu)秀計(jì)算機(jī)工作者必須掌握的基礎(chǔ)知識(shí)和基本技能。匯編語(yǔ)言也是計(jì)算機(jī)能夠提供給用戶的最快而又最有效的語(yǔ)言,也是能夠利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的唯一語(yǔ)言。因而,對(duì)程序的空間個(gè)時(shí)間的要求很高的場(chǎng)合,匯編語(yǔ)言的應(yīng)用時(shí)必不可少的。2.設(shè)計(jì)任務(wù)與要求1、隨機(jī)顯示一段字符(可含有字母和數(shù)字)2、根據(jù)屏幕顯示進(jìn)行打字練習(xí),出錯(cuò)時(shí)聲響報(bào)警3、打字完成后統(tǒng)計(jì)正確率和打字時(shí)間4、程序采用匯編語(yǔ)言在PC機(jī)上完成5、完成符合學(xué)校要求的設(shè)計(jì)說(shuō)明書(shū)3.設(shè)計(jì)方案 (1)

2、本次課程設(shè)計(jì)通過(guò)對(duì)8253 的設(shè)置,使之產(chǎn)生一定頻率的波形,將該波形輸出到中斷口IRQ。每次進(jìn)入中斷都刷新LED點(diǎn)陣上的字母顯示,從而控制打字練習(xí)的速度。通過(guò)改變8253的計(jì)數(shù)初值可以改變速度。(2)8253 通道1 工作于方式3,輸入1MHZ 的時(shí)鐘,設(shè)置分頻系數(shù)為1000,輸出1KHZ 的方波,此輸出作為通道0 的輸入時(shí)鐘。通道0 工作于方式3,分頻系數(shù)為 用戶輸入的速度等級(jí)×1000。 注:速度等級(jí):1-快速 2-中速 3-慢速(3)將8255 的A 口接到LED 點(diǎn)陣的COL18,C 口接到LED 點(diǎn)陣的ROW18,每當(dāng)進(jìn)入中斷,就把在數(shù)據(jù)段存好的字母的段碼送到A 口和C 口

3、,顯示相應(yīng)的字母。(4) 每個(gè)字母都需要分段循環(huán)顯示,利用人眼的視覺(jué)暫留便可看見(jiàn)點(diǎn)陣上顯示整個(gè)字母。(5)為避免中斷服務(wù)程序過(guò)長(zhǎng),在寫(xiě)中斷服務(wù)程序時(shí),只需要把中斷標(biāo)志置1即可,其余操作可在主程序中進(jìn)行。(6)在字母顯示期間,要不斷讀取按鍵輸入,直到按鍵正確或進(jìn)入下一次中斷(即表示該字母的出現(xiàn)時(shí)間已經(jīng)結(jié)束),準(zhǔn)備出現(xiàn)下一個(gè)字母。(7)在字母顯示期間,若讀入的按鍵是錯(cuò)誤的,則在屏幕上顯示“錯(cuò)誤”,并繼續(xù)顯示該字母,等待按鍵或中斷;若未能在字母消失前按下正確的鍵,則在屏幕上顯示“超時(shí)”,并顯示下一個(gè)字母;若在字母消失前按下正確的鍵,則在屏幕上顯示“正確”,往A 口和C 口輸出00H,使字母消失,分?jǐn)?shù)

4、加1,并準(zhǔn)備顯示下一個(gè)字母。(8)在字母顯示期間,若按鍵輸入是<ESC>鍵則結(jié)束本次游戲。每次游戲結(jié)束后進(jìn)入等待按鍵的狀態(tài)按<ESC>鍵退出程序,按<空格>鍵則開(kāi)始下一次游戲。4.硬件說(shuō)明4.1 8255A介紹 8255A是Intel公司生產(chǎn)的為x86系列CPU配套的可編程并行接口芯片,也可以用于其他微處理器系統(tǒng)中。通過(guò)對(duì)它進(jìn)行編程,芯片可工作于不同的工作方式。在微型計(jì)算機(jī)系統(tǒng)中,用8255A作接口時(shí),通常不需要附加外部邏輯電路就可直接為CPU提供數(shù)據(jù)通道,因此得到了極為廣泛的應(yīng)用。B 組控制部件內(nèi)部DB(8)數(shù)據(jù)總線緩沖器讀/寫(xiě)控制邏輯A0A組端口A(8)

5、A組端口C(高4位)B組端口C(低4位)B組端口B(8)A 組控制控制部件部件件PA7PA0PC7PC4PC3PC0PB7PB0D7D0CSA1RDWR 圖1 8255A內(nèi)部結(jié)構(gòu)框圖RESET 8255A的內(nèi)部結(jié)構(gòu)框圖如上圖所示,其內(nèi)部由以下四部分組成。 (1) 端口A、端口B和端口C端口A、端口B和端口C都是8位端口,可以選擇作為輸入或輸出。還可以將端口C的高4位和低4位分開(kāi)使用,分別作為輸入或輸出。當(dāng)端口A和端口B作為選通輸入或輸出的數(shù)據(jù)端口時(shí),端口C的指定位與端口A和端口B配合使用,用做控制信號(hào)或狀態(tài)信號(hào)。 (2) A組控制和B組控制部件這兩組控制部件有兩個(gè)功能:一是接收來(lái)自芯片內(nèi)部數(shù)據(jù)

6、總線上的控制字;二是接收來(lái)自讀寫(xiě)控制邏輯電路的讀寫(xiě)命令,以此來(lái)決定兩組端口的工作方式和讀寫(xiě)操作。(3)數(shù)據(jù)總線緩沖器它是一個(gè)雙向三態(tài)的8位數(shù)據(jù)緩沖器,8255A正是通過(guò)它與系統(tǒng)數(shù)據(jù)總線相連。輸入數(shù)據(jù)、輸出數(shù)據(jù)、CPU發(fā)給8255A的控制字都是通過(guò)該部件傳遞的。(4) 讀寫(xiě)控制邏輯電路讀/寫(xiě)控制邏輯電路的功能是負(fù)責(zé)管理8255A的數(shù)據(jù)傳輸過(guò)程。它接收CS及來(lái)自地址總線的信號(hào)A1、A0(在8086總線中為A2、A1)和控制總線的信號(hào)RESET、WR、RD,將它們組合后,得到對(duì)A組控制部件和B組控制部件的控制命令,并將命令送給這兩個(gè)部件,再由它們完成對(duì)數(shù)據(jù)信息,狀態(tài)信息和控制信息的傳輸。4.2 82

7、53A介紹 8253A是可編程定時(shí)計(jì)數(shù)器,它是Intel公司專為x86系列CPU配置的外圍接口芯片。它在微機(jī)系統(tǒng)中可用作定時(shí)器和計(jì)數(shù)器。定時(shí)時(shí)間與計(jì)數(shù)次數(shù)由用戶事先設(shè)定。 圖2 8253A內(nèi)部結(jié)構(gòu)框圖 四大部分:數(shù)據(jù)總線緩沖器、讀寫(xiě)控制邏輯、控制字寄存器以及三個(gè)獨(dú)立的16位的計(jì)數(shù)器通道。這三個(gè)計(jì)數(shù)器分別是計(jì)數(shù)器0通道、計(jì)數(shù)器1通道和計(jì)數(shù)器2通道。(1)數(shù)據(jù)總線緩沖器:8位的雙向三態(tài)緩沖器。用于暫存數(shù)據(jù),使用在以下幾個(gè)方面:CPU在初始化編程時(shí),向8253寫(xiě)入控制字。CPU向某一通道寫(xiě)計(jì)數(shù)初值。CPU從某一通道讀計(jì)數(shù)初值。(2)讀寫(xiě)控制邏輯電路:接受輸入的RD、WR、CS、A1、A0等信號(hào)組合產(chǎn)

8、生出對(duì)8253要執(zhí)行的操作,見(jiàn)操作表。(3)控制字寄存器:只能寫(xiě)入,不能讀出。8初始化編程時(shí),寫(xiě)入控制字決定通道的工作方式。(4)3個(gè)計(jì)數(shù)器:分別為0、1和2,是3個(gè)獨(dú)立的計(jì)數(shù)定時(shí)通道,都可按不同的方式工作。每個(gè)計(jì)數(shù)器內(nèi)部都包含一個(gè)16位的預(yù)置初始值寄存器。一個(gè)可預(yù)置數(shù)減法計(jì)數(shù)器和一個(gè)鎖存器。5設(shè)計(jì)流程5.1總流程圖開(kāi)始段地址初始化隨機(jī)產(chǎn)生字符串打開(kāi)窗口將產(chǎn)生的字符串輸出到屏幕上開(kāi)始打字輸入字符退出打字顯示結(jié)果 結(jié)束字是否打完?字符數(shù)為65?NYYN圖3 總程序流程圖3.2 各功能模塊及流程圖 輸出正確率模塊,計(jì)算打字時(shí)間并輸出模塊 圖4 輸出正確率模塊流程圖5 打字時(shí)間計(jì)算并輸出流程圖6.程

9、序調(diào)試運(yùn)行圖1 打字程序開(kāi)始圖2 輸入正確的字符圖3 輸入錯(cuò)誤的字符圖4 打字練習(xí)結(jié)束調(diào)試過(guò)程說(shuō)明: 程序運(yùn)行開(kāi)始,隨機(jī)出現(xiàn)字符,并且計(jì)時(shí)開(kāi)始,同時(shí)顯示錯(cuò)誤數(shù)與正確數(shù)。當(dāng)輸入的字字符全部正確時(shí),程序正常運(yùn)行,當(dāng)輸入錯(cuò)誤字符時(shí),屏幕顯示錯(cuò)誤字符為紅色,并發(fā)出“嘟”“嘟”的報(bào)警聲,但按BACKSPACE鍵可以取消當(dāng)前所輸入的字符,重新輸入。輸入完所有字符后(包括正確的與錯(cuò)誤的),打字練習(xí)結(jié)束,顯示本次練習(xí)所用時(shí)間,正確字符數(shù)以及正確率。如上圖3所示,總共有65個(gè)字符,用時(shí)3分38秒,正確率為47.69%。打字練習(xí)結(jié)束,按任意鍵結(jié)束程序運(yùn)行。5源程序代碼COLORCHAR MACRO char,co

10、lor push ax push bx push cx push dx mov ah,9h;在光標(biāo)位置顯示字符和字符屬性 mov al,char;AL字符 mov bh,0;顯示頁(yè) mov bl,color;字符屬性 mov cx,1;字符重復(fù)個(gè)數(shù) int 10h mov ah,03h;讀光標(biāo)位置 ;DH:DL=行:列 mov bh,0;顯示頁(yè)號(hào) int 10h mov ah,02;置光標(biāo)位置 inc dl;列 int 10h pop dx pop cx pop bx pop axENDM;-BACKCHAR MACRO char,color mov ah,02h; mov dl,08h;退格

11、 int 21h COLORCHAR char,colorENDM;-CLEAR MACRO alz,bhz,chz,clz,dhz,dlz;清屏窗口 push ax push bx push cx push dx mov al,alz;上卷行數(shù) mov bh,bhz;卷入行屬性 mov ch,chz;左上角行數(shù) mov cl,clz;左上角列數(shù) mov dh,dhz;左下角行數(shù) mov dl,dlz;左下角列數(shù) mov ah,06h int 10h pop dx pop cx pop bx pop axENDM;-;-SETGB MACRO bhz,dhz,dlz;設(shè)置光標(biāo)位置 push a

12、x push bx push cx push ax mov bh,bhz;顯示頁(yè)號(hào) mov dh,dhz;行 mov dl,dlz;列 mov ah,2;置光標(biāo)位置 int 10h pop dx pop cx pop bx pop axENDM;-READGB MACRO bhz;讀光標(biāo)位置 push ax push bx push cx push dx mov bh,bhz;顯示頁(yè)號(hào) mov ah,03h;讀光標(biāo)位置 int 10h mov gbattr0,dh;記錄光標(biāo)行 mov gbattr1,dl;記錄光標(biāo)列 pop dx pop cx pop bx pop axENDM;-LINEF

13、ULL MACRO lmax,lact push ax push bx push cx push dx mov ax,lact cmp ax,0 jz LFEXIT mov dx,0 cwd mov bx,lmax div bx cmp dx,0 jz LNFU jmp LFEXITLNFU: mov FullFlag,1LFEXIT: pop dx pop cx pop bx pop axENDM;-TISHI MACRO row,col,addrr push ax push dx SETGB 0,row,col;設(shè)置光標(biāo)位置 mov ah,09h lea dx,addrr int 21h

14、pop dx pop axENDM;-data segment addrr db 400 dup('$') addrr1 db 'abcdefghijklmnopqrstuvwxyz0123456789$' addrr2 db 400 dup('$') Anumber dw 0 ;總字符個(gè)數(shù) Rnumber dw 0 ;正確字符個(gè)數(shù) LineMax dw 0 ;滿行的字符數(shù) LineAct dw 0 ;當(dāng)前行字符數(shù) FullFlag db 0 ;滿行標(biāo)志FullFlag=1滿行,F(xiàn)ullFlag=0未滿 gbattr db 2 dup(0) ;存

15、放字符所在行列 Stime db 3 dup(0) temp db 5 dup(0) ts1 db 'Stime:$' ts2 db 'Rrate:$' ts3 db 'Total Use-Time:$' ts4 db 'Total Characters:$' ts5 db 'Correct-Reta:$' ts6 db 'Press any key to end!$' ts7 db 'An ESC Jian KeYi SuiShi TuiChu!$' ts8 db '*Da

16、Zi LianXi*$'data endscode segment assume ds:data,cs:codestart: mov ax,data mov ds,ax;- mov di,0 ;隨機(jī)產(chǎn)生字符 mov bx,65 zifu: mov ah,2ch int 21h mov al,dl cbw mov si,ax cmp si,35 ja zifu mov al,addrr1si mov addrrdi,al inc di dec bx push di push si mov di,400hAa1: mov si,0ffffhAa2: dec si jnz Aa2 dec d

17、i jnz Aa1 pop si pop di cmp bx,0 jnz zifu ;- CLEAR 0,57h,0,10,23,69 CLEAR 0,17H,3,12,22,66 CLEAR 0,70h,4,14,22,64 CLEAR 0,25H,12,14,14,64 CLEAR 0,70h,13,18,13,35 CLEAR 0,70H,13,43,13,60;- SETGB 0,0,30 ;輸出上面提示語(yǔ)句 CLEAR 0,25h,0,28,0,49 CLEAR 0,25h,2,23,2,54 CLEAR 0,57h,1,14,1,64 mov ah,09h lea dx,ts8 i

18、nt 21h SETGB 0,2,24 mov ah,09h lea dx,ts7 int 21h ;- SETGB 0,4,14 mov di,0 mov cx,0ffffhAD: mov dl,addrrdi ;裝載字符 cmp dl,'$' jz A2 push dx mov bp,di CALL isFullLine pop dx mov ah,02h int 21h inc di loop ADA2: mov ah,2ch ;取系統(tǒng)時(shí)間 int 21h mov Stime0,ch mov Stime1,cl mov Stime2,dh SETGB 0,15,14 CA

19、LL TONGJI mov cx,0ffffh mov di,0hAS: cmp addrrdi,'$' jnz ASnt00 jmp AENDASnt00: mov bp,di CALL isFullLine mov bp,di CALL clew_char ;改變字符顏色;=reinput: ;輸入字符開(kāi)始打字 READGB 0 mov ah,01 int 21h cmp al,27 ;是否退出 jnz al27nt jmp exit;-al27nt: cmp al,0dh jnz al0dnt SETGB 0,gbattr0,gbattr1 jmp reinputal0d

20、nt: cmp al,08 jnz ASnext cmp gbattr1,14 jnz ASnz SETGB 0,gbattr0,gbattr1 jmp reinputASnz: mov ah,02h mov dl,' ' int 21h mov ah,02h mov dl,08h int 21h dec di dec Anumber push ax mov al,addrr2di cmp al,addrrdi jnz AS1nt dec RnumberAS1nt: pop ax CALL TONGJI mov bp,di CALL clew_char ;改變字符顏色 jmp

21、reinput ;-;= ASnext: inc Anumber CALL TONGJI mov addrr2di,al cmp al,addrrdi jnz AER inc Rnumber CALL TONGJIA3: inc di loop AS1 ;直接跳太遠(yuǎn)AS1: jmp ASAEND: jmp exitAER: mov temp1,al BACKCHAR temp1,74h jmp A3exit: CLEAR 0,07,8,16,17,63 CLEAR 0,57,10,20,15,59 TISHI 11,24,ts3 call UseTimeAndOut TISHI 12,24,t

22、s4 mov bx,Anumber call btod_out TISHI 13,24,ts5 call RightRata_out TISHI 14,30,ts6 mov ah,08 int 21h mov ah,4ch int 21h;-RightRata_out proc near ;輸出正確率 push ax push bx push cx push dx mov ax,Rnumber;正確字符個(gè)數(shù) mov cx,100 mul cx div Anumber ;字符總數(shù) mov bx,ax CALL btod_out push dx mov ah,02h mov dl,'.&#

23、39; int 21h pop dx mov ax,dx mul cx div Anumber mov bx,ax CALL btod_out mov ah,2h mov dl,'%' int 21h pop dx pop cx pop bx pop ax retRightRata_out endp;-UseTimeAndOut proc near ;計(jì)算打字時(shí)間并輸出 mov ah,2ch int 21h sub dh,Stime2 jns SecUnBlow jz SecUnBlow add dh,60 dec clSecUnBlow: sub cl,Stime1 jns

24、MinUnBlow jz SecUnBlow add cl,60 dec chMinUnBlow: sub ch,Stime0 CALL OutTime retUseTimeAndOut endp;-OutTime proc near ;顯示時(shí)間ch:cl:dh mov al,ch cbw mov bx,ax CALL btod_out mov ah,02h mov dl,':' int 21h mov al,cl cbw mov bx,ax CALL btod_out mov ah,02h mov dl,':' int 21h mov al,dh cbw mo

25、v bx,ax CALL btod_out retOutTime endp;-TONGJI proc near ;記錄當(dāng)前時(shí)間和正確個(gè)數(shù)及已打個(gè)數(shù) push ax push bx push cx push dx READGB 0 SETGB 0,13,20 CLEAR 0,70h,13,18,13,35 mov ah,09h lea dx,ts1 int 21h mov ah,2ch int 21h call UseTimeAndOut SETGB 0,13,45 mov ah,09h lea dx,ts2 int 21h mov ax,Rnumber mov bx,ax call btod_

26、out mov ah,2h mov dl,'/' int 21h mov ax,Anumber mov bx,ax call btod_out SETGB 0,gbattr0,gbattr1 pop dx pop cx pop bx pop ax retTONGJI endp;-btod_out proc near ;輸出BX中內(nèi)容 把數(shù)據(jù)打印輸出 push ax push cx push dx push bp mov ax,bx mov si,3rota1: mov bl,10 div bl mov tempsi,ah and ax,00ffh dec si cmp si,0

27、 jnz rota1 mov bp,1 mov si,1rota2: mov dl,tempsi add dl,'0' cmp dl,'0' jz btodeal mov bp,0btrt1: mov ah,02h int 21hbtrt2: inc si cmp si,3 jna rota2;- 全部為0時(shí)輸出一個(gè)0 cmp bp,1 jnz RT mov ah,2h int 21h;- jmp RTbtodeal: cmp bp,1 jz btrt2 jmp btrt1RT: pop bp pop dx pop cx pop ax retbtod_out e

28、ndp ;-isFullLine proc near ;滿行后換行 push ax push bx mov ah,gbattr0 mov al,gbattr1 mov LineMax,51 ;滿行時(shí)為51個(gè)字符 mov LineAct,bp LINEFULL LineMax,LineAct ;判斷是否滿行 mov bl,FullFlag ;滿行時(shí)為FullFlag= 1 cmp bl,0 jz isfexit READGB 0 ;讀光標(biāo)位置 add gbattr0,1 sub gbattr1,51 SETGB 0,gbattr0,gbattr1;設(shè)置光標(biāo)位置 mov FullFlag,0 ;滿

29、行標(biāo)志置0isfexit: mov gbattr0,ah ;記錄光標(biāo)當(dāng)前位置 mov gbattr1,al pop bx pop ax retisFullLine endp;-clew_char proc near ;改變字符顏色 push ax push bx push cx push dx push si READGB 0 mov ax,bp mov bl,51 div bl mov dh,4 mov dl,14 add dh,al add dl,ah mov temp0,dh mov temp1,dl SETGB 0,temp0,temp1 COLORCHAR addrrbp,70h c

30、mp bp,0 jz resetgb cmp temp1,14 jz clew2 sub temp1,1clew1: mov bx,bp dec bx SETGB 0,temp0,temp1 COLORCHAR addrrbx,5eh jmp resetgbclew2: sub temp0,1 add temp1,50 jmp clew1resetgb: SETGB 0,gbattr0,gbattr1 pop si pop dx pop cx pop bx pop ax retclew_char endp;-code ends end start6.設(shè)計(jì)心得本次設(shè)計(jì)中,可以說(shuō)是一次對(duì)自己能力與學(xué)習(xí)結(jié)果的考驗(yàn)。在我們學(xué)完了微機(jī)原理及其接口技術(shù)這門(mén)課的基礎(chǔ)上來(lái)搞這個(gè)設(shè)計(jì),通過(guò)設(shè)計(jì)后,使我們對(duì)這門(mén)課的理論知識(shí)的理解有很大程度上的加強(qiáng)。微機(jī)原理這門(mén)課

溫馨提示

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