200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 基于51单片机的计算器 汇编语言 proteus仿真 数码管显示

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

时间:2021-02-08 09:38:04

相关推荐

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

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

硬件设计

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

仿真图:

程序设计

YJ EQU50H ;结果存放YJ1 EQU51H ;中间结果存放GONGEQU52H ;功能键存放ORG0000HSTART: MOVR3,#0;初始化显示为空MOVGONG,#0MOV32H,#00HMOV33H,#00HMOV34H,#00HMLOOP: CALL DISP ;调显示子程序WAIT:CALL TESTKEY ;判断有无按键JZWAIT ;判断累加器是否为0 CALL GETKEY ;读键INCR3 ;按键个数CJNE A,#0,NEXT1 ;判断是否数字键LJMP E1 ;转数字键处理NEXT1: CJNE A,#1,NEXT2LJMP E1NEXT2: CJNE A,#2,NEXT3LJMP E1NEXT3: CJNE A,#3,NEXT4LJMP E1NEXT4: CJNE A,#4,NEXT5LJMP E1NEXT5: CJNE A,#5,NEXT6LJMP E1NEXT6: CJNE A,#6,NEXT7LJMP E1NEXT7: CJNE A,#7,NEXT8LJMP E1NEXT8: CJNE A,#8,NEXT9LJMP E1NEXT9: CJNE A,#9,NEXT10LJMP E1NEXT10: CJNE A,#10,NEXT11 ;判断是否功能键LJMP E2 ;转功能键处理NEXT11: CJNE A,#11,NEXT12LJMP E2NEXT12: CJNE A,#12, NEXT13LJMP E2NEXT13: CJNE A,#13,NEXT14LJMP E2NEXT14: CJNE A,#14,NEXT15LJMP E2NEXT15: 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:MOVR4,A ;输入值暂存R4MOV34H,A;输入值送显示缓存MOV33H,#00HMOV32H,#00HLJMP MLOOP;等待再次输入E12:MOVR7,A ;个位数暂存R7MOVB,#10MOVA,R4MULAB;十位数ADDA,R7MOVR4,A ;输入值存R4MOV32H,#00H ;输入值送显示缓存MOV33H,34HMOV34H,R7LJMP MLOOP;等待再次输入E13:MOVR7,AMOVB,#10MOVA,R4MULABJBOV,E3;输入溢出,如果OV等于1则转E3ADDA,R7JBCY,E3;输入溢出MOVR4,AMOV32H,33H ;输入值送显示缓存MOV33H,34HMOV34H,R7LJMP MLOOPE3: MOV R3,#0 ;按键次数清零MOV R4,#0 ;输入值清零MOV YJ,#0;计算结果清零MOV GONG,#0 ;功能键设为零MOV 32H,#00H ;显示清空MOV 33H,#00HMOV 34H,#00HLJMP MLOOPE2: 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: CJNEA,#12,N23LJMP CHENG ;"*"N23: CJNE A,#13,N24LJMP CHU ;"/"N24: CJNE A,#0,N25LJMP FIRST;首次按功能键N25: LJMP DEN ;"="N4: LJMP E3FIRST:MOVYJ,R4 ;输入值送结果MOVR3,#0 ;按键次数清零LJMP DISP1 ;结果处理JIA: MOVA,YJ ;上次结果送累加器ADDA,R4 ;上次结果加输入值JBCY,N4 ;溢出MOV YJ,A ;存本次结果MOV R3,#0 ;按键次数清零LJMP DISP1JIAN:MOVA,YJSUBB A,R4 ;上次结果减输入值JB CY,N4 ;负数溢出MOV YJ,AMOV R3,#0LJMP DISP1CHENG:MOV A,YJMOV B,AMOV A,R4MUL AB;上次结果乘输入值JBOV,N4 ;溢出MOV YJ,A LJMP DISP1CHU: MOV A,R4MOV B,AMOV A,YJDIV AB;上次结果除输入值MOV YJ,AMOV R3,#0LJMP DISP1DEN: MOVR3,#0LJMP DISP1DISP1:MOV B,#10MOV A,YJ ;结果送累加器DIV AB;结果除10MOV YJ1,A ;暂存"商"MOV A,B;取个位数MOV 34H,A ;个位数送显示缓存MOV A,YJ1JZDISP11 ;结果是否为一位数MOV B,#10MOV A,YJ1DIV ABMOV YJ1,AMOV A,BMOV 33H,A ;十位送显示缓存MOV A,YJ1JZDISP11 ;结果是否为二位数MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOP

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。