基于51单片机的计算器 汇编语言 proteus仿真 数码管显示

之前讲的计算器都是基于C语言的,接下来讲一下基于汇编语言的简易计算器。

硬件设计

附:http://www.jh-tec.cn/archives/7515

显示器仍然是数码管,MCU是C51,支持整数部分的计算
仿真图:

在这里插入图片描述

程序设计

YJ        EQU     50H                 ;结果存放
YJ1       EQU     51H                 ;中间结果存放
GONG      EQU     52H                  ;功能键存放
          ORG     0000H
START:    MOV     R3,#0                ;初始化显示为空
          MOV     GONG,#0      
          MOV     32H,#00H
          MOV     33H,#00H
          MOV     34H,#00H
MLOOP:    CALL    DISP                 ;调显示子程序
WAIT:     CALL    TESTKEY              ;判断有无按键
          JZ      WAIT                 ;判断累加器是否为0 
          CALL    GETKEY              ;读键
          INC     R3                  ;按键个数
          CJNE    A,#0,NEXT1       	  ;判断是否数字键
          LJMP    E1                  ;转数字键处理
NEXT1:    CJNE    A,#1,NEXT2
          LJMP    E1
NEXT2:    CJNE    A,#2,NEXT3
          LJMP    E1
NEXT3:    CJNE    A,#3,NEXT4
          LJMP    E1
NEXT4:    CJNE    A,#4,NEXT5
          LJMP    E1
NEXT5:    CJNE    A,#5,NEXT6
          LJMP    E1
NEXT6:    CJNE    A,#6,NEXT7
          LJMP    E1
NEXT7:    CJNE    A,#7,NEXT8
          LJMP    E1
NEXT8:    CJNE    A,#8,NEXT9
          LJMP    E1
NEXT9:    CJNE    A,#9,NEXT10
          LJMP    E1
NEXT10:   CJNE    A,#10,NEXT11        ;判断是否功能键
          LJMP    E2                  ;转功能键处理
NEXT11:   CJNE    A,#11,NEXT12
          LJMP    E2
NEXT12:   CJNE    A,#12, NEXT13
          LJMP    E2
NEXT13:   CJNE    A,#13,NEXT14
          LJMP    E2
NEXT14:   CJNE    A,#14,NEXT15
          LJMP    E2
NEXT15:   LJMP    E3                   ;判断是否清除键
E1:       CJNE    R3,#1,N1             ;判断第几次按键
          LJMP    E11                  ;为第一个数字
N1:       CJNE    R3,#2,N2
          LJMP    E12                  ;为第二个数字
N2:       CJNE    R3,#3,N3
          LJMP    E13                  ;为第三个数字
N3:       LJMP    E3                   ;第四个数字转溢出
E11:      MOV     R4,A                 ;输入值暂存R4
          MOV     34H,A                ;输入值送显示缓存
          MOV     33H,#00H
          MOV     32H,#00H
          LJMP    MLOOP                ;等待再次输入
E12:      MOV     R7,A                 ;个位数暂存R7
          MOV     B,#10
          MOV     A,R4
          MUL     AB                    ;十位数
          ADD     A,R7
          MOV     R4,A                  ;输入值存R4
          MOV     32H,#00H              ;输入值送显示缓存
          MOV     33H,34H
          MOV     34H,R7
          LJMP    MLOOP					;等待再次输入
E13:      MOV     R7,A
          MOV     B,#10
          MOV     A,R4
          MUL     AB
          JB      OV,E3                ;输入溢出,如果OV等于1则转E3
          ADD     A,R7
          JB      CY,E3                ;输入溢出
          MOV     R4,A
          MOV     32H,33H              ;输入值送显示缓存
          MOV     33H,34H
          MOV     34H,R7
          LJMP    MLOOP
E3:       MOV    R3,#0                 ;按键次数清零
          MOV    R4,#0                 ;输入值清零
          MOV    YJ,#0             	   ;计算结果清零
          MOV    GONG,#0           	   ;功能键设为零      
          MOV    32H,#00H              ;显示清空
          MOV    33H,#00H
          MOV    34H,#00H
          LJMP   MLOOP
E2:        MOV    34H,#00H
           MOV    33H,#00H
           MOV    32H,#00H
           MOV    R0,GONG              ;与上次功能键交换
           MOV    GONG,A
           MOV    A,R0
           CJNE       A,#10,N21            ;判断功能键
           LJMP       JIA                  ;"+"
N21:       CJNE    A,#11,N22
           LJMP       JIAN                  ;"-"
N22:       CJNE     A,#12,N23
           LJMP       CHENG                 ;"*"
N23:       CJNE    A,#13,N24
           LJMP       CHU                   ;"/"
N24:       CJNE    A,#0,N25
           LJMP       FIRST                ;首次按功能键
N25:       LJMP    DEN                     ;"="
N4:        LJMP       E3
FIRST:     MOV     YJ,R4            ;输入值送结果
           MOV     R3,#0             ;按键次数清零
           LJMP       DISP1             ;结果处理
JIA:       MOV     A,YJ              ;上次结果送累加器
           ADD     A,R4              ;上次结果加输入值
           JB      CY,N4             ;溢出
           MOV    YJ,A              ;存本次结果
           MOV    R3,#0             ;按键次数清零
           LJMP       DISP1
JIAN:      MOV     A,YJ
           SUBB       A,R4              ;上次结果减输入值
           JB         CY,N4             ;负数溢出
           MOV    YJ,A
           MOV    R3,#0
           LJMP       DISP1
CHENG:     MOV    A,YJ
           MOV    B,A
           MOV    A,R4
           MUL    AB                ;上次结果乘输入值
           JB     OV,N4             ;溢出
           MOV    YJ,A                 
           LJMP   DISP1
CHU:       MOV    A,R4
           MOV    B,A
           MOV    A,YJ
           DIV    AB                ;上次结果除输入值
           MOV    YJ,A
           MOV    R3,#0
           LJMP   DISP1
DEN:       MOV     R3,#0
           LJMP       DISP1
DISP1:     MOV    B,#10
           MOV    A,YJ              ;结果送累加器
           DIV    AB                ;结果除10
           MOV    YJ1,A             ;暂存"商"
           MOV    A,B               ;取个位数
           MOV    34H,A             ;个位数送显示缓存
           MOV    A,YJ1
           JZ     DISP11            ;结果是否为一位数
           MOV    B,#10
           MOV    A,YJ1
           DIV    AB
           MOV    YJ1,A
           MOV    A,B
           MOV    33H,A             ;十位送显示缓存
           MOV    A,YJ1
           JZ     DISP11            ;结果是否为二位数
           MOV    32H,A             ;百位数送显示缓存
DISP11:    LJMP    MLOOP

### 回答1: 51单片机是一款由英特尔公司设计并制造的微控制器芯片。它具有强大的计算能力和丰富的外设接口,适用于各种嵌入式系统和计算机控制应用。 Proteus是一款著名的虚拟电子设计自动化软件,可以进行电路设计、仿真和PCB布局。在这个软件中,我们可以使用51单片机模型并进行仿真测试。 对于51单片机计算器仿真,我们可以通过Proteus来验证和优化其功能。首先,我们需要在Proteus中创建一个适当的电路图,包含需要的外设,如键盘、显示屏和运算电路等。 接下来,我们可以使用Proteus提供的仿真功能,通过输入不同的测试数据,观察计算器的输出是否与预期相符。在仿真过程中,我们可以通过引入不同的测试用例,测试计算器在不同的情况下的性能和稳定性。 通过Proteus仿真,我们可以验证51单片机计算器的正确性,并发现潜在的问题和缺陷。如果出现问题,我们可以在Proteus中进行调试和修改,以确保计算器的正确运行。 总之,51单片机计算器Proteus仿真是一种有效的验证和优化设计的方法。它可以帮助我们验证计算器的功能和稳定性,并帮助我们在设计阶段发现和解决问题,从而提高计算器的性能和可靠性。 ### 回答2: 51单片机计算器是一种使用51单片机芯片制作的计算器设备。Proteus是一款流行的电子电路设计软件。在仿真过程中,可以使用Proteus来模拟51单片机计算器的运行。 首先,在Proteus中添加一个51单片机芯片,然后将计算器的电路连接到芯片的相应引脚。这些引脚包括计算器的输入按键、显示屏、LED灯和电源等。根据计算器的功能设计,可以将按键输入通过引脚连接到单片机的GPIO口,通过程序控制按键输入的检测和计算。 在Proteus中,可以使用51单片机的IDE来编写计算器的控制程序,该程序可以在单片机上进行仿真和调试。仿真过程中,可以通过模拟按键按下,电路输入和输出等,来测试计算器的各种功能。 通过仿真和调试,可以验证计算器的正确性和可靠性。根据测试结果,可以对计算器的电路和程序进行优化和修复,以实现更好的性能和稳定性。 综上所述,在Proteus中进行51单片机计算器仿真是一种方便有效的方法,可以帮助工程师测试和优化计算器的功能和性能。这样可以减少实际硬件搭建的成本和时间,同时也方便了对计算器的开发和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值