基于51单片机的简易计算器设计_第1页
基于51单片机的简易计算器设计_第2页
基于51单片机的简易计算器设计_第3页
基于51单片机的简易计算器设计_第4页
基于51单片机的简易计算器设计_第5页
免费预览已结束,剩余10页可下载查看

下载本文档

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

文档简介

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

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

3、。(2)另外键盘包括数字键(09)、符号键(+、-、又与、清除键和等 号键,故只需要16个按键即可,设计中采用集成的计算键盘。(3)执行过程:开机显示零,等待键入数值,当键入数字,通过 LED显示 出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等 待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LED上输出运算结果。系统模块图:图1系统方案图2、实验内容(一)、总体硬件设计本设计选用AT89C5弹片机为主控单元。显示部分:采用六位LED动 态数码管显示。按键部分:采用 2*8键盘;利用2*8的键盘扫描子程序,读 取输入的键值。(二)、键盘接口电路计算器输入数字

4、和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的 I/O 口资源,因此 在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用 两条I/O线作为行线,八条I/O线作为列线组成键盘,在行线和列线的每个 交叉点上设置一个按键。这样键盘上按键的个数就为 2X 8个。这种行列式键 盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图2所示:一般有16个键组成,在单片机中正好可 以用一个P口和另一个P口的两个管脚实现16个按键功能,这种形式在单片机 系统中也最常用。矩阵键盘布局图:矩阵键盘内部电路图如下图

5、所示:(四)运算模块(单片机控制)MCS-51单片机是在一块芯片中集成了 CPU RAM ROM定时器/计数器 和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由 如下功能部件组成,即微处理器(CPU、数据存储器(RAM、程序存储器 (ROM/EPROM并行I/O 口、串行口、定时器/计数器、中断系统及特殊功 能寄存器(SFR 。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功 能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高 智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能 部件,可以很快地实现运算功能。3、实验步骤 总流程

6、图:LED显示详细算术运算程序设计流程图:加乘降够薮值送显示缓冲五、实验结果与分析1、实验现象、数据记录经过反复测试调整,该计算器可简单进行 100以内的加减乘除计算,以及清零功 能,结果能保留小数点后一位,能显示计算结果的正负,完成了实验要求。测试结果记录:加法运算:15+23=382、对实验现象、数据及观察结果的分析与讨论:该实验达到了实验的基本要求,但是需要改进和提高的还有很多,设计的计算器能 进行100以内的加减乘除计算,以及清零功能,结果能保留小数点后一位,能显示计算 结果的正负,但是只能进行两个操作数的操作,而不能进行连续计算,比如连加、连乘, 并且不能进行有符号数的计算,即输入的

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

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

9、结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。通过这次课程设计使我得到了一次用专业知识、专业技能分析和解决问题全面系统的锻炼。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编 程设计思路技巧(特别是汇编语言)的掌握方面都能向前迈了一大步,为日后成为合格 的 应用型人才打下良好的基础。七、指导老师评语及得分:签名:年 月 日附件:源程序等。YSEQU20H;第一个数十位JFEQU26H;结果负号位YGEQU21H;第一个数个位JQEQU27H;结果千位ERSEQU22H;第二个数十位JBAEQU28H;结果白位EGEQU23H;第二个数个位JSEQU29H;

10、结果十位YIEQU24HJGEQU30H;结果个位EREQU25HJXEQU31H;结果小数位MAIN: MOV20H,#00HONE31: MOV R5,A ;R5 为符号位,MOV21H,#00H减或乘或除MOV22H,#00HONE4: ACALL XS2MOV23H,#00HACALL KEYSCANMOV24H,#00HJB PSW.5,ONE4MOV25H,#00HCJNE A,#11,ONE44MOV26H,#0C0HSJMP MAINMOV27H,#00HONE44:CJNE A,#10,ONE45MOV28H,#00HSJMP ONE4MOV29H,#00HONE45:JNC

11、 ONE4MOV30H,#00HMOV 23H,AMOV31H,#00HACALL DELAYMOV32H,#00HONE5: ACALL XS4ONE1: CLR CACALLKEYSCANACALL KEYSCANJB PSW.5,ONE5JB PSW.5,ONE1CJNE A,#11,ONE55CJNEA,#11,ONE11LJMP MAINSJMP MAINONE55:CJNE A,#10,ONE56ONE11:CJNEA,#10,ONE12SJMP ONE66SJMP ONE1ONE56:JNC ONE5ONE12:JNCONE1MOV 22H,23HMOV21H,AMOV 23H,

12、AORGONE30:JC ONE30000HACALL DELAYACALL DELAY表不加或EQU 32HSJMP ONE3JG1ONE2: ACALL XS1ACALL KEYSCANONE6: ACALL XS5JB PSW.5,ONE2CJNE A,#11,ONE22SJMP MAINONE22:CJNE A,#10,ONE23SJMP ONE2ONE23:JNC ONE31MOV 20H,21HMOV 21H,AACALL DELAYJB PSW.5,ONE6 CJNE A,#11,ONE66 LJMP MAINONE66:CJNE A,#10,ONE6 ACALL GNONE61

13、:ACALL KEYSCAN JB PSW.5,ONE60 LJMP MAINONE60:ACALL XS3ACALL KEYSCANONE3: ACALL XS2 ACALL KEYSCAN JB PSW.5,ONE3 CJNE A,#11,ONE33 SJMP MAINONE33:CJNE A,#10,ONE30ACALL DELAYACALL XS1SJMP ONE61KEYSCAN:LCALL KAP ;扫描键子程序JNZ KP1SETBPSW.5 ;置无键标志RETKP1:LCALL DELY ;去抖LCALL KAP;再次扫描键盘JNZ KP2;转识键码程序SETBPSW.5 ;置

14、无键标志RETRET.* ;KP2:CLRPSW.5;置有键操作标志*计算加减乘除MOVR0,#0FEH;逐歹U扫描初始值GN: MOV A,20HMOVR4,#00H;0列加数MOV B,#10KP4:MUL ABMOVA,R0ADD A,21HMOVP0,A;送列扫描仿号MOV 24H,AMOVA,P2;回读行信号;*得至个数JBACC.0,L1 ;不是A行,转第二行MOV A,22HMOVA,#00H ;是 A行,行吗=0MOV B,#10AJMPKP5MUL ABL1:JBACC.1,NEXT ;不是第二行,转下一ADD A,23H列MOV 25H,AMOVA,#08H ;是第二行,行

15、码二8;*得至 ij第二个数AJMPKP5MOV A,R5KP5:ADDA,R4;对应的行码+对应的列码=J0: CJNE A,#12,J1键码SJMP JIAPUSHACC ;保护已经得到的键码LJMP XS3KP3:LCALLDELYRETLCALLKAP ;继续扫描J1: CJNE A,#13,J2JNZKP3 ;A 值小等丁 0,表小手未SJMP JIAN松开!LJMP XS3POPACC ;A值等于0,手已经松开,RET弹回键码!J2: CJNE A,#14,J3RETSJMP CHENGNEXT:INCR4;下一列列码加1LJMP XS3MOVA,R0RETJNBACC.7,KEY

16、SCAN;列到最后列J3: LJMP CHU了吗?LJMP XS3RLARETMOVR0,A;下一列JIA: MOV A,24HAJMPKP4;扫而F 一列ADD A,25HKAP:MOVA,#00H;全扫描字(列)MOV JG1,AMOVP0,A;送全扫描字LJMP AAAAMOVA,P2;回读行信息RETCPLAJIAN:MOV A,24HANLA,#0FH;得到 A 值,=0,CLR C无键;*0,有键SUBB A,25HRETMOV JG1,ADELY:MOVR6,#14H;去抖!JNC JIAN1DL:MOVR7,#0FFHMOV JF,#0BFHDJNZR7,$MOV A,#255

17、DJNZR6,DLCLR CSUBB A,32HINC AMOV JG1,AJIAN1: LJMP AAAARETCHENG:CLR C ;个位与个位相乘MOV A,21HMOV B,23HMUL ABMOV B,#10DIV ABMOV JG,BMOV JS,AMOV A,20H;十位与个位相乘MOV B,23HMUL ABMOV B,#10DIV ABMOV JBA,AMOV A,BADDC A,JSCJNE A,#10,CH1SJMP CH2CH1: JC CH3CH2: CLR CSUBB A,#10MOV JS,AMOV A,JBAINC AMOV JBA,ASJMP CH4CH3:

18、 MOV JS,ACH4: MOV A,22H;个位与十位相乘MOV B,21HMUL ABMOV B,#10DIV ABADDC A,JBAMOV JBA,AMOV A,BADDC A,JSCJNE A,#10,CH5SJMP CH6CH5:JC CH7CH6:CLR CSUBB A,#10MOV JS,AMOV A,JBAINC AMOV JBA,ASJMP CH8CH7: MOVJS,ACH8: MOV A,20H;十位与十位相乘MOV B,22HMUL ABMOV B,#10DIV ABMOV JQ,AMOV A,BADDC A,JBACJNE A,#10,CH9SJMP CH10CH

19、9: JC CH11CH10:CLR CSUBB A,#10MOV JBA,AMOV A,JQINC AMOV JQ,ASJMP CH12CH11:MOV JBA,ACH12:RETCHU: MOV A,24HMOV B,25HDIV ABMOV JG1,AMOV A,B ;余数MOV B,#10MUL ABMOV B,25HDIV ABMOV JX,A;小数SJMP AAAARETAAAA:MOV A,JG1MOV B,#10DIV ABMOV JG,B;得到JG1个位MOV B,#10MOVA,23HDIV ABMOVP1,#0FFH;共阳火码MOV JS,B彳导至U JG1十位MOVP0

20、,#20HMOV JBA ,A;得到JG1百位MOVDPTR,#TABRETMOVCA,A+DPTR;查出字形代码.* ;MOVP1,A;送个位XS1: MOVA,21HMOV P1,#0FFH洪阳火他ACALLRETDELAYMOV P0,#20H* ;MOV DPTR,#TABXS3: MOVP1,#0FFH;共阳火码MOVCA,A+DPTR ;查出字形代码MOVP0,#01H;送位控佶号MOV P1,A;送个位MOVA,JFACALLDELAYMOVP1,A;送负号位RETACALLDELAY ;稳定显示信息XS2: MOV A,20H ;显示输入的第一个数MOVP1,#0FFH;共阳火码MOV P1,#0FFH洪阳火他MOV P0,#02HMOV P0,#10H;送位控佶号MOVA,JQMOV DPTR,#TABMOVDPTR,#TABMOVCA,A+DPTR ;查出字形代码MOVCA,A+DPTR ;查出字形代码MOV P1,A;0 位MOVP1,A ;送千位ACALLDELAY ;稳定显示信息ACALLDELAY ;稳定显示信息MOV A,21HMOVP1,#0FFH;共阳火码MOV P1,#0FFH洪阳火他MOVP0,#04HMOV P0,#20HMOVA,JBAMOV DPTR,#TABMOVDPTR,#TABMOVCA,A+D

温馨提示

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

评论

0/150

提交评论