微機(jī)原理 加法計(jì)算器設(shè)計(jì)及顯示_第1頁(yè)
微機(jī)原理 加法計(jì)算器設(shè)計(jì)及顯示_第2頁(yè)
微機(jī)原理 加法計(jì)算器設(shè)計(jì)及顯示_第3頁(yè)
微機(jī)原理 加法計(jì)算器設(shè)計(jì)及顯示_第4頁(yè)
微機(jī)原理 加法計(jì)算器設(shè)計(jì)及顯示_第5頁(yè)
已閱讀5頁(yè),還剩6頁(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、實(shí)驗(yàn)報(bào)告課程名稱: 微機(jī)原理實(shí)驗(yàn) 指導(dǎo)老師: 成績(jī): 實(shí)驗(yàn)名稱: 加法計(jì)算器及顯示 實(shí)驗(yàn)類型: 同組學(xué)生姓名: 一、實(shí)驗(yàn)?zāi)康暮鸵螅ū靥睿┒?、?shí)驗(yàn)內(nèi)容和原理(必填)三、主要儀器設(shè)備(必填)四、操作方法和實(shí)驗(yàn)步驟五、實(shí)驗(yàn)數(shù)據(jù)記錄和處理六、實(shí)驗(yàn)結(jié)果與分析(必填)七、討論、心得一、 實(shí)驗(yàn)?zāi)康暮鸵?. 掌握基于狀態(tài)機(jī)的編程方法2. 實(shí)現(xiàn)數(shù)字運(yùn)算、鍵盤輸入、LED顯示的多任務(wù)協(xié)調(diào)編程二、 實(shí)驗(yàn)內(nèi)容和原理1. 編寫程序,輸入兩個(gè)兩位十進(jìn)制數(shù)并顯示,按確認(rèn)鍵后顯示運(yùn)算結(jié)果2. 基本功能:能夠輸入輸入數(shù)字(非數(shù)字無(wú)效)并顯示結(jié)果3. 附加功能:光標(biāo)指示功能(通過(guò)LED閃爍實(shí)現(xiàn))以及退格功能三、 程序代碼OR

2、G 0000HSTART: MOV 78H,#0 ;初始化:78H放0的段碼,其余放熄滅碼MOV 79H,#10MOV 7AH,#10MOV 7BH,#10MOV 7CH,#10MOV R5,#0 ;R5是按鍵次數(shù),初始置0MOV R6,#0 ;將0置入R6中MOV R7,#0 ;將0置入R7中MOV 30H,#0 ;30H是功能鍵存放單元,置為0MOV 31H,#0 ;31H單元初始置為0MOV 40H,#0 ;40H單元初始置為0MOV 41H,#0 ;41H單元初始置為0LOOP: LCALL DIR ;調(diào)用顯示子程序LCALL KEY ;調(diào)用鍵盤檢測(cè)程序INC R5 ;按鍵次數(shù)加1S1

3、: CJNE A,#10,S2 ;不是"+"鍵,跳到S2LJMP FUN ;是"+"鍵,跳到FUNS2: CJNE A,#11,S3 ;不是"-"鍵,跳到S3LJMP FUN ;是"-"鍵,跳到FUNS3: CJNE A,#12,S4 ; 不是"*"鍵,跳到S4LJMP FUN ; 是"*"鍵,跳到FUNS4: CJNE A,#13,S5 ; 不是"/"鍵,跳到S5LJMP FUN ; 是"/"鍵,跳到FUNS5: CJNE A,#14

4、,S6 ; 不是"="鍵,跳到S6LJMP FUN ;是"="鍵,跳到FUNS6: CJNE A,#15,N1 ; 不是"CL"鍵,跳到N1LJMP START ; 是"CL"鍵,跳到STARTN1: CJNE R5,#1,N2 ;若按鍵次數(shù)不等于1,跳到N2LJMP D11 ;跳到D11N2: CJNE R5,#2,START;若按鍵次數(shù)不等于2,跳到STARTLJMP T1 ;跳到T1D11: MOV R4,A ;將A寫入R4MOV 78H,A ;輸入值送顯示個(gè)位緩存MOV 79H,#10 ;將10送到79H單

5、元LJMP LOOP ;跳轉(zhuǎn)到循環(huán)T1: MOV 53H,A ;將A寫入53HMOV B,#10 ;將10置入BMOV A,R4 ;將上一次輸入的R4寫進(jìn)AMUL AB ;A乘以10ADD A,53H ;53H里面的值與A相加MOV R4,A ;將新的值置入到R4MOV 79H,78H ;個(gè)位到十位MOV 78H,53H ;新數(shù)為個(gè)位LJMP LOOP ;跳轉(zhuǎn)到循環(huán)FUN:MOV 78H,#10 ;將10置入到78HMOV 79H,#10 ;將10置入到79HMOV R0,30H ;與上次功能鍵交換MOV 30H,A MOV A,R0CJNE A,#10,FUN1 ;判斷功能鍵LJMP ADD

6、Y ;""FUN1: CJNE A,#11,FUN2LJMP SUBT ;""FUN2: CJNE A,#12,FUN3LJMP MULT ;"*"FUN3: CJNE A,#13,FUN4LJMP DIVI ;"/"FUN4: CJNE A,#14,FUN5 ;首次按功能鍵,即A=#0LJMP EQUA ;"="FUN5: MOV 40H,R4 ;保存第一個(gè)數(shù)MOV R5,#0 ;按鍵次數(shù)清零LJMP BCD ;將其拆為BCD碼,以便后來(lái)將其顯示OF: LJMP START ;跳轉(zhuǎn)回開始ADD

7、Y: MOV A,40H ;加法,第一個(gè)數(shù)送累加器ADD A,R4 ;第一個(gè)數(shù)加第二個(gè)數(shù)MOV 40H,A ;存本次結(jié)果MOV R5,#0 ;按鍵次數(shù)清零LJMP BCD ;跳轉(zhuǎn)到BCD程序SUBT: MOV A,40H ;減法,第一個(gè)數(shù)送累加器CLR C ;借位清零SUBB A,R4 ;帶借位的減法,第一個(gè)數(shù)減第二個(gè)數(shù)JB CY,BCD2 ;借位為1,跳轉(zhuǎn)到BCD2MOV 40H,A ;將減的結(jié)果送40HMOV R5,#0 ;按鍵次數(shù)清零LJMP BCD ;跳轉(zhuǎn)到BCDMULT: MOV A,40H ;乘法,第一個(gè)數(shù)送累加器MOV B,A ;將A送BMOV A,R4 ;將第二個(gè)數(shù)送累加器MU

8、L AB ;第一個(gè)數(shù)乘以第二個(gè)數(shù)MOV R5,#0 ;按鍵次數(shù)清零JB OV,BCD1 ;若乘法結(jié)果溢出,則跳轉(zhuǎn)到BCD1MOV 40H,A ;將A送40HLJMP BCD ;跳轉(zhuǎn)到BCDDIVI: MOV A,R4 ;除法,第二個(gè)數(shù)送累加器MOV B,A ;將第二個(gè)數(shù)送BMOV A,40H ;將第一個(gè)數(shù)送ADIV AB ;A除以BJB OV,OF ;當(dāng)B為0時(shí)跳到OFMOV 40H,A ;將A送40HMOV R5,#0 ;按鍵次數(shù)清零LJMP BCD ;跳轉(zhuǎn)到BCDEQUA: MOV R5,#0 ;按鍵次數(shù)清零MOV 31H,A ;將A送31HLJMP BCD ;跳轉(zhuǎn)到BCD;-乘法溢出時(shí)的

9、處理程序BCD1: ;乘法溢出時(shí)的處理程序MOV 78H, B ;將高8位送78HMOV 79H, A ;將低8位送79HLCALL HEX2BCD ;調(diào)用子程序把78H、79H中的數(shù)字,轉(zhuǎn)換成BCD碼,送到7AH 7BH 7CH MOV A, 7CH ;下面,把萬(wàn)千百十個(gè)位,分別存入7CH 7BH 7AH 79H 78HMOV B, #16 DIV AB ;除以16,目的是分離出高、低四位MOV 79H, A ;存放十位MOV 78H, B ;存放個(gè)位MOV A, 7AHMOV 7CH, A ;存放萬(wàn)位MOV A, 7BHMOV B, #16DIV ABMOV 7BH, AMOV 7AH,

10、BLJMP LOOPHEX2BCD: ;子程序:把78H、79H中的數(shù)字,轉(zhuǎn)換成BCD碼,送到7AH 7BH 7CH CLR AMOV 7AH, A ;先清零MOV 7BH, AMOV 7CH, AMOV R6, #16 ;共轉(zhuǎn)換十六位數(shù) LOOPP:CLR CMOV A, 79H ;從待轉(zhuǎn)換數(shù)的高端移出一位到CyRLC AMOV 79H, AMOV A, 78HRLC AMOV 78H, AMOV A, 7CH ;送到BCD碼的低端ADDC A, 7CH ;帶進(jìn)位加。自身相加,相當(dāng)于左移一位DA A ;十進(jìn)制調(diào)整,變成BCD碼MOV 7CH, AMOV A, 7BHADDC A, 7BHDA

11、 AMOV 7BH, AMOV A, 7AHADDC A, 7AHMOV 7AH, ADJNZ R6,LOOPP ;共轉(zhuǎn)換十六位數(shù)RETBCD2:MOV A,#100 ;減法第七位有借位時(shí)的處理程序CLR C ;借位清零SUBB A,R4 ;100-被減數(shù)MOV R4,A ;將結(jié)果存在R4中MOV A,40H ;將減數(shù)給AADD A,R4 ;減數(shù)+(100-被減數(shù))MOV R4,A ;將結(jié)果給R4MOV A,#100 ;將100給ACLR C ;將CY清零SUBB A,R4 ;100-(減數(shù)+(100-被減數(shù))MOV B,#10 ;將10給BDIV AB ;A除以10MOV 7AH,#11 ;

12、將11給7AH,以便顯示符號(hào)MOV 79H,A ;將A給79HMOV 78H,B ;將B給78HLJMP LOOP ;跳轉(zhuǎn)到LOOP;-拆為BCD碼的程序BCD: MOV B,#10 ;將10給BMOV A,40H ;結(jié)果送累加器DIV AB ;結(jié)果除10MOV 41H,A ;41H暫存"商"MOV A,B ;取余數(shù)MOV 78H,A ;余數(shù)送78HMOV B,#10 ;將10送BMOV A,41H ;將商送ADIV AB ;A除以10CJNE A,#0,PANDUAN1 ;若A不等于0,則跳轉(zhuǎn)到PANDUAN1MOV 79H,B ;若A等于0,則將B送79HLJMP RE

13、TURN ;跳轉(zhuǎn)到RETURNPANDUAN1:MOV 7AH,A ;A送7AHMOV 79H,B ;B送79HRETURN:LJMP LOOP ;跳轉(zhuǎn)到LOOP;-動(dòng)態(tài)顯示子程序DIR: MOV DPTR,#TAB ;數(shù)碼管譯碼表首址MOV R0,#78H ;待顯緩沖區(qū)個(gè)位地址CJNE R5,#1,ANJIAN2 ;判斷按鍵次數(shù)是否為1,不是則跳轉(zhuǎn)到ANJIAN2ANJIAN1: MOV A,R0 ;將顯示區(qū)的個(gè)位地址給AMOVC A,A+DPTR ;查表CLR P2.3 ;點(diǎn)亮P2.3MOV P3,A ;字段碼送P3口LCALL DELAY1ms ;調(diào)延時(shí)1ms 子程序SETB P2.3

14、;關(guān)閉P2.3MOV P3,#0FFH ;將P3口熄滅LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序;-按鍵1次時(shí)光標(biāo)閃爍功能INC R6 ;將R6加1CJNE R6,#70,SHANSHUO1 ;若R6不等于70,則跳轉(zhuǎn)到SHANSHUO1SETB P2.2 ;將P2.2關(guān)閉MOV P3,#0FFH ;將P2口熄滅LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序DEC R6 ;R6就減1INC R7 ;R7加1CJNE R7,#70,FANHUI ;判斷R7是否等于70,若不等于70,則跳轉(zhuǎn)到FANHUIMOV R6,#0 ;將R6置0MOV R7,#0 ;將R7置0FANHUI:

15、RET ;子程序返回SHANSHUO1:CLR P2.2 ;打開P2.2MOV P3,#0EFH ;顯示“-”LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.2 ;關(guān)閉P2.2MOV P3,#0FFH ;熄滅P3RET ;返回;-按鍵次數(shù)為2顯示ANJIAN2:CJNE R5,#2,ANJIANDENG;如果R5不等于0,則跳轉(zhuǎn)到ANJIANDENGMOV A,R0 ;將顯示區(qū)的個(gè)位地址給AMOVC A,A+DPTR ;查表CLR P2.3 ;點(diǎn)亮P2.3MOV P3,A ;將個(gè)位顯示LCALL DELAY1ms ;調(diào)用延時(shí)1msSETB P2.3 ;關(guān)閉P2.3MOV P

16、3,#0FFH ;關(guān)閉顯示INC R0 ;R0加1MOV A,R0 ;將顯示區(qū)的十位地址給AMOVC A,A+DPTR ;查表CLR P2.2 ;打開P2.2MOV P3,A ;將十位送P3顯示LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.2 ;關(guān)閉P2.2MOV P3,#0FFH ;關(guān)閉顯示;-按鍵兩次時(shí)光標(biāo)閃爍功能INC R6 ;R6加1CJNE R6,#70,SHANSHUO2 ;判斷R6是否為70,若否跳轉(zhuǎn)到SHANSHUO2SETB P2.1 ;將P2.1關(guān)閉MOV P3,#0FFH ;關(guān)閉顯示LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序DEC R6 ;

17、R6減1INC R7 ;R7加1CJNE R7,#70,FANHUI2 ;若R7不等于70,則跳轉(zhuǎn)到FANHUI2MOV R6,#0 ;將0送R6MOV R7,#0 ;將R7置0FANHUI2:RET ;子程序返回SHANSHUO2:CLR P2.1 ;打開P2.1MOV P3,#0EFH ;顯示“-”LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.1 ;關(guān)閉P2.1MOV P3,#0FFH ;關(guān)閉顯示RET ;返回;-按“=”鍵后的顯示ANJIANDENG:MOV A,31H ;將31H送ACJNE A,#0,ANJIAN0 ;A不等于0時(shí)跳轉(zhuǎn)到ANJIAN0MOV A,

18、R0 ;將個(gè)位的地址送AMOVC A,A+DPTR ;查表CLR P2.3 ;打開P2.3MOV P3,A ;顯示個(gè)位LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.3 ;關(guān)閉P2.3MOV P3,#0FFH ;關(guān)閉顯示INC R0 ;R0加1MOV A,R0 ;將十位的地址送AMOVC A,A+DPTR ;查表CLR P2.2 ;打開P2.2MOV P3,A ;顯示十位LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.2 ;關(guān)閉P2.2MOV P3,#0FFH ;關(guān)閉顯示INC R0 ;R0加1MOV A,R0 ;將百位地址送AMOVC A,A+DPTR

19、 ;查表CLR P2.1 ;打開P2.1MOV P3,A ;顯示百位LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.1 ;關(guān)閉P2.1MOV P3,#0FFH ;關(guān)閉顯示INC R0 ;R0加1MOV A,R0 ;將千位的地址送AMOVC A,A+DPTR ;查表CLR P2.0 ;打開P2.0MOV P3,A ;顯示千位LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.0 ;關(guān)閉P2.0MOV P3,#0FFH ;關(guān)閉顯示RET ;返回;-沒(méi)按鍵時(shí)的顯示ANJIAN0: MOV A,R0 ;將R0的地址送AMOVC A,A+DPTR ;查表CLR P2.

20、3 ;打開P2.3MOV P3,A ;顯示LCALL DELAY1ms ;調(diào)用延時(shí)1ms子程序SETB P2.3 ;關(guān)閉P2.3MOV P3,#0FFH ;關(guān)閉顯示RET ;返回TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H,0FFH,0F7H ;共陽(yáng)極譯碼表DELAY1ms: MOV 50H,#2 ;延時(shí)1ms子程序LOOP1: MOV 53H,#248NOPLOOP2:DJNZ 53H,LOOP2DJNZ 50H,LOOP1RETDELAY1:MOV 51H,#5 ;延時(shí)子程序DELAY1DELAY3:DJNZ 51H,DELAY3RET;

21、-鍵盤子程序KEY: LCALL KS ;調(diào)用檢測(cè)按鍵子程序JNZ K1 ;有鍵按下繼續(xù)LCALL DELAY2 ;無(wú)鍵按調(diào)用延時(shí)去抖ACALL DIR ;調(diào)用動(dòng)態(tài)顯示AJMP KEY ;返回繼續(xù)檢測(cè)按鍵K1: LCALL DELAY2 ;有鍵按下延時(shí)去抖動(dòng)LCALL KS ;再調(diào)用檢測(cè)按腱子程序JNZ K2 ;確認(rèn)有按鍵進(jìn)行下一步ACALL DIR ;調(diào)用動(dòng)態(tài)顯示AJMP KEY ;無(wú)鍵按下返回繼續(xù)檢測(cè)K2: MOV R2,#0EFH ;將掃描值送入R2暫存MOV R3,#00H ;將第一列值送入R3暫存K3: MOV P1,R2 ;將R2值送入P1口L0: JB P1.0,L1 ;P1.0等于1跳轉(zhuǎn)到L1MOV A,#00H ;將第一行值送入ACCAJMP LK ;跳轉(zhuǎn)到鍵值處理程序L1: JB P1.1,L2 ;P1.1等于1跳轉(zhuǎn)到L2MOV A,#04H ;將第二行的行值送入ACCAJMP LK ;跳轉(zhuǎn)到鍵值處理程序L2: JB P1.2,L3 ;P1.2等于1跳轉(zhuǎn)到L3MOV A,#08H ;將第三行行值送入ACCAJMP LK ;跳轉(zhuǎn)到鍵值處理程序L

溫馨提示

  • 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)論