基于8086與Proteus仿真44鍵盤計(jì)算器設(shè)計(jì)_第1頁
基于8086與Proteus仿真44鍵盤計(jì)算器設(shè)計(jì)_第2頁
基于8086與Proteus仿真44鍵盤計(jì)算器設(shè)計(jì)_第3頁
基于8086與Proteus仿真44鍵盤計(jì)算器設(shè)計(jì)_第4頁
基于8086與Proteus仿真44鍵盤計(jì)算器設(shè)計(jì)_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、基于8086與Proteus仿真的4*4鍵盤計(jì)算器的設(shè)計(jì)一、設(shè)計(jì)目的本次課程設(shè)計(jì)的實(shí)驗(yàn)?zāi)康氖峭ㄟ^該實(shí)驗(yàn)掌握較復(fù)雜程序的設(shè)計(jì)。能夠獨(dú)立完成用程序?qū)?086、8255控制鍵盤和LED顯示的控制,完成計(jì)算器加減法的應(yīng)用。獨(dú)立編寫程序,明白和掌握程序的原理和實(shí)現(xiàn)方式。為以后的設(shè)計(jì)提供經(jīng)驗(yàn)。學(xué)習(xí)和掌握計(jì)算機(jī)中常用接口電路的應(yīng)用和設(shè)計(jì)技術(shù),充分認(rèn)識理論知識對應(yīng)用技術(shù)的指導(dǎo)性作用,進(jìn)一步加強(qiáng)理論知識與應(yīng)用相結(jié)合的實(shí)踐和鍛煉。通過這次設(shè)計(jì)實(shí)踐能夠進(jìn)一步加深對專業(yè)知識和理論知識學(xué)習(xí)的認(rèn)識和理解,使自己的設(shè)計(jì)水平和對所學(xué)的知識的應(yīng)用能力以及分析問題解決問題的能力得到全面提高。二、 設(shè)計(jì)內(nèi)容 設(shè)計(jì)計(jì)算器,要求至少能

2、完成多位數(shù)的加減乘除運(yùn)算。獨(dú)立完成用程序?qū)?086、8255控制鍵盤和LED顯示的控制,完成計(jì)算器加減乘除的應(yīng)用。三、 設(shè)計(jì)原理與硬件電路設(shè)計(jì)的思路是:首先利用程序不斷掃描鍵盤是不是有輸入,如果沒有就一直掃描,如果有就停止掃描,完成輸入,利用匯編的程序核對輸入鍵的數(shù)值,通過調(diào)用子程序完成數(shù)據(jù)的儲存或者是加減的運(yùn)算。運(yùn)算完成后將運(yùn)算的結(jié)果儲存并顯示到LED顯示器上。各部分硬件功能: 可編程并行通信接口芯片8255A 8255A內(nèi)部結(jié)構(gòu):1. 并行輸入/輸出端口A,B,C 8255A內(nèi)部包括三個(gè)8位的輸入輸出端口,分別是端口A、端口B、端口C,相應(yīng)信號線是PA7PA0、PB7PB0、PC7PC0。

3、端口都是8位,都可以作為輸入或輸出。通常將端口A和端口B定義為輸入/輸出的數(shù)據(jù)端口,而端口C則既可以作數(shù)據(jù)端口,又可以作為端口A和端口B的狀態(tài)和控制信息的傳送端口。2.A組和B組控制部件端口A和端口C的高4位(PC7PC4)構(gòu)成A組;由A組控制部件實(shí)現(xiàn)控制功能。 端口B和端口C的低4位(PC3PC0)構(gòu)成B組;由B組控制部件實(shí)現(xiàn)控制功能。 A組和B組利用各自的控制單元來接收讀寫控制部件的命令和CPU通過數(shù)據(jù)總線(D0D7)送來的控制字,并根據(jù)他們來定義各個(gè)端口的操作方式。3. 數(shù)據(jù)總線緩沖存儲器三態(tài)雙向8位緩沖器,是8255A與8086CPU之間的數(shù)據(jù)接口。與I/O操作有關(guān)的數(shù)據(jù)、控制字和狀態(tài)

4、信息都是通過該緩沖器進(jìn)行傳送。4. 讀/寫控制部件 8255A完成讀/寫控制功能的部件。能接收CPU的控制命令,并根據(jù)控制命令向各個(gè)功能部件發(fā)出操作指令。CS 片選信號:由CPU輸入,有效時(shí)表示該8255A被選中。 RD, WR 讀、寫控制信號:由CPU輸入。RD有效表示CPU讀8255A,WR有效表示CPU寫8255A。RESET 復(fù)位信號:由CPU輸入。RESET信號有效,清除8255A中所有控制字寄存器內(nèi)容,并將各個(gè)端口置成輸入方式。定義工作方式控制字:工作方式0:8255A中各端口的基本輸入/輸出方式。5.鍵盤輸入模塊鍵盤是常用信息輸入元件,其實(shí)鍵盤也是由一個(gè)個(gè)按鈕組成,如果是獨(dú)立按鈕

5、的話必須要需要一個(gè)I/O口對它進(jìn)行檢測,而鍵盤往往這需要鍵盤按鈕數(shù)一半的I/O口數(shù)對它進(jìn)行檢測,也許對一個(gè)比較簡單的系統(tǒng)I/O口數(shù)一般不是問題,但對于一個(gè)大型、復(fù)雜的系統(tǒng)來說I/O資源就顯得非常珍貴了,盡量減少I/O使用是非常利于降低成本,另外一方面鍵盤比用獨(dú)立按鍵要美觀,這也是鍵盤能夠長期得到人們青睞的原因,可是硬件上的節(jié)省必然導(dǎo)致軟件上編程的復(fù)雜,那就來看看鍵盤到底使軟件編程有多復(fù)雜?下圖是一個(gè)4*4鍵盤的結(jié)構(gòu)圖,它是四條I/O線作為行線,四條I/O線作為列線組成的鍵盤。在鍵盤的行線和列線的每一個(gè)交點(diǎn)上,設(shè)置一個(gè)按鍵,這樣鍵盤中按鍵的個(gè)數(shù)是4*4個(gè)。這種行列式鍵盤結(jié)構(gòu)能夠有效地提高單盤及系

6、統(tǒng)中I/O口的利用率。于是將鍵盤接8255A的PC口,至于為什么選擇PC是有原因的,進(jìn)行鍵盤掃描一般要求有一部分的I/O口的工作方式是輸入,另一部分I/O是輸出,具體到4*4鍵盤則要求4個(gè)I/O口輸入,另外4個(gè)輸出,這一點(diǎn)PC口剛好符合,而PA、PB口要么全部輸入或輸出,所以只能是PC口接鍵盤。4*4鍵盤結(jié)構(gòu)圖五、設(shè)計(jì)流程圖六、實(shí)驗(yàn)程序 DATA SEGMENT X DB ?,?,?,? ;存放數(shù)據(jù)的每一位 X1 DW ? ;存放第一個(gè)數(shù)據(jù)值 X2 DW ? ;存放第二個(gè)數(shù)據(jù)值 Y DW ? ;存放運(yùn)算結(jié)果 S DB ? ;存放運(yùn)算符號值 E DB ? ;按下等號鍵標(biāo)記 CC DB ? ;存放

7、運(yùn)算數(shù)據(jù)位數(shù) H DB 0 ;存放按鍵行號 L DB 0 ;存放按鍵列號 DISCODE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;段碼表DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,90H ;設(shè)置為A口輸入,B口輸出,C口輸出 OUT 46H,AL MOV DI,OFFSET X+3 ;DI指向X的高位 KKK: CALL KEY ;掃描按鍵 JMP KKK;以下為按鍵掃描子程序,程

8、序返回后,在變量H和L中存放當(dāng)前按鍵的行列號KEY PROC CHECK: CALL DISP ;等待按鍵按下的同時(shí)進(jìn)行顯示 MOV AL,0F0H ;所有行輸出低電平 OUT 44H,AL IN AL,40H CMP AL,0FFH ;讀列值 JZ CHECK ;若都為高電平則無鍵按下,等待 MOV CX,50 LOOP $ ;延時(shí)消抖 IN AL,DX ;重讀列值 CMP AL,0FFH JZ CHECK ;無鍵按下一直等待 MOV H,0 ;有鍵按下,先把行列號變量清0 MOV L,0 MOV BL,01H MOV BH,0FEH ;掃描法讀鍵值:從第一行開始測試,即PC0輸出低電平 N

9、EXT: MOV AL,BH OUT 44H,AL NEXTH: IN AL,40H ;讀列值,判斷是第幾列有鍵按下 TEST AL,BL ;從第一列開始判斷 JZ WAIT0 ROL BL,1 CMP BL,10H ;當(dāng)前行狀態(tài)下沒有任何列有鍵按下,則轉(zhuǎn)為對下一行的測試 JZ NEXTL INC H ;每判斷一列,列號加1 JMP NEXTH ;再對下一列進(jìn)行判斷 NEXTL: MOV H,0 MOV BL,01H ROL BH,1 ;對下一行測試,讓下一個(gè)PC口輸出低電平 CMP BH,0EFH JZ EXIT INC L JMP NEXTWAIT0: IN AL,40H ;若有鍵按下,則

10、等該按鍵松開后再計(jì)算鍵值 CMP AL,0FFH JNZ WAIT0 MOV CX,50 LOOP $ ;延時(shí)消抖 IN AL,40H CMP AL,0FFH JNZ WAIT0 CALL KEYVALUE ;調(diào)計(jì)算鍵值子程序 EXIT: RET KEY ENDP ;以下為計(jì)算鍵值子程序,通過行列號計(jì)算鍵值(鍵值=列號*4+行號) ;鍵值存放在DL寄存器中 KEYVALUE PROC MOV DL,L MOV DH,H SHL DL,1 SHL DL,1 ;列號乘4 ADD DL,DH CMP DL,9 ;按下的是數(shù)字鍵 JNG NUM_CALL CMP DL,14 JL CONT_CALL

11、;按下的是運(yùn)算鍵 CMP DL,14 JZ OUTP_CALL ;按下的是等于鍵 CMP DL,15 JZ CLR_CALL ;按下的是清除鍵 NUM_CALL: CALL NUMBER ;調(diào)數(shù)字鍵處理子程序 JMP EXIT1 CONT_CALL: MOV S,DL ;存放運(yùn)算鍵的鍵值 MOV E,0 CALL COUNT ;調(diào)運(yùn)算鍵處理子程序,計(jì)算第一個(gè)加數(shù) JMP EXIT1 OUTP_CALL: CALL OUTP ;調(diào)等號鍵處理子程序 JMP EXIT1 CLR_CALL: CALL CLEAR ;調(diào)清除鍵處理子程序 EXIT1: RET KEYVALUE ENDP ;以下為清除鍵處

12、理子程序,按下清除鍵后,X變量全部清0 CLEAR PROC MOV X3,0 MOV X2,0 MOV X1,0 MOV X0,0 CALL BITP RET CLEAR ENDP;以下為等號鍵處理子程序,該子程序負(fù)責(zé)將第二個(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來存入X2變量;并根據(jù)運(yùn)算符號,調(diào)用相應(yīng)的運(yùn)算子程序 OUTP PROC PUSH AX PUSH DX PUSH BX INC E CALL COUNT ;調(diào)運(yùn)算鍵處理子程序,計(jì)算第二個(gè)運(yùn)算數(shù)據(jù) CMP S,10 JZ ADD_CALL ;運(yùn)算符為加號,則調(diào)用加法子程序 CMP S,11 JZ SUB_CALL ;運(yùn)算符為減號,則調(diào)用減法子程序 C

13、MP S,12 JZ MUL_CALL ;運(yùn)算符為乘號,則調(diào)用乘法子程序 CMP S,13 CALL DIVP ;運(yùn)算符為除號,則調(diào)用除法子程序 JMP STORE1 ADD_CALL: CALL ADDP JMP STORE1 SUB_CALL: CALL SUBP JMP STORE1 MUL_CALL: CALL MULP STORE1: MOV AX,Y ;以下程序?qū)⒏鬟\(yùn)算子程序返回的運(yùn)算結(jié)果,按位分解,送入X變量 MOV DX,0 MOV BX,1000 DIV BX MOV X0, AL MOV AX,DX MOV BL,100 DIV BL MOV X1,AL MOV AL,AH

14、 MOV AH,0 MOV BL,10 DIV BL MOV X2,AL MOV X3,AH POP BX POP DX POP AX RET OUTP ENDP;以下為運(yùn)算鍵處理子程序,該程序?qū)⒌谝粋€(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來并存入X1變量;或者將第二個(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來并存入X2變量;將運(yùn)算符的值存入S變量 COUNT PROC PUSH AX PUSH BX PUSH DX MOV DX,0 CALL BITP ;測試X中的數(shù)據(jù)是多少位 CMP CC,4 ;輸入的數(shù)據(jù)是4位數(shù) ? JZ C4 CMP CC,3 ;輸入的數(shù)據(jù)是3位數(shù) ? JZ C3 CMP CC,2 ;輸入的數(shù)據(jù)是2位數(shù)

15、? JZ C2 JMP C1 ;輸入的數(shù)據(jù)是1位數(shù) ? C4: MOV AX,0 MOV AL,X0 MOV BX,1000 MUL BX MOV DX,AX C3: MOV AL,X1 MOV BL,100 MUL BL ADD DX,AX C2: MOV AL,X2 MOV BL,10 MUL BL ADD DX,AX C1: MOV AL,X3 MOV AH,0 ADD DX,AX CMP E,1 JNZ X1_S MOV X2,DX ;按下的是等號,則將第二個(gè)運(yùn)算數(shù)據(jù)的值存入X2變量 JMP EXIT3 X1_S: MOV X1,DX ;按下的是運(yùn)算符號,則將第一個(gè)運(yùn)算數(shù)據(jù)的值存X1變

16、量 MOV X3,0 ;清空X變量 MOV X2,0 MOV X1,0 MOV X0,0 EXIT3: POP DX POP BX POP AX RET COUNT ENDP;以下為數(shù)字鍵處理子程序;該程序,將輸入的數(shù)據(jù)按位存放在X變量中,并由CC記錄數(shù)據(jù)的位數(shù) NUMBER PROC CMP E,1 JNZ CONTINUE MOV E,0 CALL CLEAR CONTINUE: CMP CC,0 ;目前數(shù)據(jù)為0位,即沒有數(shù)據(jù),則轉(zhuǎn)到SSS JZ SSS;若已有數(shù)據(jù),以下程序?qū)左移8位。;例如:先輸入“1”,當(dāng)再輸入2時(shí),;先要將“1”從個(gè)位移到十位,然后再將“2”存放到個(gè)位 PUSH

17、AX PUSH DX MOV AL,X3 MOV AH,X2 MOV DL,X1 MOV DH,X0 MOV CX,8 LL: SHL AX, 1 RCL DX,1 LOOP LL MOV X3,AL MOV X2,AH MOV X1,DL MOV X0,DH POP DX POP AX SSS: MOV DI,DL ;將當(dāng)前鍵入的數(shù)據(jù)存放到X的最低位 INC CC ;數(shù)據(jù)位數(shù)加1 CMP CC,4 ;判斷數(shù)據(jù)位數(shù) JNG EXIT2 MOV CC,0 ;如果數(shù)據(jù)超過4位,重新從最低位開始存放 MOV X2,0 MOV X1,0 MOV X0,0 EXIT2: CALL DISP ;調(diào)顯示子程

18、序,顯示輸入的數(shù)據(jù) RET NUMBER ENDP ;加法子程序 ADDP PROC PUSH AX MOV AX,X1 ADD AX,X2 MOV Y,AX POP AX RET ADDP ENDP;減法子程序 SUBP PROC PUSH AX MOV AX,X1 SUB AX,X2 MOV Y,AX POP AX RET SUBP ENDP;乘法子程序 MULP PROC PUSH AX PUSH DX MOV AX,X1 MOV DX,X2 MUL DX MOV Y,AX POP DX POP AX RET MULP ENDP;除法子程序 DIVP PROC PUSH AX PUSH

19、BX PUSH DX MOV DX,0 MOV AX,X1 MOV BX,X2 DIV BX MOV Y,AX POP DX POP BX POP AX RET DIVP ENDP ;顯示子程序 ,將X中的數(shù)值按位顯示出來 DISP PROC PUSH BX PUSH AX MOV BH,0 LEA SI,DISCODE CALL BITP ;測試X位數(shù) CMP CC,4 JZ QIAN CMP CC,3 JZ BAI CMP CC,2 JZ SHI CMP CC,1 JMP G JMP NONE QIAN: MOV AH,11100000B ;從第4位開始顯示 MOV AL,AH OUT 4

20、4H,AL MOV BL,X0 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL BAI: MOV AH,11010000B ;從第3位開始顯示 MOV AL,AH OUT 44H,AL MOV BL,X1 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL SHI: MOV AH,10110000B ;從第2位開始顯示 MOV AL,AH OUT 44H,AL MOV BL,X2 MOV AL,SI+BX OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL G: MOV AH,01110000B ;從第1位開始顯示 MOV AL,AH OUT 44H,AL MOV BL,X3 MOV AL,SI+BX OUT 42H,AL CALL DELY JMP EXIT4 NONE: MOV AL,0 ;X中沒有數(shù)據(jù),不顯示 OUT 42H,AL EXIT4: POP AX POP BX RET DISP ENDP;分析數(shù)據(jù)位數(shù)

溫馨提示

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

評論

0/150

提交評論