A37基于51单片机汇编语言简易计算器Proteus设计
作者:单片机仿真   类别:51单片机仿真    日期:2026-10-23 09:02:13    阅读:8 次   消耗积分:15 分

image.png

A37基于51单片机汇编语言简易计算器Proteus设计

用51单片机汇编语言做一个三位数计算器:4×4矩阵键盘输入数字和加减乘除,5位数码管通过串行移位的方式显示,能连续运算、能检测溢出、能一键清零。整个程序不用任何专用外设,全靠查表和加减乘除四条指令。

一、设计实现功能

本设计功能简介:使用51单片机和汇编语言设计一个简易计算器的proteus仿真,要求以下功能:

1、使用汇编语言编写程序。

2、4×4矩阵键盘输入0~9、+、-、*、/、=、清除共16个键。

3、支持三位数以内的加减乘除,可连续运算(上次结果直接参与下次计算)。

4、5位数码管显示输入值和运算结果,溢出时自动清零。

二、资源汇总

1、仿真文件:Proteus工程,7.8和8.6两个版本都能直接打开。

2、程序文件:main.asm汇编源码,以及编译好的cx.hex。

3、修改日期小工具:购买资料后赠送,用于修改文件创建日期,下载地址在文章最后。

三、设计介绍

拿到压缩包之后先解压,没有解压软件的直接搜"压缩",下载解压软件后先解压文件,再运行仿真和程序。

图1 Proteus仿真总览

仿真原理图

键盘接P1,高4位做行扫描、低4位读列,键值0~15依次对应:0~9数字、10加、11减、12乘、13除、14等号、15清除。三字节的键码表放在程序尾部,扫描到哪一位就返回对应的键值。

显示部分没有用并行段码,而是串行移位送出去的:

`asm
DISP: MOV R0,#DBUF ;30H~34H是5位显示缓存
MOV R1,#TEMP+4
MOV R2,#5
DP10: MOV DPTR,#SEGTAB
MOV A,@R0
MOVC A,@A+DPTR ;段码查表
MOV @R1,A
INC R0
DEC R1
DJNZ R2,DP10
MOV R0,#TEMP
MOV R1,#5
DP12: MOV R2,#8
MOV A,@R0
DP13: RLC A ;带进位左移,一位一位往外送
MOV DIN,C ;P3.0数据
CLR CLK ;P3.1时钟
SETB CLK
DJNZ R2,DP13
INC R0
DJNZ R1,DP12
RET
`

RLC A把段码的最高位顶进CY,再送到P3.0,给一个时钟脉冲,移位寄存器就收一位,8位送完一个字节,5个字节送完5位数码管全部刷新。这种方式省IO,两位引脚就能带5位数码管。

输入和运算的状态机由R3记录:按第1个数是个位、第2个是十位、第3个是百位,第4个数字直接判溢出清零。三位数的拼接就是乘10加新数:

`asm
E13: MOV R7,A
MOV B,#10
MOV A,R4
MUL AB ;老值×10
JB OV,E3 ;乘法溢出
ADD A,R7 ;加新数字
JB CY,E3 ;加法进位溢出
MOV R4,A
`

按功能键时,程序把当前功能键和上一次的功能键交换,先算上一次的运算再记下这一次的——这就是"连续运算"能成立的原因:按12+34+,第二次按加号的那一刻,12+34先算出来,结果51留在YJ里,等着加下一个数。

四种运算各有一个分支,都用溢出标志兜底:

运算指令判断
加法ADD A,R4JB CY 溢出
减法SUBB A,R4JB CY 负数也算溢出
乘法MUL ABJB OV 结果超255
除法DIV AB结果取整数部分

因为只用8位累加器,一次运算的结果最大255,所以乘法和加法很容易溢出,溢出就直接跳E3全清。除法是整除,7÷2得3,没有小数——这是这套方案的天花板,想算小数得换成多字节定点或BCD运算。

特别注意: 按键不响应或者一直出同一个数,先看P1的低4位有没有上拉,键盘是"行输出列输入",P1高4位做输出时低4位必须是输入态;显示乱码,检查串行送数的顺序,程序是先从TEMP+4往TEMP倒着查表的,接的是"高位先出",移位寄存器级联顺序反了就会左右颠倒;按下等号没反应,是上一次没按功能键(GONG=0),程序里FIRST分支只在第一次按功能键时把输入值直接送结果;减法出负数会整个清零,这是程序的设计,不是bug;仿真里数码管用74HC595级联,5片串起来,第一片的Q7'接下一片的DS。

四、日期修改

资料中提供修改日期的小工具,购买资料赠送修改文件创建日期的小工具,三个下载地址都在文章最后。

五、资料下载

付费后获取下载链接,直接下载到电脑上,然后解压即可!每个链接前面都配了二维码,手机扫码可以直接跳转。

/

版权所有,转载本站文章请注明出处:proteus单片机
上一篇:A35基于51单片机汇编语言六位密码锁Proteus设计
下一篇:A38基于51单片机汇编语言矩阵按键输入显示Proteus设计
${comment['nickname']}   ${comment['createtime']}
  
       
${comment.content}
${reply.nickname} 回复 ${comment.nickname}    ${reply.createtime}
     
  
回复内容:${reply.content}