基于51单片机的计算器 汇编语言

最新更新时间:2022-03-06来源: eefocus关键字:51单片机  计算器  汇编语言 手机看文章 扫描二维码
随时随地手机看文章

之前讲的计算器都是基于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             ;按键次数清零

[1] [2]
关键字:51单片机  计算器  汇编语言 编辑:什么鱼 引用地址:基于51单片机的计算器 汇编语言

上一篇:基于51单片机的简易摇号抽奖机器
下一篇:基于51单片机的多功能计算器,支持二八十进制小数负数计算

推荐阅读

51单片机的内部结构及其功能作用
中央处理器(CPU):刚跟大家讲过,需要提醒的是MCS-51的CPU能处理8位二进制数或代码。CPU是单片机的主要核心部件,在CPU里面包含了运算器、控制器以及若干寄存器等部件给成。内部数据存储器(RAM):MCS-51单片机芯片共有256个RAM单元,其中后128单元被专用寄存器占用(稍后我们详解),能作为寄存器供用户使用的只是前128单元,用于存放可读写的数据。因此通常所说的内部数据存储器就是指前128单元,简称内部RAM。地址范围为00H~FFH(256B)。是一个多用多功能数据存储器,有数据存储、通用工作寄存器、堆栈、位地址等空间。内部程序存储器(ROM):在前面也已讲过,MCS-51内部有4KB/8KB字节的ROM(51系
发表于 2022-12-05
<font color='red'>51单片机</font>的内部结构及其功能作用
51单片机知识重点汇总一,学单片机必须要了解的知识。
主要性能:  与MCS-51单片机产品兼容 、8K字节在系统可编程Flash存储器、 1000次擦写周期、全静态操作:0Hz~33Hz 、三级加密程序存储器 、 32个可编程I/O口线、三个16位定时器/计数器八个中断源、全双工UART串行通道、 低功耗空闲和掉电模式 、掉电后中断可唤醒 、看门狗定时器 、双数据指针、掉电标识符 。一、STC89C51单片机外部引脚简介电源及时钟引脚:Vcc(40脚)、GND(20脚)、XTAL1(19脚)、XTAL2(18脚)。Vcc、GND——单片机电源引脚,不同的型号单片机接入对应电压电源,常压为+5V,低压为+3.3V。XTAL1、XTAL2——外接时钟引脚。XTAL1为片内震荡电路的输入端
发表于 2022-11-17
单片机led灯闪烁实验总结_玩转51单片机(1):点亮led灯
01新建工程与点亮LED小灯,LED小灯即发光二极管,它具有单向导电性,对于发光二极管而言,需要根据它的压降与额定电流来选择合适的限流电阻,打开Keil4软件,选择Project,New uVision Project选定工程的保存路径,并给工程命名,保存类型默认.uvproj,点击保存出现如下对话框,点击下拉按钮,选择STC MCU Database,点击OK选择STC89C52RC,点击OK选择否点击New,生成一个Text1文件点击 File, Save, 出现如下对话框,将文件命名为后缀为.c的文件,默认保存类型,点击保存点击Target 1前面的加号,在Source Group 1上右击,选择Add Files to Gr
发表于 2022-11-14
单片机led灯闪烁实验总结_玩转<font color='red'>51单片机</font>(1):点亮led灯
51单片机】1602自定义字符原理及示例(”汉“、爱心及摄氏度示例)
原理设置1602屏幕的对比度的时候我们能够看到5*8的点阵,其实液晶显示的都是字符的字模(下图),而CGROM里面都是已经定义好的,只能读不能写,而RAM是可以读写的所以我们只要将我们自定义的字符字模写入对应的CGRAM中就好,CGRAM一共有8个对应的地址分别为(0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78),因为每个字模对应8行所以每写完一个字模以后要加8,按照指令写入CGRAM时需要加0x40所以对应地址就如上了,然而其实CGRAM的实际地址是0x00-0x07所以在后面写入数据的时候需要按照实际地址来写入。CGROM中的字模也是同样的原理 字模代码:1602显示模式为5*7点阵型,字模代码
发表于 2022-11-12
【<font color='red'>51单片机</font>】1602自定义字符原理及示例(”汉“、爱心及摄氏度示例)
51单片机】1602 CGRAM、CGROM及DDRAM的作用
CGRAM : 允许用户自建字模区的空间。从CGROM表上可以看到,在表的最左边是一列可以允许用户自定义的CGRAM,从上往下看着是16个,实际只有8个字节可用。它的字符码是00000000-00000111这8个地址,表的下面还有8个字节,但因为这个CGRAM的字符码规定0-2位为地址,3位无效,4-7全为零(表上的高位)。因此CGRAM的字符码只有最后三位能用也就是8个字节了。等效为0000X111,X为无效位,最后三位为000-111共8个。CGROM : 字模存储用空间。你要显示某个ASCII字符时,要显示字符的字模就存在这里。DDRAM : 显示用RAM。直接和屏幕上的点相对应。屏幕上的一个点和DDRAM中的一个位对应。1
发表于 2022-11-12
【<font color='red'>51单片机</font>】1602 CGRAM、CGROM及DDRAM的作用
51单片机】 数据管显示HELLO
软件准备+硬件准备软件:1.Keil软件v6.12(与书中版本保持一致方便学习,如果喜欢别的版本也可以下载别的)2. STC-ISP(将十六进制代码写到单片机上)硬件:TX-1C(书本推荐,并非本人广告)【学习单片机,你起码得有块单片机的板子吧…也不一定是自己的,借别人的也可以】HELLO.程序#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit dula=P2^6; //申明U1锁存器的锁存端sbit wela=P2^7; //申明U2锁存器的锁存端void delayms(u
发表于 2022-11-12
【<font color='red'>51单片机</font>】 数据管显示HELLO

推荐帖子

电感线圈能感应多少电压求助
下图这个线圈能感应出多少电压;是怎么确定的。请高手指教一下 电感线圈能感应多少电压求助
NJMKL 电源技术
AD转换中电压读数
写AD转换时想输出5v电压,用的公式为b=m*500/255/100; s=m*500/255%100/10; g=m*500/255%10;但是调节变阻器,最大输出电压为2.5v,如果改成128,则输出5v左右,想问下这种变换公式改怎么写?为什么除以255就不对呢 AD转换中电压读数
skyman_liu 51单片机
51单片机求教:外部Flash、RAM的读写问题
假如51外挂一块Flash,一块RAM。应用程序存在外部的Flash里面 我写一段引导程序,让51上电后,把程序从Flash复制到RAM里,然后执行 现在有几个问题比较困惑: 1按一般介绍,程序都是放在ROM里,如果把程序写到RAM里,将PC指向程序首行,是否也能正常执行?除了掉电程序丢失之外,是否和在ROM里执行没有区别? 2从Flash复制程序时,怎么判断复制完了?是不是需要人为在程序结尾加个自定义的标志,然后只要读到这个标志,就表示复制完成? 简单的问题,新手求教,多谢!5
czk037 嵌入式系统
WINCE关于寄存器值打印
最近在做WINCE下SDHC方面的测试,其中加了一些RETAILMSG/DEBUGMSG打印信息,结果发现从示波器中的返回值和寄存器SDIRSP0中的值不一样,根据SDIO协议R4的响应没有问题,但为什么寄存器中的值和想象中的不一样呢,有知道帮帮忙WINCE关于寄存器值打印
jw_1001 WindowsCE
谈双绞线、同轴电缆、光纤的区别及使用
1、同轴电缆 同轴电缆具有价格较便宜、铺设较方便的优点(相对于光纤而言),所以,一般在小范围的监控系统中,由于传输距离很近,使用同轴电缆直接传送监控图象对图象质量的损伤不大,能满足实际要求。 但是,根据对同轴电缆自身特性的分析,当信号在同轴电缆内传输时其受到的衰减与传输距离和信号本身的频率有关。一般来讲,信号频率越高,衰减越大。视频信号的带宽很大,达到6MHz,并且,图象的色彩部分被调制在频率高端,这样,视频信号在同轴电缆内传输时不仅信号整体幅度受到衰减,而且各频率分量衰减量相差
xyh_521 安防电子
【花雕动手做】有趣好玩的音乐可视化系列小项目(26)--LED 超立方体
本帖最后由eagler8于2022-10-508:59编辑 偶然心血来潮,想要做一个声音可视化的系列专题。这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累些有用的音乐频谱可视化的资料,也会争取成型一些实用好玩的音乐可视器项目。超级立方体,还有一种称呼叫做LED无限魔方的英文是LEDInfinityCube,大概说的都是一种三维或多维镜像LED灯。在前期音乐可视化系列2
eagler8 DIY/开源硬件专区
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved