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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

10、lor push ax push bx push cx push dx mov ah,9h;在光標位置顯示字符和字符屬性 mov al,char;AL字符 mov bh,0;顯示頁 mov bl,color;字符屬性 mov cx,1;字符重復個數(shù) int 10h mov ah,03h;讀光標位置 ;DH:DL=行:列 mov bh,0;顯示頁號 int 10h mov ah,02;置光標位置 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;設置光標位置 push a

12、x push bx push cx push ax mov bh,bhz;顯示頁號 mov dh,dhz;行 mov dl,dlz;列 mov ah,2;置光標位置 int 10h pop dx pop cx pop bx pop axENDM;-READGB MACRO bhz;讀光標位置 push ax push bx push cx push dx mov bh,bhz;顯示頁號 mov ah,03h;讀光標位置 int 10h mov gbattr0,dh;記錄光標行 mov gbattr1,dl;記錄光標列 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;設置光標位置 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 ;總字符個數(shù) Rnumber dw 0 ;正確字符個數(shù) LineMax dw 0 ;滿行的字符數(shù) LineAct dw 0 ;當前行字符數(shù) FullFlag db 0 ;滿行標志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 ;隨機產(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 ;輸出上面提示語句 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)時間 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: ;輸入字符開始打字 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 ;直接跳太遠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;正確字符個數(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 ;計算打字時間并輸出 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 ;顯示時間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 ;記錄當前時間和正確個數(shù)及已打個數(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時輸出一個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 ;滿行時為51個字符 mov LineAct,bp LINEFULL LineMax,LineAct ;判斷是否滿行 mov bl,FullFlag ;滿行時為FullFlag= 1 cmp bl,0 jz isfexit READGB 0 ;讀光標位置 add gbattr0,1 sub gbattr1,51 SETGB 0,gbattr0,gbattr1;設置光標位置 mov FullFlag,0 ;滿

29、行標志置0isfexit: mov gbattr0,ah ;記錄光標當前位置 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.設計心得本次設計中,可以說是一次對自己能力與學習結果的考驗。在我們學完了微機原理及其接口技術這門課的基礎上來搞這個設計,通過設計后,使我們對這門課的理論知識的理解有很大程度上的加強。微機原理這門課

溫馨提示

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

評論

0/150

提交評論