NAME T11 单片机-- 简易计算器汇编程序;将键盘的KA10~KA12接8259的KA0~KA2;RL10~RL17接8255A的RL0~RL7 ; T11 8279键盘显示接口实验二CSEG AT 0000HLJMP STARTCSEG AT 4100HSTART: MOV DPTR,#00CFE9H ;8279命令字MOV A,#0D1H ;清显示MOVX @DPTR,ALOOP1: MOVX A,@DPTRANL A,#0FHJZ LOOP1 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R1,A ;保存键值加个FMOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R1ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令LOOP2: MOVX A,@DPTR ;输入显示符号ANL A,#0FHJZ LOOP2 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R2,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#81H ;选中LED2MOVX @DPTR,AMOV A,R2ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令LOOP3: MOVX A,@DPTR ;第二个数ANL A,#0FHJZ LOOP3 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R3,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#82H ;选中LED3MOVX @DPTR,AMOV A,R3ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令LOOP4: MOVX A,@DPTR ;====ANL A,#0FHJZ LOOP4 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R4,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#83H ;选中LED4MOVX @DPTR,AMOV A,R4ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令CJNE R4,#0CEH,LOOP5 ;判断第四个输入是不是等于号jia: CJNE R2,#0cAH,jianMOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1ADD A,R3LJMP XIANSHIjian: CJNE R2,#0cBH,chengMOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1SUBB A,R3LJMP XIANSHIcheng:CJNE R2,#0CcH,CHUMOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1MOV B,R3MUL ABLJMP XIANSHICHU: MOV A,R1ANL A,#0FHMOV R1,AMOV A,R3ANL A,#0FHMOV R3,AMOV A,R1MOV B,R3DIV ABLJMP XIANSHI ;第四个等于号运算LOOP5: MOVX A,@DPTR ;第二个数ANL A,#0FHJZ LOOP5 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R5,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#84H ;选中LED5MOVX @DPTR,AMOV A,R5ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令CJNE R5,#0CEH,LOOP6; panduandi五个是等于号MOV A,R4ANL A,#0FHMOV R4,AMOV A,R1ANL A,#0FHMOV R1,ACJNE R2,#0CAH,TIAO2 ;人为地忽略单位数减双位数MOV A,R3 ;加法,第二个是符号ANL A,#0FHMOV R3,AMOV B,#0AHMUL ABADD A,R4ADDC A,R1LJMP XIANSHITIAO2 :CJNE R2,#0CCH,TIAO4 ;人为地忽略分数MOV A,R3 ;乘法,第二个是符号ANL A,#0FHMOV R3,AMOV B,#0AHMUL ABADD A,R4MOV B,R1MUL ABLJMP XIANSHITIAO4 :CJNE R3,#0CAH,TIAO5;加法,第三个是符号MOV A,R2ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2ADDC A,R4LJMP XIANSHITIAO5 :CJNE R3,#0CBH,TIAO6;减法,第三个是符号MOV A,R2ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2SUBB A,R4LJMP XIANSHITIAO6 :CJNE R3,#0CCH,TIAO7;乘法,第三个是符号MOV A,R2ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2MOV B,R4MUL ABLJMP XIANSHITIAO7 : MOV A,R2 ;除法,第三个是符号ANL A,#0FHMOV R2,AMOV B,#0AHMOV A,R1MUL ABADD A,R2MOV B,R4DIV ABLJMP XIANSHILOOP6: MOVX A,@DPTR ;====ANL A,#0FHJZ LOOP6 ;有键按下?没有则循环等待MOV A,#0A0H ;显示\消隐命令MOVX @DPTR,AMOV A,#40H ;读FIFO命令MOVX @DPTR,AMOV DPTR,#0CFE8H ;读键值MOVX A,@DPTRMOV R6,A ;保存键值MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#85H ;选中LED6MOVX @DPTR,AMOV A,R6ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令MOV A,R1ANL A,#0FHMOV R1,AMOV A,R2ANL A,#0FHMOV R2,AMOV A,R4ANL A,#0FHMOV R4,AMOV A,R5ANL A,#0FHMOV R5,AMOV B,#0AHMOV A,R1MUL ABADD A,R2MOV R7,A ;把12放到R7MOV B,#0AHMOV A,R4MUL ABADD A,R5MOV R1,A ;把45放到R1CJNE R3,#0CAH,JIAN1MOV A,R7ADDC A,R1LJMP XIANSHIJIAN1: CJNE R3,#0CBH,CHENG1MOV A,R7SUBB A,R1LJMP XIANSHICHENG1:CJNE R3,#0CCH,CHU1MOV A,R7MOV B,R1MUL ABLJMP XIANSHICHU1: MOV A,R7MOV B,R1DIV ABLJMP XIANSHIXIANSHI: ;MOV R1,A;MOV DPTR,#00CFE9H ;8279命令字;MOV A,#0D1H ;清显示;MOVX @DPTR,A;MOV A,R1MOV R0,A ;jieguoSUBB A,#64H ;HE 100 BI JIAOJC DENG2 ;XIAOYU 100 TIAOMOV A,R0MOV B,#64H ;SAN WEI SHU QU BAI WEIDIV ABMOV R4,A ;BAI WEI SHU FANG R4MOV A,B ;QU BAI HOU YU SHU GEI aMOV B,#0AHDIV AB ;QU SHI WEIMOV R5,A ;SHI WEI FANG R5MOV R6,B ;GE WEI SHU FANG R6MOV DPTR,#0CFE9H ;写显示RAM命令BAI WEI DENGMOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R4ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;MOV DPTR,#0CFE9H ;写显示RAM命令SHI WEI DENGMOV A,#81H ;选中LED2MOVX @DPTR,AMOV A,R5ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;MOV DPTR,#0CFE9H ;写显示RAM命令GE WEI DENGMOV A,#82H ;选中LED3MOVX @DPTR,AMOV A,R6ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;LJMP LOOP1DENG2 : MOV A,R0CLR C ;上面借位清0SUBB A,#0AHJC DENG3MOV A,R0MOV B,#0AHDIV ABMOV R4,A ;SHI WEI GEI R4MOV R5,B ;GE WEI GEI R5MOV DPTR,#0CFE9H ;写显示RAM命令SHI WEI DENGMOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R4ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;MOV DPTR,#0CFE9H ;写显示RAM命令GE WEI DENGMOV A,#81H ;选中LED2MOVX @DPTR,AMOV A,R5ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;LJMP LOOP1DENG3 : MOV A,R0MOV DPTR,#0CFE9H ;写显示RAM命令MOV A,#80H ;选中LED1MOVX @DPTR,AMOV A,R0ANL A,#0FH ;取后半字节MOV DPTR,#TABMOVC A,@A+DPTR ;取段显码MOV DPTR,#0CFE8H ;写显示RAMMOVX @DPTR,AMOV DPTR,#0CFE9H ;写显示RAM命令;LJMP LOOP1TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;段显码表db 7fh,6fh,77h,7ch,39h,5eh,79h,71hEND。