基于51单片机简易计算器设计.docx
- 文档编号:3915137
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:16
- 大小:23.41KB
基于51单片机简易计算器设计.docx
《基于51单片机简易计算器设计.docx》由会员分享,可在线阅读,更多相关《基于51单片机简易计算器设计.docx(16页珍藏版)》请在冰豆网上搜索。
基于51单片机简易计算器设计
2021-2021学年_一_学期山东科技大学电工电子实验教课中心
创新性实验研究报告
实验工程名称__鉴于51单片机的简略计算器设计_
2021年12月27日
一、实验纲要经过对51单片机汇编指令、STC89C52RC单片机片上各功能模块、常用外面可编程芯片的学习和应用训练,进一步熟习51单片机汇编程序设计,串行总线接口程序设计以及外面可编程芯片的使用方法。
学习创新性实验报告的撰写方法。
二、实验目的
1、鉴于STC89C52RC单片机设计制作简略计算器,能达成绝对值小于的有符号整数的加减乘除四那么运算,运算结果均保留小数点后一位。
2、要求有加、减、乘、除、负号、归零、等号键。
3、利用6位LED显示参加运算的数据和运算结果,显示运算结果超限提示,消隐未使用位。
4、鼓舞进行探究。
可在认识实验室器械并能实现题目根本要求的状况下,对题目进行创新设计三、实验场所及仪器、设施和资料:
1、实验场所:
J11-3242、实验仪器、设施和资料:
PC兼容机一台、80C52单片机实验箱一台、2*8键盘一个、6个共阳极的数码管、连线假定干
四、实验内容
1、实验原理依据功能和指标要求,本系统采纳MCS-51系列单片机为主控机。
经过扩展必需的外头接口电路,实现对计算器的设计。
详细设计以下:
〔1〕因为要设计的是简单的计算器,能够进行四那么运算,为了获得较好的显示成效,采纳LED显示数据和结果。
〔2〕此外键盘包含数字键〔0~9〕、符号键〔+、-、×、÷〕、去除键和等号键,故只要要16个按键即可,设计中采纳集成的计算键盘。
〔3〕履行过程:
开机显示零,等候键入数值,当键入数字,经过LED显示出来,当键入+、-、*、/运算符,计算器在内部履行数值变换和储存,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。
系统模块图:
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〕。
单片机是靠程序运转的,而且能够改正。
经过不一样的程序实现不一样的功能,特别是特别的独到的一些功能,经过使用单片机编写的程序能够实现高智能,高效率,以及高靠谱性!
所以我们采纳单片机作为计算器的主要功能零件,能够很快地实现运算功能。
3、实验步骤总流程图:
开始初始化参数
初始化LED显示
Y有键输读取键码入?
N数字键清零键
输入数值状态清零
功能键依据上一次功能键和输入的数据计算结
本次功能键?
结果送显示缓结果送显示缓冲冲等候数值输入等候数值输入
结果送显示缓冲
数值送显示缓冲
等候数值输入
LED显示
详尽算术运算程序设计流程图:
五、实验结果与剖析1、实验现象、数据记录经过频频测试调整,该计算器可简单进行100之内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,达成了实验要求。
测试结果记录:
加法运算:
15+23=38减法运算:
65-22=43乘法运算:
12*51=612除法运算:
2、对实验现象、数据及察看结果的剖析与议论:
该实验抵达了实验的根本要求,可是需要改进和提升的还有好多,设计的计算器能进行100之内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,可是只好进行两个操作数的操作,而不可以进行连续计算,比方连加、连乘,而且不可以进行有符号数的计算,即输入的两个操作数一定是正号的,也不可以输入带小数点的操作数,对此,我会课下持续对它进行研究改进,争取做出拥有更多功能的更先进的计算器。
3、重点点:
实验过程中因为对单片机的认识的不完全,想法太简单碰到了好多的阻挡,开始不过简单的感觉只有显示和键盘这两个模块不认识,很难弄,其余的局部不过简单的加减乘除,几句简单程序就行,结果以后在四位数的显示上出了问题,跟本就不是简单的结果除以1000得出千位,于是又从头编制计算局部,以后在同学的帮助下做出了感觉很正确的程序,可是试验仍是失败,最后从头重来,一步步研究,一步步计算,终于显示出了正确结果,该程序的逻辑性很强,每个细节都要考虑到,需要一遍遍测试显示结果,知道得出最后正确的答案。
六、实验结论
课程设计是培育学生综合运用所学知识
发现,提出,剖析和解决实质问题,锻炼实践
能力的重要环节,是对学生实质工作能力的详细训练和观察过程
.跟着科学技术展开的日
新日异,单片机已经成为现在计算机应用中空前开朗的领域,
在生活中能够说得是无处
不在。
所以作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回想起此
次单片机课程设计,我仍感触颇多,的确,从选题到定稿,从理论到实践,
能够说得是
苦多于甜,可是能够学到好多好多的的东西。
经过此次课程设计使我懂得了理
论与实质
相联合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践
相联合
起来,从理论中得出结论,才能真实为社会效力,进而提升自己的实质着手能力和
独立
思虑的能力。
经过此次课程设计使我获得了一次用专业知识、专业技术剖析和解决问
题
全面系统的锻炼。
使我们在单片机的根来源理、单片机应用系统开发过程,以及在常用编程设计思路技巧〔特别是汇编语言〕的掌握方面都能向前迈了一大步,为往后成为合格的应用型人材打下优秀的根基。
七、指导老师考语及得分:
署名:
年月日附件:
源程序等。
YS
EQU
20H
;第一个数十位
JF
EQU
26H
;结果负号位
YG
EQU
21H
;第一个数个位
JQ
EQU
27H
;结果千位
ERS
EQU
22H
;第二个数十位
JBA
EQU
28H
;结果百位
EG
EQU
23H
;第二个数个位
JS
EQU
29H
;结果十位
YI
EQU
24H
JG
EQU
30H
;结果个位
ER
EQU
25H
JX
EQU
31H
;结果小数位
JG1
EQU
32H
SJMPONE3
ORG
0000H
ONE30:
JCONE3
MAIN:
MOV
20H,#00H
ONE31:
MOV
R5,A
;R5为符号位,表示加或
MOV
21H,#00H
减或乘或除
MOV
22H,#00H
ONE4:
ACALL
XS2
MOV
23H,#00H
ACALL
KEYSCAN
MOV
24H,#00H
JB
PSW.5,ONE4
MOV
25H,#00H
CJNE
A,#11,ONE44
MOV
26H,#0C0H
SJMPMAIN
MOV
27H,#00H
ONE44:
CJNE
A,#10,ONE45
MOV
28H,#00H
SJMPONE4
MOV
29H,#00H
ONE45:
JNC
ONE4
MOV
30H,#00H
MOV
23H,A
MOV
31H,#00H
ACALLDELAY
MOV
32H,#00H
ONE5:
ACALL
XS4
ONE1:
CLRC
ACALL
KEYSCAN
ACALL
KEYSCAN
JB
PSW.5,ONE5
JB
PSW.5,ONE1
CJNE
A,#11,ONE55
CJNE
A,#11,ONE11
LJMPMAIN
SJMPMAIN
ONE55:
CJNE
A,#10,ONE56
ONE11:
CJNE
A,#10,ONE12
SJMPONE66
SJMPONE1
ONE56:
JNC
ONE5
ONE12:
JNC
ONE1
MOV
22H,23H
MOV
21H,A
MOV
23H,A
ACALLDELAY
ACALLDELAY
ONE2:
ACALLXS1
ONE6:
ACALL
XS5
ACALLKEYSCAN
ACALL
KEYSCAN
JB
PSW.5,ONE2
JB
PSW.5,ONE6
CJNE
A,#11,ONE22
CJNE
A,#11,ONE66
SJMPMAIN
LJMPMAIN
ONE22:
CJNE
A,#10,ONE23
ONE66:
CJNE
A,#10,ONE6
SJMPONE2
ACALL
GN
ONE23:
JNC
ONE31
ONE61:
ACALL
KEYSCAN
MOV
20H,21H
JB
PSW.5,ONE60
MOV
21H,A
LJMP
MAIN
ACALLDELAY
ONE60:
ACALL
XS3
ONE3:
ACALL
XS2
SJMP
ONE61
ACALL
KEYSCAN
KEYSCAN:
LCALL
KAP;扫描键子程序
JB
PSW.5,ONE3
JNZ
KP1
CJNE
A,#11,ONE33
SETB
;置无键标记
SJMPMAIN
RET
ONE33:
CJNE
A,#10,ONE30
KP1:
LCALL
DELY
;去抖
ACALLDELAY
LCALL
KAP
;再次扫描键盘
ACALL
XS1
JNZ
KP2
;转识键码程序
SETB
;置无键标记
RET
RET
;*****************************************
KP2:
CLR
;置有键操作标记
*计算加减乘除
MOV
R0,#0FEH
;逐列扫描初始值
GN:
MOVA,20H
MOV
R4,#00H
;0列加数
MOVB,#10
KP4:
MUL
AB
MOV
A,R0
ADD
A,21H
MOV
P0,A
;送列扫描信号
MOV
24H,A
MOV
A,P2
;回读行信号
;************************
获得第一个数
JB
ACC.0,L1;不是第一行,转第二行
MOVA,22H
MOV
A,#00H;是第一行,行吗=0
MOVB,#10
AJMP
KP5
MUL
AB
L1:
JB
ACC.1,NEXT;不是第二行,转下一
ADD
A,23H
列
MOV
25H,A
MOV
A,#08H;是第二行,行码=8
;************************
获得第二个数
AJMP
KP5
MOV
A,R5
KP5:
ADD
A,R4;对应的行码+对应的列码=
J0:
CJNEA,#12,J1
键码
SJMP
JIA
PUSH
ACC;保护已经获得的键码
LJMPXS3
KP3:
LCALL
DELY
RET
LCALL
KAP
;持续扫描
J1:
CJNEA,#13,J2
JNZ
KP3
;A
值不等于
0,表示手未
SJMPJIAN
松开!
LJMPXS3
POP
ACC
;A值等于0,手已经松开,
RET
弹回键码!
J2:
CJNEA,#14,J3
RET
SJMP
CHENG
NEXT:
INC
R4
;下一列列码加1
LJMPXS3
MOV
A,R0
RET
JNB
ACC.7,KEYSCAN
;列到最后列
J3:
LJMP
CHU
了吗?
LJMPXS3
RL
A
RET
MOV
R0,A
;下一列
JIA:
MOVA,24H
AJMP
KP4
;扫描下一列
ADDA,25H
KAP:
MOV
A,#00H
;全扫描字〔列〕
MOVJG1,A
MOV
P0,A
;送全扫描字
LJMPAAAA
MOV
A,P2
;回读行信息
RET
CPL
A
JIAN:
MOVA,24H
ANL
A,#0FH
;获得A值,=0,
CLR
C
无键;≠0,有键
SUBBA,25H
RET
MOV
JG1,A
DELY:
MOV
R6,#14H
;去抖!
JNC
JIAN1
DL:
MOV
R7,#0FFH
MOV
JF,#0BFH
DJNZ
R7,$
MOV
A,#255
DJNZ
R6,DL
CLR
C
SUBBA,32H
CH6:
CLRC
INC
A
SUBBA,#10
MOV
JG1,A
MOV
JS,A
JIAN1:
LJMPAAAA
MOVA,JBA
RET
INCA
CHENG:
CLRC
;个位与个位相乘
MOV
JBA,A
MOV
A,21H
SJMPCH8
MOV
B,23H
CH7:
MOV
JS,A
MUL
AB
CH8:
MOV
A,20H
;十位与十位相乘
MOV
B,#10
MOV
B,22H
DIV
AB
MUL
AB
MOV
JG,B
MOV
B,#10
MOV
JS,A
DIV
AB
MOV
A,20H
;十位与个位相乘
MOV
JQ,A
MOV
B,23H
MOV
A,B
MUL
AB
ADDC
A,JBA
MOV
B,#10
CJNEA,#10,CH9
DIV
AB
SJMPCH10
MOV
JBA,A
CH9:
JCCH11
MOV
A,B
CH10:
CLRC
ADDC
A,JS
SUBBA,#10
CJNEA,#10,CH1
MOVJBA,A
SJMPCH2
MOVA,JQ
CH1:
JC
CH3
INCA
CH2:
CLRC
MOV
JQ,A
SUBBA,#10
SJMPCH12
MOV
JS,A
CH11:
MOV
JBA,A
MOVA,JBA
CH12:
RET
INCA
CHU:
MOVA,24H
MOV
JBA,A
MOV
B,25H
SJMPCH4
DIV
AB
CH3:
MOV
JS,A
MOV
JG1,A
CH4:
MOV
A,22H
;个位与十位相乘
MOV
A,B
;余数
MOV
B,21H
MOV
B,#10
MUL
AB
MUL
AB
MOV
B,#10
MOV
B,25H
DIV
AB
DIV
AB
ADDCA,JBA
MOV
JX,A
;小数
MOV
JBA,A
SJMPAAAA
MOV
A,B
RET
ADDC
A,JS
AAAA:
MOVA,JG1
CJNEA,#10,CH5
MOV
B,#10
SJMPCH6
DIV
AB
CH5:
JC
CH7
MOV
JG,B
;获得JG1个位
MOV
B,#10
MOV
A,23H
DIV
AB
MOV
P1,#0FFH
;共阳灭码
MOV
JS,B
;获得JG1十位
MOV
P0,#20H
MOV
JBA,A
;获得JG1百位
MOV
DPTR,#TAB
RET
MOVC
A,@A+DPTR;查出字形代码
;***********************************
MOV
P1,A
;送个位
XS1:
MOV
A,21H
ACALL
DELAY
MOV
P1,#0FFH
;共阳灭码
RET
MOV
P0,#20H
;**********************************
MOV
DPTR,#TAB
XS3:
MOVP1,#0FFH
;共阳灭码
MOVC
A,@A+DPTR;查出字形代码
MOV
P0,#01H
;送位控信号
MOV
P1,A
;送个位
MOV
A,JF
ACALL
DELAY
MOV
P1,A
;送负号位
RET
ACALL
DELAY
;稳固显示信息
XS2:
MOV
A,20H
;显示输入的第一个数
MOV
P1,#0FFH
;共阳灭码
MOV
P1,#0FFH
;共阳灭码
MOVP0,#02H
MOV
P0,#10H
;送位控信号
MOV
A,JQ
MOV
DPTR,#TAB
MOV
DPTR,#TAB
MOVC
A,@A+DPTR;查出字形代码
MOVC
A,@A+DPTR;查出字形代码
MOV
P1,A
;送十位
MOV
P1,A;送千位
ACALL
DELAY
;稳固显示信息
ACALL
DELAY;稳固显示信息
MOV
A,21H
MOV
P1,#0FFH
;共阳灭码
MOV
P1,#0FFH
;共阳灭码
MOV
P0,#04H
MOV
P0,#20H
MOV
A,JBA
MOV
DPTR,#TAB
MOV
DPTR,#TAB
MOVC
A,@A+DPTR;查出字形代码
MOVC
A,@A+DPTR;查出字形代码
MOV
P1,A
;送个位
MOV
P1,A
;送百位
ACALL
DELAY
ACALL
DELAY;稳固显示信息
RET
MOV
P1,#0FFH
;共阳灭码
XS4:
MOV
A,23H
MOV
P0,#08H
MOV
P1,#0FFH
;共阳灭码
MOV
A,JS
MOV
P0,#20H
MOV
DPTR,#TAB
MOV
DPTR,#TAB
MOVC
A,@A+DPTR;查出字形代码
MOVC
A,@A+DPTR;查出字形代码
MOV
P1,A
;送十位
MOV
P1,A
;送个位
ACALL
DELAY
;稳固显示信息
ACALL
DELAY
MOV
P1,#0FFH
;共阳灭码
RET
MOV
P0,#10H
XS5:
MOVA,22H;显示输入的第二个数
MOVA,JG
MOV
P1,#0FFH
;共阳灭码
MOV
DPTR,#TAB
MOV
P0,#10H
;送位控信号
MOVC
A,@A+DPTR;查出字码
MOV
DPTR,#TAB
ANL
A,#7FH
MOVC
A,@A+DPTR;查出字形代码
MOV
P1,A
;送个位
MOV
P1,A
;送十位
ACALL
DELAY;稳固显示信息
ACALL
DELAY
;稳固显示信息
MOV
P1,#0FFH
;共阳灭码
MOVP0,#20HMOVA,JXMOVDPTR,#TABMOVCA,@A+DPTRMOVP1,A;送小数位ACALLDELAYRETTAB:
DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EHDELAY:
MOVR6,#0FFHDJNZR7,$RETEND
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 简易 计算器 设计