首發:MOV 78H,# 0;初始化:78H放0段代碼,其余放代碼。
MOV 79H,#10
MOV 7AH,#10
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
MOV R5,# 0;R5是擊鍵次數,初始設置為0。
MOV 30H,# 0;30H是功能鍵存儲單元,設置為0。
MOV 40H,# 0;40H單元最初設置為0。
MOV 41H,# 0;41H單元格最初設置為0。
循環:LCALL DIR
LCALL鍵
INC R5
;分散程序以確定哪個鍵被按下。
S1:CJNE A,#10,S2;不是“+”鍵,跳到S2。
LJMP好玩;是“+”鍵,跳到好玩。
S2:CJNE A,#11,S3;不是“-”鍵,跳到S3。
LJMP好玩;是“-”鍵,跳轉到FUN。
S3:CJNE A,#12,S4;不是“*”鍵,跳到S4。
LJMP好玩;是“*”鍵,跳轉到FUN。
S4:CJNE A,#13,S5;不是“/”鍵,跳到S5。
LJMP好玩;是“/”鍵,跳轉到FUN。
S5:CJNE A,#14,S6;不是“=”鍵,跳到S6。
LJMP好玩;就是“=”鍵,跳起來好玩。
S6:CJNE A,#15,n 1;不是“CL”鍵,跳到N1。
LJMP啟動;是“CL”鍵,跳轉開始。
N1:CJNE R5,#1,N2;判斷按下按鍵的次數
LJMP D11
N2:CJNE R5,#2,N3
LJMP T2
N3:CJNE R5,#3,N4
LJMP T3
N4:CJNE R5,#4,N5
LJMP T4
N5:CJNE R5,#5,N6
LJMP T5
N6:CJNE R5,#6,啟動
LJMP T6
MOV·R4
MOV 78H,A;輸入值被發送到顯示位緩沖器。
MOV 79H,#10
MOV 7AH,#10
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
LJMP環路
T2:MOV·R7
MOV B,#10
R4 MOV
MUL AB
添加A,R7
MOV·R4
MOV 7AH,#10
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
MOV 79H,78H壹到十。
MOV 78H,R7;新號碼是壹位數。
LJMP環路
T3:MOV R7,A
MOV B,#10
R4 MOV
MUL AB
添加A,R7
MOV·R4
MOV 7BH,#10
MOV 7CH,#10
MOV 7DH,#10
MOV 7AH,79H十到壹百
MOV 79H,78H壹到十。
MOV 78H,R7;新號碼是壹位數。
LJMP環路
T4:MOV·R7
MOV B,#10
R4 MOV
MUL AB
添加A,R7
MOV·R4
MOV 7CH,#10
MOV 7DH,#10
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP環路
T5:MOV R7,A
MOV B,#10
R4 MOV
MUL AB
添加A,R7
MOV·R4
MOV 7DH,#10
MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP環路
T6:MOV R7,A
MOV B,#10
R4 MOV
MUL AB
添加A,R7
MOV·R4
MOV 7DH,7CH
MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP環路
MOV 7CH,7BH
MOV 7BH,7AH
MOV 7AH,79H
MOV 79H,78H
MOV 78H,R7
LJMP環路
好玩:MOV 78H,#10
MOV 79H,#10
MOV 7AH,#10
MOV R0,30h;與最後壹個功能鍵交換
MOV 30H,A
MOV A,R0
CJNE A,#10,fun 1;判斷功能鍵
LJMP ADDY"+"
FUN1:CJNE A,#11,FUN2
LJMP SUBT;"-"
FUN2:CJNE A,#12,FUN3
LJMP MULT;"*"
FUN3:CJNE A,#13,FUN4
LJMP DIVI"/"
FUN4:CJNE A,#14,FUN5第壹次按功能鍵,也就是A=#0。
LJMP EQUA"="
FUN5:MOV 40H,R4;保存第壹個號碼
MOV R5,# 0;清除擊鍵次數
LJMP BCD把它分解成bcd碼,以便以後顯示。
的:LJMP開始;溢出處理
艾迪:MOV A,40H第壹個數字被發送到累加器
加壹個,R4;第壹個數字加上第二個數字
JB CY,OF;溢出
MOV 40H,A;保存此結果
MOV R5,# 0;清除擊鍵次數
LJMP BCD
SUBT:MOV A,40H
R4 SUBB
JB CY,OF
MOV 40H,A
MOV R5,#0
LJMP BCD
MULT:MOV A,40H
MOV灣
R4 MOV
MUL AB
JB OV
MOV 40H,A
MOV R5,#0
LJMP BCD
迪維:DIVI阿·R4
MOV灣
MOV A,40H
分部AB
JB OV
MOV 40H,A
MOV R5,#0
LJMP BCD
等式:MOV R5,#0
LJMP BCD
BCD:MOV B,#10
MOV A,40H結果被發送到累加器。
DIV AB結果除以10
MOV 41H,A;暫時存儲“業務”
MOV甲、乙;取壹位數
MOV 78H,A;發送到顯示緩沖區的單元號。
MOV A,41H
JZ回歸;結果是個位數,返回LOOP。
MOV B,#10
MOV A,41H
分部AB
MOV 41H,A
MOV A,B
MOV 79H,A;十位顯示緩沖器
MOV A,41H
JZ回歸;結果是壹個兩位數的數字,這將返回循環。
MOV 7AH,A;百位數傳輸顯示緩存
返回:LJMP循環
;動態顯示子程序
導演:MOV·DPTR,# TAB數碼管解碼表頭地址
MOV R0,# 78H要顯示的緩沖區的位地址
MOV A,# 0FEH單位位選擇信號
MOV R1,A
LD1:MOV A,@R0
MOVC A,@ A+DPTR;查表
MOV P2,r 1;* * *陽極管字位選擇發送到P2端口。
MOV P0,A;字段代碼被發送到P0端口。
LCALL delay 1 ms;延遲調整1ms子程序
INC R0R0指向下壹個模塊。
MOV A,r 1;
JNB ACC.5,LD2判斷是否發出6個數字。
RL A;指向下壹位
MOV R1,A;位選擇信號被存儲回R3。
SJMP LD 1;跳過以顯示下壹個數字。
LD2:RET;發送6個號碼後返回。
TAB:DB 0C0H,0F9H,0A4H,0B0H,099H,092H,082H,0F8H,80H,90H,0FFH* * *陽極解碼表
延遲1毫秒:MOV R6,第二
LOOP1:MOV R7,#248
nototherwiseprovided(for)除非另有規定
環路2:DJNZ R7,環路2
DJNZ R6,LOOP1
浸水使柔軟
KEY:LCALL KS;調用檢測鍵子程序
JNZ k 1;按鍵繼續。
LCALL DELAY2無鍵按鍵呼叫延遲去抖
ACALL DIR呼叫動態顯示
AJMP密鑰;返回繼續檢測按鈕
k 1:LCALL delay 2;有壹個按鍵延遲抖動。
LCALL KS然後調用檢測壓筋子程序。
JNZ K2確認有壹個按鈕可以繼續下壹步。
ACALL DIR呼叫動態顯示
AJMP密鑰;按下無鍵返回繼續檢測。
K2:MOV R2,# 0EFH將掃描值發送到R2進行臨時存儲。
MOV R3,# 00H將第壹列值發送到R3進行臨時存儲。
K3:MOV P1,R2;將R2值發送到端口P1。
L0:JB P1.0,l 1;P1.0等於1。跳到L1。
MOV A,# 00H將第壹行值發送到ACC。
AJMP LK跳轉到鍵值處理程序
L1:JB P1.1,L2;P1.1等於1跳轉到L2。
MOV A,# 04H將第二行的行值發送到ACC。
AJMP LK跳轉到鍵值處理程序
L2:JB P1.2,L3;P1.2等於1跳轉到L3。
MOV A,# 08H將第三行值發送到ACC。
AJMP LK跳轉到鍵值處理程序
L3:JB P1.3,下壹個;P1.3等於1跳到下壹頁。
MOV A,# 0CH將第四行值發送到ACC。
LK:加壹個,R3;將行值和列值相加後的鍵值被發送到。
推ACC將中的值發送到堆棧進行臨時存儲。
K4:LCALL delay 2;調用延時去抖程序。
LCALL KS調用鍵檢測程序
JNZ K4;該鍵不被釋放並繼續返回到檢測狀態。
POP ACC將堆棧值發送到ACC
MOV·DPTR,#鍵盤
MOVC A,@A+DPTR
浸水使柔軟
接下來:INC R3列值加1
MOV A,R2;R2值被發送到。
JNB升速7,調;掃描後,轉到鍵進行下壹次掃描。
RL A;掃描尚未完成。將值向左移動壹位以掃描下壹列。
MOV·R2;將ACC值發送到R2進行臨時存儲。
AJMP K3跳到K3繼續。
KS:MOV P1,# 0FH設定P1,高四位0,低四位1。
MOV A,p 1;讀取端口P1。
XRL A,# 0FH將中的值與或中的值區分開來
RET子程序返回
KEYTAB:DB 1,2,3,10,4,5,6,11,7,8,9,12,15,0,14,13;鍵值表
延遲2:MOV R6,# 2H;延遲去抖動子程序
LP1:MOV R7,#0FAH
LP2:DJNZ R7,LP2
DJNZ R6,LP1
浸水使柔軟
結束