
;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7
; T11 8279键盘显示接口实验二
CSEG AT 0000H
LJMP START
CSEG AT 4100H
START: MOV DPTR,#00CFE9H ;8279命令字
MOV A,#0D1H ;清显示
MOVX @DPTR,A
LOOP1: MOVX A,@DPTR
ANL A,#0FH
JZ LOOP1 ;有键按下?没有则循环等待
MOV A,#0A0H ;显示\消隐命令
MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R1,A ;保存键值 加个F
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#80H ;选中LED1
MOVX @DPTR,A
MOV A,R1
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令
LOOP2: MOVX A,@DPTR ;输入显示符号
ANL A,#0FH
JZ LOOP2 ;有键按下?没有则循环等待
MOV A,#0A0H ;显示\消隐命令
MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R2,A ;保存键值
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#81H ;选中LED2
MOVX @DPTR,A
MOV A,R2
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令
LOOP3: MOVX A,@DPTR ;第二个数
ANL A,#0FH
JZ LOOP3 ;有键按下?没有则循环等待
MOV A,#0A0H ;显示\消隐命令
MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R3,A ;保存键值
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#82H ;选中LED3
MOVX @DPTR,A
MOV A,R3
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令
LOOP4: MOVX A,@DPTR ;====
ANL A,#0FH
JZ LOOP4 ;有键按下?没有则循环等待
MOV A,#0A0H ;显示\消隐命令
MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R4,A ;保存键值
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#83H ;选中LED4
MOVX @DPTR,A
MOV A,R4
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令
CJNE R4,#0CEH,LOOP5 ;判断第四个输入是不是等于号
jia: CJNE R2,#0cAH,jian
MOV A,R1
ANL A,#0FH
MOV R1,A
MOV A,R3
ANL A,#0FH
MOV R3,A
MOV A,R1
ADD A,R3
LJMP XIANSHI
jian: CJNE R2,#0cBH,cheng
MOV A,R1
ANL A,#0FH
MOV R1,A
MOV A,R3
ANL A,#0FH
MOV R3,A
MOV A,R1
SUBB A,R3
LJMP XIANSHI
cheng:CJNE R2,#0CcH,CHU
MOV A,R1
ANL A,#0FH
MOV R1,A
MOV A,R3
ANL A,#0FH
MOV R3,A
MOV A,R1
MOV B,R3
MUL AB
LJMP XIANSHI
CHU: MOV A,R1
ANL A,#0FH
MOV R1,A
MOV A,R3
ANL A,#0FH
MOV R3,A
MOV A,R1
MOV B,R3
DIV AB
LJMP XIANSHI ;第四个等于号运算
LOOP5: MOVX A,@DPTR ;第二个数
ANL A,#0FH
JZ LOOP5 ;有键按下?没有则循环等待
MOV A,#0A0H ;显示\消隐命令
MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R5,A ;保存键值
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#84H ;选中LED5
MOVX @DPTR,A
MOV A,R5
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令
CJNE R5,#0CEH,LOOP6; panduandi五个是等于号
MOV A,R4
ANL A,#0FH
MOV R4,A
MOV A,R1
ANL A,#0FH
MOV R1,A
CJNE R2,#0CAH,TIAO2 ;人为地忽略单位数减双位数
MOV A,R3 ;加法,第二个是符号
ANL A,#0FH
MOV R3,A
MOV B,#0AH
MUL AB
ADD A,R4
ADDC A,R1
LJMP XIANSHI
TIAO2 :CJNE R2,#0CCH,TIAO4 ;人为地忽略分数
MOV A,R3 ;乘法,第二个是符号
ANL A,#0FH
MOV R3,A
MOV B,#0AH
MUL AB
ADD A,R4
MOV B,R1
MUL AB
LJMP XIANSHI
TIAO4 :CJNE R3,#0CAH,TIAO5;加法,第三个是符号
MOV A,R2
ANL A,#0FH
MOV R2,A
MOV B,#0AH
MOV A,R1
MUL AB
ADD A,R2
ADDC A,R4
LJMP XIANSHI
TIAO5 :CJNE R3,#0CBH,TIAO6;减法,第三个是符号
MOV A,R2
ANL A,#0FH
MOV R2,A
MOV B,#0AH
MOV A,R1
MUL AB
ADD A,R2
SUBB A,R4
LJMP XIANSHI
TIAO6 :CJNE R3,#0CCH,TIAO7;乘法,第三个是符号
MOV A,R2
ANL A,#0FH
MOV R2,A
MOV B,#0AH
MOV A,R1
MUL AB
ADD A,R2
MOV B,R4
MUL AB
LJMP XIANSHI
TIAO7 : MOV A,R2 ;除法,第三个是符号
ANL A,#0FH
MOV R2,A
MOV B,#0AH
MOV A,R1
MUL AB
ADD A,R2
MOV B,R4
DIV AB
LJMP XIANSHI
LOOP6: MOVX A,@DPTR ;====
ANL A,#0FH
JZ LOOP6 ;有键按下?没有则循环等待
MOV A,#0A0H ;显示\消隐命令
MOVX @DPTR,A
MOV A,#40H ;读FIFO命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
MOV R6,A ;保存键值
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#85H ;选中LED6
MOVX @DPTR,A
MOV A,R6
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,R1
ANL A,#0FH
MOV R1,A
MOV A,R2
ANL A,#0FH
MOV R2,A
MOV A,R4
ANL A,#0FH
MOV R4,A
MOV A,R5
ANL A,#0FH
MOV R5,A
MOV B,#0AH
MOV A,R1
MUL AB
ADD A,R2
MOV R7,A ;把12放到R7
MOV B,#0AH
MOV A,R4
MUL AB
ADD A,R5
MOV R1,A ;把45放到R1
CJNE R3,#0CAH,JIAN1
MOV A,R7
ADDC A,R1
LJMP XIANSHI
JIAN1: CJNE R3,#0CBH,CHENG1
MOV A,R7
SUBB A,R1
LJMP XIANSHI
CHENG1:CJNE R3,#0CCH,CHU1
MOV A,R7
MOV B,R1
MUL AB
LJMP XIANSHI
CHU1: MOV A,R7
MOV B,R1
DIV AB
LJMP XIANSHI
XIANSHI: ;MOV R1,A
;MOV DPTR,#00CFE9H ;8279命令字
;MOV A,#0D1H ;清显示
;MOVX @DPTR,A
;MOV A,R1
MOV R0,A ;jieguo
SUBB A,#H ;HE 100 BI JIAO
JC DENG2 ;XIAOYU 100 TIAO
MOV A,R0
MOV B,#H ;SAN WEI SHU QU BAI WEI
DIV AB
MOV R4,A ;BAI WEI SHU FANG R4
MOV A,B ;QU BAI HOU YU SHU GEI a
MOV B,#0AH
DIV AB ;QU SHI WEI
MOV R5,A ;SHI WEI FANG R5
MOV R6,B ;GE WEI SHU FANG R6
MOV DPTR,#0CFE9H ;写显示RAM命令 BAI WEI DENG
MOV A,#80H ;选中LED1
MOVX @DPTR,A
MOV A,R4
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令 ;
MOV DPTR,#0CFE9H ;写显示RAM命令 SHI WEI DENG
MOV A,#81H ;选中LED2
MOVX @DPTR,A
MOV A,R5
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令 ;
MOV DPTR,#0CFE9H ;写显示RAM命令 GE WEI DENG
MOV A,#82H ;选中LED3
MOVX @DPTR,A
MOV A,R6
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令;
LJMP LOOP1
DENG2 : MOV A,R0
CLR C ;上面借位清0
SUBB A,#0AH
JC DENG3
MOV A,R0
MOV B,#0AH
DIV AB
MOV R4,A ;SHI WEI GEI R4
MOV R5,B ;GE WEI GEI R5
MOV DPTR,#0CFE9H ;写显示RAM命令 SHI WEI DENG
MOV A,#80H ;选中LED1
MOVX @DPTR,A
MOV A,R4
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令;
MOV DPTR,#0CFE9H ;写显示RAM命令 GE WEI DENG
MOV A,#81H ;选中LED2
MOVX @DPTR,A
MOV A,R5
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令;
LJMP LOOP1
DENG3 : MOV A,R0
MOV DPTR,#0CFE9H ;写显示RAM命令
MOV A,#80H ;选中LED1
MOVX @DPTR,A
MOV A,R0
ANL A,#0FH ;取后半字节
MOV DPTR,#TAB
MOVC A,@A+DPTR ;取段显码
MOV DPTR,#0CFE8H ;写显示RAM
MOVX @DPTR,A
MOV DPTR,#0CFE9H ;写显示RAM命令;
LJMP LOOP1
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;段显码表
db 7fh,6fh,77h,7ch,39h,5eh,79h,71h
END
