历史上的今天
今天是: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 ;按键次数清零
史海拾趣
|
新买的STC12C5412AD下载时提示MCU型号错,不知道是什么原因? 在淘宝新买的stc12c5412ad用STC-ISP软件下载时提示MCU型号错,请重选,我试了几块都是这样,而且型号是选对了呀!我用以前买的stc12c5404ad下载又可以,不知道是什么原因?难道芯片有假?不会吧!应该是我哪里出了问题,请各位大虾帮帮 ...… 查看全部问答> |
|
编译提示信息如下: 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 ...… 查看全部问答> |
|
急死了,产品到最后调试发现驱动不支持Multicast 要求: 1 vxWorks环境 2 能支持Multicast、TCP、UDP 给出源码的400分,提供重要参考的100分 另开贴结分,谢了先 … 查看全部问答> |
|
剑走偏锋和非常规思维并不总是什么光彩的事情,因为你考虑的东西到底没有别人考虑的周全——一个人怎么比得上一群人呢?但是,有时候,真的不是我故意耍酷或者标新立异,才使用什么什么 非常规思维。然而,我的上司在看我的代码时,得出的结论总是 ...… 查看全部问答> |
|
一、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的本质是同步的搬运音频数 ...… 查看全部问答> |




