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

硬件设计

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

程序设计

YJ        EQU     50H                 ;结果存放
YJ1       EQU     51H                 ;中间结果存放
GONG      EQU     52H                  ;功能键存放ORG     0000H
START:    MOV     R3,#0                ;初始化显示为空MOV     GONG,#0      MOV     32H,#00HMOV     33H,#00HMOV     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,NEXT2LJMP    E1
NEXT2:    CJNE    A,#2,NEXT3LJMP    E1
NEXT3:    CJNE    A,#3,NEXT4LJMP    E1
NEXT4:    CJNE    A,#4,NEXT5LJMP    E1
NEXT5:    CJNE    A,#5,NEXT6LJMP    E1
NEXT6:    CJNE    A,#6,NEXT7LJMP    E1
NEXT7:    CJNE    A,#7,NEXT8LJMP    E1
NEXT8:    CJNE    A,#8,NEXT9LJMP    E1
NEXT9:    CJNE    A,#9,NEXT10LJMP    E1
NEXT10:   CJNE    A,#10,NEXT11        ;判断是否功能键LJMP    E2                  ;转功能键处理
NEXT11:   CJNE    A,#11,NEXT12LJMP    E2
NEXT12:   CJNE    A,#12, NEXT13LJMP    E2
NEXT13:   CJNE    A,#13,NEXT14LJMP    E2
NEXT14:   CJNE    A,#14,NEXT15LJMP    E2
NEXT15:   LJMP    E3                   ;判断是否清除键
E1:       CJNE    R3,#1,N1             ;判断第几次按键LJMP    E11                  ;为第一个数字
N1:       CJNE    R3,#2,N2LJMP    E12                  ;为第二个数字
N2:       CJNE    R3,#3,N3LJMP    E13                  ;为第三个数字
N3:       LJMP    E3                   ;第四个数字转溢出
E11:      MOV     R4,A                 ;输入值暂存R4MOV     34H,A                ;输入值送显示缓存MOV     33H,#00HMOV     32H,#00HLJMP    MLOOP                ;等待再次输入
E12:      MOV     R7,A                 ;个位数暂存R7MOV     B,#10MOV     A,R4MUL     AB                    ;十位数ADD     A,R7MOV     R4,A                  ;输入值存R4MOV     32H,#00H              ;输入值送显示缓存MOV     33H,34HMOV     34H,R7LJMP    MLOOP                    ;等待再次输入
E13:      MOV     R7,AMOV     B,#10MOV     A,R4MUL     ABJB      OV,E3                ;输入溢出,如果OV等于1则转E3ADD     A,R7JB      CY,E3                ;输入溢出MOV     R4,AMOV     32H,33H              ;输入值送显示缓存MOV     33H,34HMOV     34H,R7LJMP    MLOOP
E3:       MOV    R3,#0                 ;按键次数清零MOV    R4,#0                 ;输入值清零MOV    YJ,#0                  ;计算结果清零MOV    GONG,#0               ;功能键设为零      MOV    32H,#00H              ;显示清空MOV    33H,#00HMOV    34H,#00HLJMP   MLOOP
E2:        MOV    34H,#00HMOV    33H,#00HMOV    32H,#00HMOV    R0,GONG              ;与上次功能键交换MOV    GONG,AMOV    A,R0CJNE       A,#10,N21            ;判断功能键LJMP       JIA                  ;"+"
N21:       CJNE    A,#11,N22LJMP       JIAN                  ;"-"
N22:       CJNE     A,#12,N23LJMP       CHENG                 ;"*"
N23:       CJNE    A,#13,N24LJMP       CHU                   ;"/"
N24:       CJNE    A,#0,N25LJMP       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,YJSUBB       A,R4              ;上次结果减输入值JB         CY,N4             ;负数溢出MOV    YJ,AMOV    R3,#0LJMP       DISP1
CHENG:     MOV    A,YJMOV    B,AMOV    A,R4MUL    AB                ;上次结果乘输入值JB     OV,N4             ;溢出MOV    YJ,A                 LJMP   DISP1
CHU:       MOV    A,R4MOV    B,AMOV    A,YJDIV    AB                ;上次结果除输入值MOV    YJ,AMOV    R3,#0LJMP   DISP1
DEN:       MOV     R3,#0LJMP       DISP1
DISP1:     MOV    B,#10MOV    A,YJ              ;结果送累加器DIV    AB                ;结果除10MOV    YJ1,A             ;暂存"商"MOV    A,B               ;取个位数MOV    34H,A             ;个位数送显示缓存MOV    A,YJ1JZ     DISP11            ;结果是否为一位数MOV    B,#10MOV    A,YJ1DIV    ABMOV    YJ1,AMOV    A,BMOV    33H,A             ;十位送显示缓存MOV    A,YJ1JZ     DISP11            ;结果是否为二位数MOV    32H,A             ;百位数送显示缓存
DISP11:    LJMP    MLOOP

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

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

  1. 基于51单片机MPX4115的压力测量仪proteus仿真 数码管显示

    硬件设计 (末尾附文件) 总体设计方案 本次设计是基于8051单片机的测量与显示.利用传感器将压力转换为电信号后,在经过ADC0832的模数转换器经A/D转换后由单片机进行有效处理,然后用数码管进行显 ...

  2. 基于51单片机的波形发生器proteus仿真数码管LCD12864显示

    仿真图1简介: 本系统采用51单片机作为系统的MCU(具体型号见下图),该系统显示器为四位数码管,可实时显示波形的参数情况 可显示四种波形,分别是方波.正弦波.三角波.锯齿波. 该设计具有电压表功能, ...

  3. 【019】基于51单片机的交通灯Proteus仿真设计

    一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...

  4. 【034】基于51单片机的HX711电子秤Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的HX711电子秤proteus仿真设计一份: (2).基于51单片机的HX711电子秤proteus仿真设计keli源代码一份: (3).基于51单片机的H ...

  5. 基于51单片机的烟雾火灾报警器proteus仿真设计

    基于51单片机的烟雾火灾报警器proteus仿真设计 1 开发环境 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0004 代码讲解+仿真讲解+仿真演示 ...

  6. 【002】基于51单片机的电子万年历proteus仿真设计

    一.资料内容(私信获取) (1).基于51单片机的电子万年历proteus仿真设计一份: (2).基于51单片机的电子万年历proteus仿真设计keli源代码一份: (3).基于51单片机的电子万年 ...

  7. 【008】【毕业设计】基于51单片机的烟雾报警系统proteus仿真与实物设计

    ​一.压缩包资料内容(私信获取) (1).基于51单片机的烟雾报警系统proteus仿真设计一份: (2).基于51单片机的烟雾报警系统proteus仿真设计keli源代码一份: (3).基于51单片 ...

  8. 【013】【毕业设计】基于51单片机的节能路灯proteus仿真设计

    ​一.资料内容(私信) (1).基于51单片机的节能路灯proteus仿真设计一份: (2).基于51单片机的节能路灯proteus仿真设计keli源代码一份: (3).基于51单片机的节能路灯pro ...

  9. 基于51单片机多路温度检测proteus仿真 ds18b20

    本设计是基于51单片机多路温度检测proteus仿真_ds18b20(仿真+程序+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0042 ...

最新文章

  1. mysql 字段存放小图标_让MySQL支持emoji图标存储
  2. python自增_如何在python语言实现自增和自减功能并显示结果
  3. 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态
  4. 基于Bootstrap 3.x的免费高级管理控制面板主题:AdminLTE
  5. 通过cmd命令,杀掉占用端口号的进程
  6. java压缩源代码_【免费毕设】JAVA文件压缩与解压缩实践(源代码+论文)
  7. 结构体06:结构体const使用场景
  8. hdu 1686(标准的kmp,可当模板)
  9. 理解AI:为什么要在人工智能系统中寻求可解释性呢?
  10. 替换文本框文字html,js替换选中的文字,兼容所有浏览器
  11. 区块链+区域性股权市场:背景、思路与模式探索
  12. 动态html函数的写法,如何将html div id的动态传递给js函数
  13. 微信小程序~textarea字数限制与计算
  14. 关于配眼镜的一点认识
  15. 张孝祥整理Java就业面试题大全
  16. 在浏览器地址栏输入一个URL后回车,执行的全部过程
  17. 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第四篇)飞行特性
  18. 温度场有限容积法程序入门之六:后处理.花絮.Contour Plotter and 3D Function Grapher Together - the Applet and the Souce Co
  19. 动画《魁拔妖侠传》反思
  20. C语言:找出10000以内所有的素数(质数)

热门文章

  1. 7 win 卸载node_win10inode卸载不了
  2. C# 操作地址 从内存中读取写入数据(初级)
  3. 基于HTML+CSS+JavaScript制作美食文化网站 ——卡通创意的烧烤(5个页面) html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计...
  4. 室内定位技术之UWB(超宽带):精确人员/物资定位解决方案
  5. html5 canvas drawImage图片模糊
  6. 30个寓意丰富的LOGO设计作品欣赏
  7. w8计算机主程序在哪里,Win8怎么打开运行窗口_Win8运行在哪里打开?-192路由网
  8. 教你怎样把在网上看到的视频下到电脑上
  9. 【Unity3D游戏开发】之多语言缩写对应表 (十五)
  10. vue系列:Vue核心概念及特性 (一)