基于51单片机的简易计算器设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2013 - 2014 学年_一_学期
山东科技大学电工电子实验教学中心
创新性实验研究报告
实验项目名称__基于51单片机的简易计算器设计_
2013 年12 月27 日
四、实验内容
2、实验内容
(一)、总体硬件设计
本设计选用AT89C52单片机为主控单元。显示部分:采用六位LED动态数码管显示。按键部分:采用2*8键盘;利用2*8的键盘扫描子程序,读取输入的键值。
(二)、键盘接口电路
计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用两条I/O 线作为行线,八条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为2×8个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。
矩阵键盘的工作原理:
计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机系统中也最常用。
矩阵键盘布局图:
矩阵键盘内部电路图如下图所示:
(三)、LED显示模块
本设计采用LED数码显示来显示输出数据。通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。
(四)运算模块(单片机控制)
MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。
单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。
详细算术运算程序设计流程图:
五、实验结果与分析
1、实验现象、数据记录
经过反复测试调整,该计算器可简单进行100以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,完成了实验要求。
测试结果记录:
加法运算:15+23=38
减法运算:65-22=43
乘法运算:12*51=612
除法运算:99/23=4.3
2、对实验现象、数据及观察结果的分析与讨论:
该实验达到了实验的基本要求,但是需要改进和提高的还有很多,设计的计算器能进行100以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,但是只能进行两个操作数的操作,而不能进行连续计算,比如连加、连乘,并且不能进行有符号数的计算,即输入的两个操作数必须是正号的,也不能输入带小数点的操作数,对此,我会课下继续对它进行研究改进,争取做出具有更多功能的更先进的计算器。
六、实验结论
七、指导老师评语及得分:附件:源程序等。
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 DEL Y ;去抖
LCALL KAP ;再次扫描键盘
JNZ KP2 ;转识键码程序