51单片机汇编语言实现0-9的加减法计算器
时间: 2024-03-13 12:47:22 浏览: 185
以下是一个简单的51单片机汇编语言实现0-9的加减法计算器的示例代码:
```
ORG 0H
MOV P0,#0FFH ;设置P0口为输入口
MOV P1,#0H ;设置P1口为输出口
MOV P2,#0H ;设置P2口为输出口
MAIN:
ACALL READ_NUM1 ;读取第一个数字
ACALL READ_NUM2 ;读取第二个数字
ACALL READ_OP ;读取运算符
ACALL CALC ;计算结果
ACALL DISPLAY ;显示结果
SJMP MAIN
READ_NUM1:
MOV R0,#10 ;设置循环次数
MOV A,#0H ;清零累加器
LOOP1:
MOV C,P0.0 ;读取P0.0口的值
JNC LOOP1 ;等待输入
ACALL DELAY ;延时去抖
MOV C,P0.0 ;再次读取P0.0口的值
JNC LOOP1 ;等待输入
ADD A,#0FH ;十进制转换
MOV B,A ;保存累加器的值
MOV A,P0 ;读取输入值
ANL A,#0FH ;取低四位
ADD A,B ;加上之前的结果
MOV B,A ;保存结果
DJNZ R0,LOOP1 ;循环10次结束
RET
READ_NUM2:
MOV R0,#10 ;设置循环次数
MOV A,#0H ;清零累加器
LOOP2:
MOV C,P0.0 ;读取P0.0口的值
JNC LOOP2 ;等待输入
ACALL DELAY ;延时去抖
MOV C,P0.0 ;再次读取P0.0口的值
JNC LOOP2 ;等待输入
ADD A,#0FH ;十进制转换
MOV B,A ;保存累加器的值
MOV A,P0 ;读取输入值
ANL A,#0FH ;取低四位
ADD A,B ;加上之前的结果
MOV B,A ;保存结果
DJNZ R0,LOOP2 ;循环10次结束
RET
READ_OP:
MOV R0,#10 ;设置循环次数
LOOP3:
MOV C,P0.0 ;读取P0.0口的值
JNC LOOP3 ;等待输入
ACALL DELAY ;延时去抖
MOV C,P0.0 ;再次读取P0.0口的值
JNC LOOP3 ;等待输入
MOV A,P0 ;读取输入值
CPL A ;取反
ANL A,#0FH ;取低四位
CJNE A,#0EH,LOOP3 ;如果输入的不是+或-,重新输入
MOV B,A ;保存运算符
RET
CALC:
MOV A,B ;读取运算符
CJNE A,#0DH,ADD1 ;如果是+,跳转到ADD1
MOV A,R1 ;读取第一个数字
ADD A,R2 ;加上第二个数字
MOV R3,A ;保存结果
SJMP CALC_END
ADD1:
MOV A,R1 ;读取第一个数字
SUBB A,R2 ;减去第二个数字
MOV R3,A ;保存结果
CALC_END:
RET
DISPLAY:
MOV A,R3 ;读取结果
MOV R0,#10 ;设置循环次数
LOOP4:
MOV B,#0AH ;除以10
DIV AB
MOV P2,B ;输出余数
INC P1 ;P1口指向下一位
DJNZ R0,LOOP4 ;循环10次结束
RET
DELAY:
MOV R7,#0FFH
DELAY_LOOP:
DJNZ R7,DELAY_LOOP
RET
END
```
这个程序通过检测P0.0口的状态,读取用户输入的数字和运算符,并通过P2口输出余数,P1口控制位数,从而实现了一个简单的0-9加减法计算器。
阅读全文