【说明】
这是嵌入式课程的一个小作业,用C51单片机,实现了0-255内的简易四则运算,暂不支持负数、溢出等特殊情况的处理。
【关键点】
1、计算器用R5、R6、R7三位显示,段码为0,全暗,段码为0xff,全亮。
2、R3用于保存运算符
3、两数都用B压入栈中,最后取结果时可以分别弹出,并根据操作符计算。
4、程序在两数的第一位默认都输入数字,其他位置皆可复位。
5、一次计算完成后、按任意键复位。
【键盘位置】
代码:
;3位0-255计算器,支持四则运算
;按键有0-9、+、-、*、/、复位、=
;R5,R6,R7分别用于显示三位
;暂不支持负数、溢出处理
ORG 0000H
LJMP START
WC EQU P0 ;数码管位控
DC EQU P1 ;数码管段控
KC EQU P2 ;键盘检测
ORG 0030H
START:
MOV R5, #0
MOV R6, #0
MOV R7, #0
N1_B1:
ACALL KEYDOWN
CJNE R4, #0x10, PRO1 ;检测到按键做相应处理
ACALL DISPLAY
JMP N1_B1 ;否则继续检测
PRO1:
MOV A, R4
MOV R0, A
MOV DPTR, #DCODE
MOVC A, @A+DPTR
MOV R5, A
N1_B2:
ACALL DISPLAY
ACALL KEYDOWN
CJNE R4, #0x10, PRO2 ;检测按键,有键按下做相应处理
JMP N1_B2
PRO2:
MOV A, R4
ACALL JUDGE_OPER ;检查是否为操作符
CJNE R3, #0x04, CON1 ;是清除键,直接复位
JMP START
CON1:
CJNE R3, #0x06, PRO3 ;是操作符,跳转到PRO3
MOV A, R4 ;是数字
MOV R1, A
MOV DPTR, #DCODE
MOVC A, @A+DPTR
MOV R6, A
MOV R4, #0x10
JMP N1_B3
PRO3:
MOV B, R0 ;将num1的结果保存在B中
PUSH B
JMP N2_B1