微機原理加法計算器設計及顯示_第1頁
微機原理加法計算器設計及顯示_第2頁
微機原理加法計算器設計及顯示_第3頁
微機原理加法計算器設計及顯示_第4頁
微機原理加法計算器設計及顯示_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、-. z. / v .實驗報告課程名稱: 微機原理實驗 指導教師:成績:實驗名稱: 加法計算器及顯示 實驗類型:同組學生*:一、實驗目的和要求必填二、實驗內容和原理必填三、主要儀器設備必填四、操作方法和實驗步驟五、實驗數據記錄和處理六、實驗結果與分析必填七、討論、心得實驗目的和要求掌握基于狀態機的編程方法實現數字運算、鍵盤輸入、LED顯示的多任務協調編程實驗內容和原理編寫程序,輸入兩個兩位十進制數并顯示,按確認鍵后顯示運算結果根本功能:能夠輸入輸入數字非數字無效并顯示結果附加功能:光標指示功能通過LED閃爍實現以及退格功能程序代碼ORG 0000HSTART: MOV 78H,#0 ;初始化:

2、78H放0的段碼,其余放熄滅碼MOV 79H,#10MOV 7AH,#10MOV 7BH,#10MOV 7CH,#10MOV R5,#0 ;R5是按鍵次數,初始置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 ;調用顯示子程序LCALL KEY ;調用鍵盤檢測程序INC R5 ;按鍵次數加1S1: CJNE A,#10,S2 ;不是+鍵,跳到S2LJMP

3、 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,S6 ; 不是=鍵,跳到S6LJMP FUN ;是=鍵,跳到FUNS6: CJNE A,#15,N1 ; 不是CL鍵,跳到N1LJMP START ; 是CL鍵,跳到STARTN1: CJNE R5,#1,N2 ;假設按鍵次數不等于1,跳到N2LJM

4、P D11 ;跳到D11N2: CJNE R5,#2,START;假設按鍵次數不等于2,跳到STARTLJMP T1 ;跳到T1D11: MOV R4,A ;將A寫入R4MOV 78H,A ;輸入值送顯示個位緩存MOV 79H,#10 ;將10送到79H單元LJMP LOOP ;跳轉到循環T1: MOV 53H,A ;將A寫入53HMOV B,#10 ;將10置入BMOV A,R4 ;將上一次輸入的R4寫進AMUL AB ;A乘以10ADD A,53H ;53H里面的值與A相加MOV R4,A ;將新的值置入到R4MOV 79H,78H ;個位到十位MOV 78H,53H ;新數為個位LJMP

5、 LOOP ;跳轉到循環FUN:MOV 78H,#10 ;將10置入到78HMOV 79H,#10 ;將10置入到79HMOV R0,30H ;與上次功能鍵交換MOV 30H,A MOV A,R0CJNE A,#10,FUN1 ;判斷功能鍵LJMP ADDY ;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 ;保存第一個數

6、MOV R5,#0 ;按鍵次數清零LJMP BCD ;將其拆為BCD碼,以便后來將其顯示OF: LJMP START ;跳轉回開場ADDY: MOV A,40H ;加法,第一個數送累加器ADD A,R4 ;第一個數加第二個數MOV 40H,A ;存本次結果MOV R5,#0 ;按鍵次數清零LJMP BCD ;跳轉到BCD程序SUBT: MOV A,40H ;減法,第一個數送累加器CLR C ;借位清零SUBB A,R4 ;帶借位的減法,第一個數減第二個數 CY,BCD2 ;借位為1,跳轉到BCD2MOV 40H,A ;將減的結果送40HMOV R5,#0 ;按鍵次數清零LJMP BCD ;跳轉

7、到BCDMULT: MOV A,40H ;乘法,第一個數送累加器MOV B,A ;將A送BMOV A,R4 ;將第二個數送累加器MUL AB ;第一個數乘以第二個數MOV R5,#0 ;按鍵次數清零 OV,BCD1 ;假設乘法結果溢出,則跳轉到BCD1MOV 40H,A ;將A送40HLJMP BCD ;跳轉到BCDDIVI: MOV A,R4 ;除法,第二個數送累加器MOV B,A ;將第二個數送BMOV A,40H ;將第一個數送ADIV AB ;A除以B OV,OF ;當B為0時跳到OFMOV 40H,A ;將A送40HMOV R5,#0 ;按鍵次數清零LJMP BCD ;跳轉到BCDE

8、QUA: MOV R5,#0 ;按鍵次數清零MOV 31H,A ;將A送31HLJMP BCD ;跳轉到BCD;-乘法溢出時的處理程序BCD1: ;乘法溢出時的處理程序MOV 78H, B ;將高8位送78HMOV 79H, A ;將低8位送79HLCALL HE*2BCD ;調用子程序把78H、79H中的數字,轉換成BCD碼,送到7AH 7BH 7CH MOV A, 7CH ;下面,把萬千百十個位,分別存入7CH 7BH 7AH 79H 78HMOV B, #16 DIV AB ;除以16,目的是別離出高、低四位MOV 79H, A ;存放十位MOV 78H, B ;存放個位MOV A, 7

9、AHMOV 7CH, A ;存放萬位MOV A, 7BHMOV B, #16DIV ABMOV 7BH, AMOV 7AH, BLJMP LOOPHE*2BCD: ;子程序:把78H、79H中的數字,轉換成BCD碼,送到7AH 7BH 7CH CLR AMOV 7AH, A ;先清零MOV 7BH, AMOV 7CH, AMOV R6, #16 ;共轉換十六位數 LOOPP:CLR CMOV A, 79H ;從待轉換數的高端移出一位到CyRLC AMOV 79H, AMOV A, 78HRLC AMOV 78H, AMOV A, 7CH ;送到BCD碼的低端ADDC A, 7CH ;帶進位加。

10、自身相加,相當于左移一位DA A ;十進制調整,變成BCD碼MOV 7CH, AMOV A, 7BHADDC A, 7BHDA AMOV 7BH, AMOV A, 7AHADDC A, 7AHMOV 7AH, ADJNZ R6,LOOPP ;共轉換十六位數RETBCD2:MOV A,#100 ;減法第七位有借位時的處理程序CLR C ;借位清零SUBB A,R4 ;100-被減數MOV R4,A ;將結果存在R4中MOV A,40H ;將減數給AADD A,R4 ;減數+(100-被減數MOV R4,A ;將結果給R4MOV A,#100 ;將100給ACLR C ;將CY清零SUBB A,R

11、4 ;100-減數+100-被減數MOV B,#10 ;將10給BDIV AB ;A除以10MOV 7AH,#11 ;將11給7AH,以便顯示符號MOV 79H,A ;將A給79HMOV 78H,B ;將B給78HLJMP LOOP ;跳轉到LOOP;-拆為BCD碼的程序BCD: MOV B,#10 ;將10給BMOV A,40H ;結果送累加器DIV AB ;結果除10MOV 41H,A ;41H暫存商MOV A,B ;取余數MOV 78H,A ;余數送78HMOV B,#10 ;將10送BMOV A,41H ;將商送ADIV AB ;A除以10CJNE A,#0,PANDUAN1 ;假設A

12、不等于0,則跳轉到PANDUAN1MOV 79H,B ;假設A等于0,則將B送79HLJMP RETURN ;跳轉到RETURNPANDUAN1:MOV 7AH,A ;A送7AHMOV 79H,B ;B送79HRETURN:LJMP LOOP ;跳轉到LOOP;-動態顯示子程序DIR: MOV DPTR,#TAB ;數碼管譯碼表首址MOV R0,#78H ;待顯緩沖區個位地址CJNE R5,#1,ANJIAN2 ;判斷按鍵次數是否為1,不是則跳轉到ANJIAN2ANJIAN1: MOV A,R0 ;將顯示區的個位地址給AMOVC A,A+DPTR ;查表CLR P2.3 ;點亮P2.3MOV

13、P3,A ;字段碼送P3口LCALL DELAY1ms ;調延時1ms 子程序SETB P2.3 ;關閉P2.3MOV P3,#0FFH ;將P3口熄滅LCALL DELAY1ms ;調用延時1ms子程序;-按鍵1次時光標閃爍功能INC R6 ;將R6加1CJNE R6,#70,SHANSHUO1 ;假設R6不等于70,則跳轉到SHANSHUO1SETB P2.2 ;將P2.2關閉MOV P3,#0FFH ;將P2口熄滅LCALL DELAY1ms ;調用延時1ms子程序DEC R6 ;R6就減1INC R7 ;R7加1CJNE R7,#70,FANHUI ;判斷R7是否等于70,假設不等于7

14、0,則跳轉到FANHUIMOV R6,#0 ;將R6置0MOV R7,#0 ;將R7置0FANHUI:RET ;子程序返回SHANSHUO1:CLR P2.2 ;翻開P2.2MOV P3,#0EFH ;顯示-LCALL DELAY1ms ;調用延時1ms子程序SETB P2.2 ;關閉P2.2MOV P3,#0FFH ;熄滅P3RET ;返回;-按鍵次數為2顯示ANJIAN2:CJNE R5,#2,ANJIANDENG;如果R5不等于0,則跳轉到ANJIANDENGMOV A,R0 ;將顯示區的個位地址給AMOVC A,A+DPTR ;查表CLR P2.3 ;點亮P2.3MOV P3,A ;將

15、個位顯示LCALL DELAY1ms ;調用延時1msSETB P2.3 ;關閉P2.3MOV P3,#0FFH ;關閉顯示INC R0 ;R0加1MOV A,R0 ;將顯示區的十位地址給AMOVC A,A+DPTR ;查表CLR P2.2 ;翻開P2.2MOV P3,A ;將十位送P3顯示LCALL DELAY1ms ;調用延時1ms子程序SETB P2.2 ;關閉P2.2MOV P3,#0FFH ;關閉顯示;-按鍵兩次時光標閃爍功能INC R6 ;R6加1CJNE R6,#70,SHANSHUO2 ;判斷R6是否為70,假設否跳轉到SHANSHUO2SETB P2.1 ;將P2.1關閉MO

16、V P3,#0FFH ;關閉顯示LCALL DELAY1ms ;調用延時1ms子程序DEC R6 ;R6減1INC R7 ;R7加1CJNE R7,#70,FANHUI2 ;假設R7不等于70,則跳轉到FANHUI2MOV R6,#0 ;將0送R6MOV R7,#0 ;將R7置0FANHUI2:RET ;子程序返回SHANSHUO2:CLR P2.1 ;翻開P2.1MOV P3,#0EFH ;顯示-LCALL DELAY1ms ;調用延時1ms子程序SETB P2.1 ;關閉P2.1MOV P3,#0FFH ;關閉顯示RET ;返回;-按=鍵后的顯示ANJIANDENG:MOV A,31H ;

17、將31H送ACJNE A,#0,ANJIAN0 ;A不等于0時跳轉到ANJIAN0MOV A,R0 ;將個位的地址送AMOVC A,A+DPTR ;查表CLR P2.3 ;翻開P2.3MOV P3,A ;顯示個位LCALL DELAY1ms ;調用延時1ms子程序SETB P2.3 ;關閉P2.3MOV P3,#0FFH ;關閉顯示INC R0 ;R0加1MOV A,R0 ;將十位的地址送AMOVC A,A+DPTR ;查表CLR P2.2 ;翻開P2.2MOV P3,A ;顯示十位LCALL DELAY1ms ;調用延時1ms子程序SETB P2.2 ;關閉P2.2MOV P3,#0FFH

18、;關閉顯示INC R0 ;R0加1MOV A,R0 ;將百位地址送AMOVC A,A+DPTR ;查表CLR P2.1 ;翻開P2.1MOV P3,A ;顯示百位LCALL DELAY1ms ;調用延時1ms子程序SETB P2.1 ;關閉P2.1MOV P3,#0FFH ;關閉顯示INC R0 ;R0加1MOV A,R0 ;將千位的地址送AMOVC A,A+DPTR ;查表CLR P2.0 ;翻開P2.0MOV P3,A ;顯示千位LCALL DELAY1ms ;調用延時1ms子程序SETB P2.0 ;關閉P2.0MOV P3,#0FFH ;關閉顯示RET ;返回;-沒按鍵時的顯示ANJI

19、AN0: MOV A,R0 ;將R0的地址送AMOVC A,A+DPTR ;查表CLR P2.3 ;翻開P2.3MOV P3,A ;顯示LCALL DELAY1ms ;調用延時1ms子程序SETB P2.3 ;關閉P2.3MOV P3,#0FFH ;關閉顯示RET ;返回TAB: DB 28H,7EH,0A2H,62H,74H,61H,21H,7AH,20H,60H,0FFH,0F7H ;共陽極譯碼表DELAY1ms: MOV 50H,#2 ;延時1ms子程序LOOP1: MOV 53H,#248NOPLOOP2:DJNZ 53H,LOOP2DJNZ 50H,LOOP1RETDELAY1:MO

20、V 51H,#5 ;延時子程序DELAY1DELAY3:DJNZ 51H,DELAY3RET;-鍵盤子程序KEY: LCALL KS ;調用檢測按鍵子程序JNZ K1 ;有鍵按下繼續LCALL DELAY2 ;無鍵按調用延時去抖ACALL DIR ;調用動態顯示AJMP KEY ;返回繼續檢測按鍵K1: LCALL DELAY2 ;有鍵按下延時去抖動LCALL KS ;再調用檢測按腱子程序JNZ K2 ;確認有按鍵進展下一步ACALL DIR ;調用動態顯示AJMP KEY ;無鍵按下返回繼續檢測K2: MOV R2,#0EFH ;將掃描值送入R2暫存MOV R3,#00H ;將第一列值送入R3暫存K3: MOV P1,R2 ;將R2值送入P1口L0: P1.0,L1 ;P1.0等于1跳轉到L1MOV A,#00H ;將第一行值送入ACCAJMP LK ;跳轉到鍵值處理程序L1: P1.1,L2 ;P1.1等于1跳轉到L2MOV A,#04H ;將第二行的行值送入ACCAJMP LK ;跳轉到鍵值處理程序L2: P1.2,L3 ;P1.2等于1跳轉到L3MOV A,#08H ;將第三行行值送入ACCAJMP LK ;跳轉到鍵值處理程序L3: P1.3,NE*T ;P1.3等于

溫馨提示

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

評論

0/150

提交評論