历史上的今天
返回首页

历史上的今天

今天是:2024年12月30日(星期一)

正在发生

2021年12月30日 | 基于51单片机的计算器 汇编语言

2021-12-30 来源:eefocus

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


硬件设计


显示器仍然是数码管,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             ;按键次数清零

推荐阅读

史海拾趣

Equinox公司的发展小趣事

随着时间的推移,Equinox的成功吸引了越来越多的投资者。公司开始寻求全球扩张的机会,并在不同国家和地区开设新的健身俱乐部。同时,Equinox还推出了多个子品牌,如E By Equinox、SoulCycle等,以满足不同消费者的需求。这些品牌涵盖了从高端豪华到平价实惠的全方位市场,进一步巩固了Equinox在健身行业的领先地位。

Foxboro I C T Inc公司的发展小趣事

1991年,在纽约的上西区,一个名叫Equinox的健身俱乐部悄然开业。它的创始人凭借对健身行业的热情和对高端市场的敏锐洞察,将Equinox定位为一家提供豪华健身体验的俱乐部。通过提供优质的设施、个性化的服务和丰富的课程,Equinox很快在上西区树立了良好的口碑。

Cyrustek公司的发展小趣事

随着全球化的不断推进,Cyrustek公司也积极实施全球化战略。通过与国际知名企业的合作和技术交流,Cyrustek不断引进先进的技术和管理经验,提升自身的核心竞争力。同时,Cyrustek还积极开拓国际市场,将产品销往全球各地。这种全球化战略不仅帮助Cyrustek扩大了市场份额,也提高了其品牌知名度和影响力。

Advanced Electronic Packaging公司的发展小趣事

随着公司技术的不断进步,Advanced Electronic Packaging公司开始寻求与行业内知名厂商的合作机会。通过与一家全球领先的电子产品制造商达成战略合作,公司成功将其先进的封装技术应用于对方的高端产品线中。这一合作不仅提升了合作双方的产品竞争力,还为Advanced Electronic Packaging公司带来了可观的利润回报。此后,公司陆续与多家知名企业建立了合作关系,进一步巩固了其在电子封装领域的市场地位。

Defense Logistics Agency公司的发展小趣事

Defense Logistics Agency(DLA)于1961年成立,是美国国防部(DOD)的一个独立作战支援机构。在成立初期,DLA就明确了其战略定位:为全球范围内的美军及国防部其他部门提供统一、高效的后勤保障服务。这一战略定位的确立,为DLA的后续发展指明了方向。

明波通信(BWAVE)公司的发展小趣事

随着汽车产业的快速发展,车载电子系统成为了新的增长点。明波通信凭借在通信领域的深厚积累,迅速拓展车载电子系统业务。公司成功开发了车载导航、车载音响系统等项目,并与多家知名汽车厂商建立了合作关系。这一举措不仅为明波通信带来了新的增长点,也进一步巩固了其在电子行业的地位。

问答坊 | AI 解惑

新买的STC12C5412AD下载时提示MCU型号错,不知道是什么原因?

  在淘宝新买的stc12c5412ad用STC-ISP软件下载时提示MCU型号错,请重选,我试了几块都是这样,而且型号是选对了呀!我用以前买的stc12c5404ad下载又可以,不知道是什么原因?难道芯片有假?不会吧!应该是我哪里出了问题,请各位大虾帮帮 ...…

查看全部问答>

PCB设计时铜箔厚度,走线宽度和电流的关系

PCB设计时铜箔厚度,走线宽度和电流的关系 {转}…

查看全部问答>

怎样生成DSP可执行文件

我已经编写好C代码,我怎样利用CCS生成.out文件和 .cmd文件呢??…

查看全部问答>

关于NAND启动代码的一些疑问

NAND启动代码         ldr        r0, =BWSCON         ldr        r0, [r0]         ands        r0, r0, #6  ...…

查看全部问答>

初学单片机,要学哪些知识

初学单片机,要学哪些知识 学习过程是什么,看那些书啊 说的详细点,比如入门学什么,提高学什么等 另外这个行业发展怎样 …

查看全部问答>

驱动编译问题,跪求答案?

编译提示信息如下: 1>------ 已启动生成: 项目: Inline_ObOpenObjectByPointer.WXP, 配置: WXP checked Win32 ------ 1>正在执行生成文件项目操作 1>OSR DDKBUILD.CMD V7.2 (2008-04-14) - OSR, Open Systems Resources, Inc. 1>DDKBLD: >> Se ...…

查看全部问答>

大虾们,来救火啊,600分求8139驱动,帮顶有分!!!

急死了,产品到最后调试发现驱动不支持Multicast 要求: 1 vxWorks环境 2 能支持Multicast、TCP、UDP 给出源码的400分,提供重要参考的100分 另开贴结分,谢了先 …

查看全部问答>

如何能使用常规思维编程

剑走偏锋和非常规思维并不总是什么光彩的事情,因为你考虑的东西到底没有别人考虑的周全——一个人怎么比得上一群人呢?但是,有时候,真的不是我故意耍酷或者标新立异,才使用什么什么 非常规思维。然而,我的上司在看我的代码时,得出的结论总是 ...…

查看全部问答>

学习Hercules TMS570LS步步入门

一、HALCoGen工具 下载地址:http://www.ti.com/tool/halcogen       CCS编译环境 下载地址: http://processors.wiki.ti.com/index.php/Download_CCS 二、步步入门资料      TMS570LS Microcontroll ...…

查看全部问答>

学模拟+谁是音频时钟的“老板”?

本帖最后由 dontium 于 2015-1-23 11:39 编辑 谁是音频时钟的“老板”? deyisupport./blog/b/analogwire/archive/2013/11/20/51578.aspx 看了这篇文章,学习了很多,感谢作者的分享。。。 有以下总结: 第一,IIS的本质是同步的搬运音频数 ...…

查看全部问答>