详细算术运算程序设计流程图:
五、实验结果与分析
1、实验现象、数据记录 经过反复测试调整,该计算器可简单进行100以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,完成了实验要求。 测试结果记录: 加法运算:15+23=38 减法运算:65-22=43 乘法运算:12*51=612 除法运算:99/23=4.3 2、对实验现象、数据及观察结果的分析与讨论: 该实验达到了实验的基本要求,但是需要改进和提高的还有很多,设计的计算器能进行100以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,但是只能进行两个操作数的操作,而不能进行连续计算,比如连加、连乘,并且不能进行有符号数的计算,即输入的两个操作数必须是正号的,也不能输入带小数点的操作数,对此,我会课下继续对它进行研究改进,争取做出具有更多功能的更先进的计算器。
3、关键点: 实验过程中由于对单片机的了解的不彻底,想法太简单遇到了很多的阻碍,开始只是简单的觉得只有显示和键盘这两个模块不了解,很难弄,其余的部分只是简单的加减乘除,几句简单程序就行,结果后来在四位数的显示上出了问题,跟本就不是简单的结果除以1000得出千位,于是又重新编制计算部分,后来在同学的帮助下做出了觉得很正确的程序,不过试验还是失败,最后从头重来,一步步研究,一步步计算,终于显示出了正确结果,该程序的逻辑性很强,每个细节都要考虑到,需要一遍遍测试显示结果,知道得出最终正确的答案。
六、实验结论
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践 能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日 新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处 不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践, 可以说得是苦多于甜,但是可以学到很多很多的的东西。通过这次课程设计使我懂得了理 论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践 相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和 独立思考的能力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问 题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用 编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格 的应用型人才打下良好的基础。 七、指导老师评语及得分:
签名: 年 月 日 附件:源程序等。
YS EQU 20H YG EQU 21H ERS EQU 22H EG EQU 23H YI EQU 24H ER EQU 25H
;第一个数十位 ;第一个数个位 ;第二个数十位 ;第二个数个位
JF EQU 26H ;结果负号位 JQ EQU 27H ;结果千位 JBA EQU 28H ;结果百位 JS EQU 29H ;结果十位 JG EQU 30H ;结果个位 JX EQU 31H ;结果小数位
JG1 EQU 32H ORG 0000H
MAIN: MOV 20H,#00H MOV 21H,#00H MOV 22H,#00H MOV 23H,#00H MOV 24H,#00H MOV 25H,#00H MOV 26H,#0C0H MOV 27H,#00H MOV 28H,#00H MOV 29H,#00H MOV 30H,#00H MOV 31H,#00H MOV 32H,#00H ONE1: CLR C
ACALL KEYSCAN JB PSW.5,ONE1 CJNE A,#11,ONE11 SJMP MAIN
ONE11:CJNE A,#10,ONE12 SJMP ONE1 ONE12:JNC ONE1 MOV 21H,A ACALL DELAY ONE2: ACALL XS1
ACALL KEYSCAN JB PSW.5,ONE2 CJNE A,#11,ONE22 SJMP MAIN
ONE22:CJNE A,#10,ONE23 SJMP ONE2 ONE23:JNC ONE31 MOV 20H,21H MOV 21H,A ACALL DELAY ONE3: ACALL XS2
ACALL KEYSCAN JB PSW.5,ONE3 CJNE A,#11,ONE33 SJMP MAIN
ONE33:CJNE A,#10,ONE30 ACALL DELAY ACALL XS1
SJMP ONE3
ONE30:JC ONE3
ONE31: MOV R5,A ;R5为符号位,表示加或减或乘或除
ONE4: ACALL XS2
ACALL KEYSCAN JB PSW.5,ONE4 CJNE A,#11,ONE44 SJMP MAIN
ONE44:CJNE A,#10,ONE45 SJMP ONE4 ONE45:JNC ONE4 MOV 23H,A ACALL DELAY ONE5: ACALL XS4
ACALL KEYSCAN JB PSW.5,ONE5 CJNE A,#11,ONE55 LJMP MAIN
ONE55:CJNE A,#10,ONE56 SJMP ONE66 ONE56:JNC ONE5 MOV 22H,23H MOV 23H,A ACALL DELAY ONE6: ACALL XS5
ACALL KEYSCAN JB PSW.5,ONE6 CJNE A,#11,ONE66 LJMP MAIN
ONE66:CJNE A,#10,ONE6 ACALL GN
ONE61:ACALL KEYSCAN JB PSW.5,ONE60 LJMP MAIN ONE60:ACALL XS3 SJMP ONE61
KEYSCAN:LCALL KAP ;扫描键子程序 JNZ KP1
SETB PSW.5 ;置无键标志 RET
KP1:LCALL DELY ;去抖
LCALL KAP ;再次扫描键盘 JNZ KP2 ;转识键码程序
SETB PSW.5 ;置无键标志 RET
KP2:CLR PSW.5 ;置有键操作标志 MOV R0,#0FEH ;逐列扫描初始值 MOV R4,#00H ;0列加数 KP4:
MOV A,R0
MOV P0,A ;送列扫描信号 MOV A,P2 ;回读行信号
JB ACC.0,L1 ;不是第一行,转第二行 MOV A,#00H ;是第一行,行吗=0 AJMP KP5
L1:JB ACC.1,NEXT ;不是第二行,转下一列
MOV A,#08H ;是第二行,行码=8 AJMP KP5
KP5:ADD A,R4;对应的行码+对应的列码=键码
PUSH ACC ;保护已经得到的键码 KP3:LCALL DELY
LCALL KAP ;继续扫描
JNZ KP3 ;A值不等于0,表示手未松开!
POP ACC ;A值等于0,手已经松开,弹回键码! RET
NEXT:INC R4 ;下一列列码加1 MOV A,R0
JNB ACC.7,KEYSCAN ;列到最后列了吗?
RL A
MOV R0,A ;下一列 AJMP KP4 ;扫描下一列 KAP:MOV A,#00H ;全扫描字(列) MOV P0,A ;送全扫描字 MOV A,P2 ;回读行信息 CPL A
ANL A,#0FH ;得到A值,=0,无键;≠0,有键 RET
DELY:MOV R6,#14H ;去抖! DL:MOV R7,#0FFH DJNZ R7,$ DJNZ R6,DL
RET
;******************************************计算加减乘除 GN: MOV A,20H MOV B,#10 MUL AB ADD A,21H MOV 24H,A
;************************得到第一个数 MOV A,22H MOV B,#10 MUL AB ADD A,23H MOV 25H,A
;************************得到第二个数 MOV A,R5 J0: CJNE A,#12,J1 SJMP JIA LJMP XS3 RET
J1: CJNE A,#13,J2 SJMP JIAN LJMP XS3 RET
J2: CJNE A,#14,J3 SJMP CHENG LJMP XS3 RET
J3: LJMP CHU LJMP XS3 RET
JIA: MOV A,24H ADD A,25H MOV JG1,A LJMP AAAA RET
JIAN:MOV A,24H CLR C SUBB A,25H MOV JG1,A JNC JIAN1 MOV JF,#0BFH MOV A,#255 CLR C
基于51单片机的简易计算器设计 - 图文



