创新性实验结题报告——简易计算器_第1页
创新性实验结题报告——简易计算器_第2页
创新性实验结题报告——简易计算器_第3页
创新性实验结题报告——简易计算器_第4页
创新性实验结题报告——简易计算器_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

1、 山东科技大学电工电子实验教学中心创新性实验结题报告课程名称 单片机原理及应用 实验项目名称 简易计算器 姓名 *学号 * 手机 * Email * 专 业 * 班级 * 指导教师及职称 *开课学期 2011 至2012 学年 2 学期提交时间 2011 年 1 月 5 日一、实验摘要通过对51单片机汇编指令、STC89C52RC单片机片上各功能模块、常用外部可编程芯片的学习和应用训练,进一步熟悉51单片机汇编程序设计,串行总线接口程序设计以及外部可编程芯片的使用方法。学习创新性实验报告的撰写方法。二、实验目的1、基于STC89C52RC单片机设计制作简易计算器,能完成绝对值小于100的有符号

2、整数的加减乘除四则运算,运算结果均保留小数点后一位。 2、要求有加、减、乘、除、负号、归零、等号键。 3、利用6位LED显示参加运算的数据和运算结果,显示运算结果超限提示,消隐未使用位。 4、鼓励进行探索。可在了解实验室器材并能实现题目基本要求的情况下,对题目进行创新设计。三、实验场地及仪器、设备和材料1、实验场地:J11-3242、实验仪器、设备和材料:PC兼容机一台、8051单片机实验箱一台、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 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为2×8个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可以用一个P口和另一个P口的两个

5、管脚实现16个按键功能,这种形式在单片机系统中也最常用。矩阵键盘布局图:矩阵键盘内部电路图如下图所示:(三)、LED显示模块本设计采用LED数码显示来显示输出数据。通过D0-D7引脚向LED写指令字或写数据以使LED实现不同的功能或显示相应数据。(四)运算模块(单片机控制)MCS-51 单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。单片机是

6、靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。3、实验步骤 总流程图:开始初始化参数初始化LED显示有键输入?读取键码LED显示数字键清零键功能键状态清零输入数值数值送显示缓冲YN等待数值输入结果送显示缓冲根据上次功能键和输入的数据计算结果本次功能键?等待数值输入结果送显示缓冲等待数值输入结果送显示缓冲详细算术运算程序设计流程图:五、实验结果与分析1、实验现象、数据记录 经过反复测试调整,该计算器可简单进行100以内的加减乘除

7、计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,完成了实验要求。 测试结果记录: (1) 加法运算:64+37= (2) 减法运算:1286= (3) 乘法运算:99*99=(4) 除法运算:65/21=2、对实验现象、数据及观察结果的分析与讨论: 该实验达到了实验的基本要求,但是需要改进和提高的还有很多,设计的计算器能进行100以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算结果的正负,但是只能进行两个操作数的操作,而不能进行连续计算,比如连加、连乘,并且不能进行有符号数的计算,即输入的两个操作数必须是正号的,也不能输入带小数点的操作数,对此,我会课下继

8、续对它进行研究改进,争取做出具有更多功能的更先进的计算器。3、关键点: 实验过程中由于对单片机的了解的不彻底,想法太简单遇到了很多的阻碍,开始只是简单的觉得只有显示和键盘这两个模块不了解,很难弄,其余的部分只是简单的加减乘除,几句简单程序就行,结果后来在四位数的显示上出了问题,跟本就不是简单的结果除以1000得出千位,于是又重新编制计算部分,后来在同学的帮助下做出了觉得很正确的程序,不过试验还是失败,最后从头重来,一步步研究,一步步计算,终于显示出了正确结果,该程序的逻辑性很强,每个细节都要考虑到,需要一遍遍测试显示结果,知道得出最终正确的答案。六、实验结论课程设计是培养学生综合运用所学知识,

9、发现,提出,分析和解决实际问题,锻炼实践 能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日 新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处 不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践, 可以说得是苦多于甜,但是可以学到很多很多的的东西。通过这次课程设计使我懂得了理 论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践 相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和 独立思考的能

10、力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问 题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用 编程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格 的应用型人才打下良好的基础。七、指导老师评语及得分:签名: 年 月 日附件:源程序;P0接位选,P1接段选YS EQU 20H;第一个数十位 YG EQU 21H;第一个数个位 ERS EQU 22H;第二个数十位 EG EQU 23H;第二个数个位 YI EQU 24HER EQU 25HJF EQU 26H;结果负号位JQ EQU 27H ;结果千位JBA EQU

11、28H;结果百位JS EQU 29H;结果十位JG EQU 30H;结果个位JX EQU 31H;结果小数位JG1 EQU 32HORG 0000HMAIN: 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

12、,ONE11 SJMP MAINONE11:CJNE A,#10,ONE12 SJMP ONE1ONE12:JNC ONE1 MOV 21H,A ACALL DELAY ONE2: ACALL XS1 ACALL KEYSCAN JB PSW.5,ONE2 CJNE A,#11,ONE22 SJMP MAINONE22:CJNE A,#10,ONE23 SJMP ONE2ONE23:JNC ONE31 MOV 20H,21H MOV 21H,A ACALL DELAY ONE3: ACALL XS2 ACALL KEYSCAN JB PSW.5,ONE3 CJNE A,#11,ONE33 SJ

13、MP MAINONE33:CJNE A,#10,ONE30 ACALL DELAY ACALL XS1 SJMP ONE3ONE30:JC ONE3ONE31: MOV R5,A ;R5为符号位,表示加或减或乘或除ONE4: ACALL XS2 ACALL KEYSCAN JB PSW.5,ONE4 CJNE A,#11,ONE44 SJMP MAINONE44:CJNE A,#10,ONE45 SJMP ONE4ONE45:JNC ONE4 MOV 23H,A ACALL DELAY ONE5: ACALL XS4 ACALL KEYSCAN JB PSW.5,ONE5 CJNE A,#11

14、,ONE55 LJMP MAINONE55:CJNE A,#10,ONE56 SJMP ONE66ONE56:JNC ONE5 MOV 22H,23H MOV 23H,A ACALL DELAY ONE6: ACALL XS5 ACALL KEYSCAN JB PSW.5,ONE6 CJNE A,#11,ONE66 LJMP MAINONE66:CJNE A,#10,ONE6 ACALL GNONE61:ACALL KEYSCAN JB PSW.5,ONE60 LJMP MAINONE60:ACALL XS3 SJMP ONE61 ;*KEYSCAN:LCALL KAP ;扫描键子程序 JNZ

15、 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,L2 ;不是第二行,转第三行 JB AC

16、C.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,手已经松开,弹回键码! RETNEXT:INC R4 ;下一列列码加1 MOV A,R0 JNB ACC.7,KEYSCAN ;列到最后列了吗? RL A MOV R0,A ;下一列 AJMP KP4 ;扫描下一列 KAP:MOV A,#00H ;全扫描字(列) MOV P0,A

17、;送全扫描字 MOV A,P2 ;回读行信息 CPL A ANL A,#0FH ;得到A值,=0,无键;0,有键 RETDELY: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,R5J0: CJNE A,#12,J1 SJMP JIA LJMP XS3 RETJ1: CJN

18、E A,#13,J2 SJMP JIAN LJMP XS3 RETJ2: CJNE A,#14,J3 SJMP CHENG LJMP XS3 RETJ3: LJMP CHU LJMP XS3 RETJIA: MOV A,24H ADD A,25H MOV JG1,A LJMP AAAA RETJIAN:MOV A,24H CLR C SUBB A,25H MOV JG1,A JNC JIAN1 MOV JF,#0BFH MOV A,#255 CLR C SUBB A,32H INC A MOV JG1,A LJMP AAAAJIAN1:RETCHENG:CLR C ;个位与个位相乘 MOV A

19、,21H MOV B,23H MUL AB MOV B,#10 DIV AB MOV JG,B MOV JS,A ;* MOV 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 CH3CH2: CLR C SUBB A,#10 MOV JS,A MOV A,JBA INC A MOV JBA,A SJMP CH4CH3: MOV JS,A ;* CH4: MOV A,22H;个位与十位相乘 MOV B,21H MUL AB MOV

20、 B,#10 DIV AB ADDC A,JBA MOV JBA,A MOV A,B ADDC A,JS CJNE A,#10,CH5 SJMP CH6 CH5:JC CH7CH6:CLR C SUBB A,#10 MOV JS,A MOV A,JBA INC A MOV JBA,A SJMP CH8CH7: 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 CH11CH10:CLR C

21、SUBB A,#10 MOV JBA,A MOV A,JQ INC A MOV JQ,A SJMP CH12CH11: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 A,B MOV B,#10 MUL AB MOV B,25H DIV AB MOV A,B CJNE A,#5,CHU2 CHU1:JNC CHU2 SJMP CHU3CHU2:INC A CHU3:MOV JX,A ;小数 SJMP AAAA RETAAAA

22、:MOV A,JG1 MOV B,#10 DIV AB MOV JG,B ;得到JG1个位 MOV B,#10 DIV AB MOV JS,B ;得到JG1十位 MOV JBA,A ;得到JG1百位 RET ;*XS1: MOV A,21H MOVP1,#0FFH ;共阳 灭码 MOVP0,#20H MOVDPTR,#TAB MOVCA,A+DPTR ;查出字形代码 MOV P1,A ;送个位 ACALL DELAY RETXS2: MOV A,20H ;显示输入的第一个数 MOVP1,#0FFH ;共阳 灭码 MOVP0,#10H ;送位控信号 MOVDPTR,#TAB MOVCA,A+DP

23、TR ;查出字形代码 MOV P1,A ;送十位 ACALLDELAY ;稳定显示信息 MOV A,21H MOVP1,#0FFH ;共阳 灭码 MOVP0,#20H MOVDPTR,#TAB MOVCA,A+DPTR ;查出字形代码 MOV P1,A ;送个位 ACALL DELAY RETXS4: MOV A,23H MOVP1,#0FFH ;共阳 灭码 MOVP0,#20H MOVDPTR,#TAB MOVCA,A+DPTR ;查出字形代码 MOV P1,A ;送个位 ACALL DELAY RETXS5: MOV A,22H ;显示输入的第二个数 MOVP1,#0FFH ;共阳 灭码 MOVP0,#10H ;送位控信号 MOVDPTR,#TAB MOVCA,A+DPTR;查出字形代码 MOV P1,A ;送十位 ACALL DELAY ;稳定显示信息 MOV A,23H MOVP1,#0FFH ;共阳 灭码 MOVP0,#20H MOVDPTR,#TAB MO

温馨提示

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

评论

0/150

提交评论