基于51单片机的简易计算器设计_第1页
基于51单片机的简易计算器设计_第2页
基于51单片机的简易计算器设计_第3页
基于51单片机的简易计算器设计_第4页
基于51单片机的简易计算器设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2013 - 2014学年一 学期 山东科技大学电工电子实验教学中心 创新性实验研究报告 实验项目名称 基于 51 单片机的简易计算器设计 2013 年 12 月 27 日 一、实验摘要 通过对 51 单片机汇编指令、 STC89C52RC单片机片上各功能模块、 常 用外部可编程芯片的学习和应用训练, 进一步熟悉 51 单片机汇编程序设计, 串行总线接口程序设计以及外部可编程芯片的使用方法。 学习创新性实验报 告的撰写方法。 、实验目的 1、基于 STC89C52RC 单片机设计制作简易计算器,能完成绝对值小于 100的有符号整数的加减乘除四则运算,运算结果均保留小数点后一位。 2、要求有加、

2、减、乘、除、负号、归零、等号键。 3、利用 6位 LED 显示参加运算的数据和运算结果,显示运算结果超限 提示,消隐未使用位。 4、鼓励进行探索。可在了解实验室器材并能实现题目基本要求的情况 下,对题目进行创新设计 三、实验场地及仪器、设备和材料: 1、实验场地: J11-324 2、实验仪器、设备和材料: PC兼容机一台、 80C52单片机实验箱一台、 2*8 键盘一个、 6 个共阳极的数码管、连线若干 四、实验内容 1、实验原理 根据功能和指标要求,本系统选用 MCS-51 系列单片机为主控机。通过 扩展必要的外围接口电路,实现对计算器的设计。具体设计如下: (1)由于要设计的是简单的计算

3、器,可以进行四则运算,为了得到较好的 显示效果,采用 LED 显示数据和结果。 (2)另外键盘包括数字键( 09)、符号键( +、-、 、)、清除键和等 号键,故只需要 16 个按键即可,设计中采用集成的计算键盘。 (3)执行过程:开机显示零,等待键入数值,当键入数字,通过 LED 显示 出来,当键入 +、-、* 、/运算符,计算器在内部执行数值转换和存储,并等 待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在 LED 上输出运算结果。 系统模块图: 2、实验内容 (一)、 总体硬件设计 本设计选用 AT89C52单片机为主控单元。 显示部分:采用六位 LED动 态数码管显示。按键

4、部分:采用 2*8 键盘;利用 2*8 的键盘扫描子程序,读 取输入的键值。 (二)、键盘接口电路 计算器输入数字和其他功能按键要用到很多按键, 如果采用独立按键的 方式,在这种情况下,编程会很简单,但是会占用大量的 I/O 口资源,因此 在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用 两条 I/O 线作为行线,八条 I/O 线作为列线组成键盘,在行线和列线的每个 交叉点上设置一个按键。这样键盘上按键的个数就为 28个。这种行列式键 盘结构能有效地提高单片机系统中 I/O 口的利用率。 矩阵键盘的工作原理: 计算器的键盘布局如图 2所示:一般有 16个键组成,在单片机中正好

5、可 以用一个 P口和另一个 P口的两个管脚实现 16个按键功能,这种形式在单片机 系统中也最常用。 矩阵键盘布局图: 矩阵键盘内部电路图如下图所示: (四)运算模块(单片机控制) MCS-51 单片机是在一块芯片中集成了 CPU、RAM、ROM、定时器 / 计数器 和多功能 I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由 如下功能部件组成,即微处理器( CPU)、数据存储器( RAM)、程序存储器 (ROM/EPRO)M、并行I/O 口、串行口、定时器 / 计数器、中断系统及特殊功 能寄存器( SFR)。 单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功 能,尤其是

6、特殊的独特的一些功能,通过使用单片机编写的程序可以实现高 智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能 部件,可以很快地实现运算功能。 3、实验步骤 总流程图: LED 显示 详细算术运算程序设计流程图: 五、实验结果与分析 1、实验现象、数据记录 经过反复测试调整,该计算器可简单进行 100 以内的加减乘除计算,以及清零功 能,结果能保留小数点后一位,能显示计算结果的正负,完成了实验要求。 测试结果记录: 加法运算: 15+23=38 减法运算: 65-22=43 乘法运算: 12*51=612 2、对实验现象、数据及观察结果的分析与讨论: 该实验达到了实验的基本要求,

7、但是需要改进和提高的还有很多,设计的计算器能 进行 100 以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算 结果的正负, 但是只能进行两个操作数的操作, 而不能进行连续计算, 比如连加、 连乘, 并且不能进行有符号数的计算,即输入的两个操作数必须是正号的,也不能输入带小数 点的操作数,对此,我会课下继续对它进行研究改进,争取做出具有更多功能的更先进 的计算器。 3、关键点: 实验过程中由于对单片机的了解的不彻底,想法太简单遇到了很多的阻碍,开始 只是简单的觉得只有显示和键盘这两个模块不了解,很难弄,其余的部分只是简单的加 减乘除,几句简单程序就行,结果后来在四位数的显示上

8、出了问题,跟本就不是简单的 结果除以 1000 得出千位,于是又重新编制计算部分,后来在同学的帮助下做出了觉得 很正确的程序,不过试验还是失败,最后从头重来,一步步研究,一步步计算,终于显 示出了正确结果,该程序的逻辑性很强,每个细节都要考虑到,需要一遍遍测试显示结 果,知道得出最终正确的答案。 六、实验结论 课程设计是培养学生综合运用所学知识 ,发现 ,提出 ,分析和解决实际问题 ,锻炼实践 能力的重要环节 ,是对学生实际工作能力的具体训练和考察过程 .随着科学技术发展的日 新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处 不在。因此作为二十一世纪的大学来说掌握

9、单片机的开发技术是十分重要的。 回顾起此 次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践, 可以说得是 苦多于甜,但是可以学到很多很多的的东西。通过这次课程设计使我懂得了理 论与实际 相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践 相结合 起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和 独立 思考的能力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问 题 全面系统的锻炼。 使我们在单片机的基本原理、 单片机应用系统开发过程, 以及在常用 编 程设计思路技巧(特别是汇编语言) 的掌握方面都能向前迈了一大步, 为日

10、后成为合格 的 应用型人才打下良好的基础。 七、指导老师评语及得分: 签名: 年 月 日 附件: 源程序等。 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 SJMP ONE3 ORG 0000H ONE30:JC

11、ONE3 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 SJMP MAIN MOV 27H,#00H ONE44:CJNE A,#10,ONE45 MOV 28H,#00H SJMP ONE4 MOV 29H,#00H ONE45:JNC ONE4 MOV

12、 30H,#00H MOV 23H,A MOV 31H,#00H ACALL DELAY MOV 32H,#00H ONE5: ACALL XS4 ONE1: CLR C ACALL KEYSCAN ACALL KEYSCAN JB PSW.5,ONE5 JB PSW.5,ONE1 CJNE A,#11,ONE55 CJNE A,#11,ONE11 LJMP MAIN SJMP MAIN ONE55:CJNE A,#10,ONE56 ONE11:CJNE A,#10,ONE12 SJMP ONE66 SJMP ONE1 ONE56:JNC ONE5 ONE12:JNC ONE1 MOV 22H

13、,23H MOV 21H,A MOV 23H,A ACALL DELAY ACALL DELAY ONE2: ACALL XS1 ONE6: ACALL XS5 ACALL KEYSCAN ACALL KEYSCAN JB PSW.5,ONE2 JB PSW.5,ONE6 CJNE A,#11,ONE22 CJNE A,#11,ONE66 SJMP MAIN LJMP MAIN ONE22:CJNE A,#10,ONE23 ONE66:CJNE A,#10,ONE6 SJMP ONE2 ACALL GN ONE23:JNC ONE31 ONE61:ACALL KEYSCAN MOV 20H,2

14、1H JB PSW.5,ONE60 MOV 21H,A LJMP MAIN ACALL DELAY ONE60:ACALL XS3 ONE3: ACALL XS2 SJMP ONE61 ACALL KEYSCAN KEYSCAN:LCALL KAP ;扫描键子程序 JB PSW.5,ONE3 JNZ KP1 CJNE A,#11,ONE33 SETBPSW.5 ;置无键标志 SJMP MAIN RET ONE33:CJNE A,#10,ONE30 KP1:LCALL DELY ;去抖 ACALL DELAY LCALL KAP ;再次扫描键盘 ACALL XS1 JNZ KP2;转识键码程序

15、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 SETB PSW.5 ;置无键标志 L1:JBACC.1,NEXT ; 不是第二行, 转下一 列 MOV A,#08H ; 是第二行,行码 =8 AJMP KP5 KP5:ADDA,R4; 对应的行码 +对应的列码 = 键码 PUSH ACC ; 保护已

16、经得到的键码 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 ;列到最后列 了吗? ;下一列 ;扫描下一列 ;全扫描字(列) ;送全扫描字 ;回读行信息 ;得到 A 值, =0, 得到第一个数 得到第二个数 ;去抖! CLR C SUBB A,25H MOV JG1,A JNC JIAN1 MOV JF,#0BFH MOV A,#255 CLR C RL A M

17、OV R0,A AJMP KP4 KAP:MOV A,#00H MOV P0,A MOV A,P2 CPL A ANL A,#0FH 无键; 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: CJN

18、E 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 SUBB A,32H INC A MOV JG1,A JIAN1: LJMP AAAA RET CHENG:CLR C ;个位与个位相乘 MOV A,21H MOV B,23H MUL AB MOV B,#10 DIV AB MOV JG,B MOV JS,A MOV

19、 A,20H ;十位与个位相乘 MOV B,23H MUL AB MOV B,#10 DIV AB MOV JBA,A MOV A,B ADDC A,JS CJNE A,#10,CH1 SJMP CH2 CH1: JC CH3 CH2: CLR C SUBB A,#10 MOV JS,A MOV A,JBA INC A MOV JBA,A SJMP CH4 CH3: MOV JS,A CH4: MOV A,22H ;个位与十位相乘 MOV B,21H MUL AB MOV B,#10 DIV AB ADDC A,JBA MOV JBA,A MOV A,B ADDC A,JS CJNE A,#1

20、0,CH5 SJMP CH6 CH5:JC CH7 CH6:CLR C SUBB A,#10 MOV JS,A MOV A,JBA INC A MOV JBA,A SJMP CH8 CH7: MOV JS,A CH8: MOV A,20H ;十位与十位相乘 MOV B,22H MUL AB MOV B,#10 DIV AB MOV JQ,A MOV A,B ADDC A,JBA CJNE A,#10,CH9 SJMP CH10 CH9: JC CH11 CH10:CLR C SUBB A,#10 MOV JBA,A MOV A,JQ INC A MOV JQ,A SJMP CH12 CH11:

21、MOV JBA,A CH12:RET CHU: MOV A,24H MOV B,25H DIV AB MOV JG1,A MOV A,B;余数 MOV B,#10 MUL AB MOV B,25H DIV AB MOV JX,A;小数 SJMP AAAA RET AAAA:MOV A,JG1 MOV B,#10 DIV AB 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

22、 MOVC A,A+DPTR; 查出字形代码 MOV P1,A ;送个位 XS1: MOV A,21H ACALL DELAY MOV P1,#0FFH;共阳 灭码 RET MOV P0,#20H MOV DPTR,#TAB XS3: MOV P1,#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 ;共阳 灭码 M

23、OV P1,#0FFH;共阳 灭码 MOV P0,#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+D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论