基于51单片机的计算器 汇编语言 proteus仿真 数码管显示
之前讲的计算器都是基于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仿真 数码管显示相关推荐
- 基于51单片机MPX4115的压力测量仪proteus仿真 数码管显示
硬件设计 (末尾附文件) 总体设计方案 本次设计是基于8051单片机的测量与显示.利用传感器将压力转换为电信号后,在经过ADC0832的模数转换器经A/D转换后由单片机进行有效处理,然后用数码管进行显 ...
- 基于51单片机的波形发生器proteus仿真数码管LCD12864显示
仿真图1简介: 本系统采用51单片机作为系统的MCU(具体型号见下图),该系统显示器为四位数码管,可实时显示波形的参数情况 可显示四种波形,分别是方波.正弦波.三角波.锯齿波. 该设计具有电压表功能, ...
- 【019】基于51单片机的交通灯Proteus仿真设计
一.资料内容 (1).基于51单片机的交通灯proteus仿真设计一份: (2).基于51单片机的交通灯proteus仿真设计keli源代码一份: (3).基于51单片机的交通灯proteus仿真设计 ...
- 【034】基于51单片机的HX711电子秤Proteus仿真设计
一.压缩包资料内容 (1).基于51单片机的HX711电子秤proteus仿真设计一份: (2).基于51单片机的HX711电子秤proteus仿真设计keli源代码一份: (3).基于51单片机的H ...
- 基于51单片机的烟雾火灾报警器proteus仿真设计
基于51单片机的烟雾火灾报警器proteus仿真设计 1 开发环境 仿真图:proteus8.9以上 程序代码:KEIL4/KEIL5 原理图:AD 设计编号:A0004 代码讲解+仿真讲解+仿真演示 ...
- 【002】基于51单片机的电子万年历proteus仿真设计
一.资料内容(私信获取) (1).基于51单片机的电子万年历proteus仿真设计一份: (2).基于51单片机的电子万年历proteus仿真设计keli源代码一份: (3).基于51单片机的电子万年 ...
- 【008】【毕业设计】基于51单片机的烟雾报警系统proteus仿真与实物设计
一.压缩包资料内容(私信获取) (1).基于51单片机的烟雾报警系统proteus仿真设计一份: (2).基于51单片机的烟雾报警系统proteus仿真设计keli源代码一份: (3).基于51单片 ...
- 【013】【毕业设计】基于51单片机的节能路灯proteus仿真设计
一.资料内容(私信) (1).基于51单片机的节能路灯proteus仿真设计一份: (2).基于51单片机的节能路灯proteus仿真设计keli源代码一份: (3).基于51单片机的节能路灯pro ...
- 基于51单片机多路温度检测proteus仿真 ds18b20
本设计是基于51单片机多路温度检测proteus仿真_ds18b20(仿真+程序+原理图) 仿真图proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:C0042 ...
最新文章
- mysql 字段存放小图标_让MySQL支持emoji图标存储
- python自增_如何在python语言实现自增和自减功能并显示结果
- 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态
- 基于Bootstrap 3.x的免费高级管理控制面板主题:AdminLTE
- 通过cmd命令,杀掉占用端口号的进程
- java压缩源代码_【免费毕设】JAVA文件压缩与解压缩实践(源代码+论文)
- 结构体06:结构体const使用场景
- hdu 1686(标准的kmp,可当模板)
- 理解AI:为什么要在人工智能系统中寻求可解释性呢?
- 替换文本框文字html,js替换选中的文字,兼容所有浏览器
- 区块链+区域性股权市场:背景、思路与模式探索
- 动态html函数的写法,如何将html div id的动态传递给js函数
- 微信小程序~textarea字数限制与计算
- 关于配眼镜的一点认识
- 张孝祥整理Java就业面试题大全
- 在浏览器地址栏输入一个URL后回车,执行的全部过程
- 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第四篇)飞行特性
- 温度场有限容积法程序入门之六:后处理.花絮.Contour Plotter and 3D Function Grapher Together - the Applet and the Souce Co
- 动画《魁拔妖侠传》反思
- C语言:找出10000以内所有的素数(质数)
热门文章
- 7 win 卸载node_win10inode卸载不了
- C# 操作地址 从内存中读取写入数据(初级)
- 基于HTML+CSS+JavaScript制作美食文化网站 ——卡通创意的烧烤(5个页面) html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计...
- 室内定位技术之UWB(超宽带):精确人员/物资定位解决方案
- html5 canvas drawImage图片模糊
- 30个寓意丰富的LOGO设计作品欣赏
- w8计算机主程序在哪里,Win8怎么打开运行窗口_Win8运行在哪里打开?-192路由网
- 教你怎样把在网上看到的视频下到电脑上
- 【Unity3D游戏开发】之多语言缩写对应表 (十五)
- vue系列:Vue核心概念及特性 (一)