赞
踩
基于89c51的简易计算器的课程设计.doc
(15页)
本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!
19.90 积分
51单片机简易计算器设计目录一、 设计任务和要求.................................21、设计要求......................................22、设计方案的确定.................................2二、 硬件设计.......................................2 1、单片机最小系统...................................22、键盘电路的设计.................................33、显示电路的设计.................................3 4、系统硬件电路图.................................4三、 软件设计.......................................5 1 系统设计......................................52 显示电路的设计.................................6 3、程序清单......................................8四、 调试与仿真.....................................14五、 试验箱实物图...................................14六、 心得体会.......................................15一、 设计任务和要求1、设计要求 利用单片机设计并制作简易计算器。具体要求如下:1、4*4按键用于0~9的数字输入、加减乘除、等于、清零功能;2、能实现简单的加减乘除运算;3、输入数字及计算结果通过LED或LCD显示器显示。2、设计方案的确定 按照设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于AT89C51芯片的I口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。 主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。 二、 硬件设计简易数字计算器系统硬件设计主要包括:键盘电路,显示电路以及其他辅助电路。下面分别进行设计。 1.单片机最小系统 单片机最小系统就是支持主芯片正常工作的最小部分,包括主控芯片、复位电路和晶振电路。(1)、复位电路 复位电路 本设计采用上电与手动复位电路,电阻分别选取100和10K,电容选取10uF,系统一上电,芯片就复位,或者中途按按键也可以进行复位。(2)、晶振电路 图三 晶振电路晶振电路是单片机的心脏,它用于产生单片机工作所需要的时钟信号。单片机的晶振选取11.0592MHz,晶振旁电容选取30pF。2.键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。通用计算机使用的标准键盘就是编码键盘。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。本课题需要的是16个按键,故选择用非编码键盘。计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图五所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。具体电路连接如图所示: 4*4键盘接口电路3.显示电路的设计 当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。数码管显示有静态显示和动态显示两种方法。为了减少端口的使用,故选择动态显示。 电路如下图所示:4、系统硬件电路图总电路原理图三、 软件设计在十进制计算器的软件规划要求下,简易计算器的程序主要包括以下功能模块:(1)主模块,为系统的初始化。(2)显示与读键模块,分为判键程序段、运算操作子程序、显示子程序等部分;1.系统设计(一) 系统模块图 图六 系统模块图 此系统包括输入、运算和显示模块,由单片机控制。其中通过输入键盘模块将数字0~9和运算符号“+”、“-”、“*”、“/”输入单片机进行运算;运算模块分别根据输入的运算符进行加减乘除运算;显示模块将运算后的数值通过动态扫描使之在数码管上输出。(二) 系统总流程图主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图六所示。(1)数字送显示缓冲程序设计简易计算器所显示的数值最大位三位。要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。可重新输入数字,再次计算。(2)运算程序的设计首先初始化参数,送LED三位显示“0”,其它位不显示。然后扫描键盘看是否有键输入,若有,读取键码。判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。 初始化参数清零键LED显示输入数值读取键值状态清零数值送显示缓存开始按键输入?分析键值数字键等待数值输入结果送显示缓存保存结果和功能键根据上次功能键和输入的数据计算结果功能键否是是数字键是清零键是功能键 图七 主程序流程图2、显示与按键设计(一) LED显示程序设计 LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。为了显示数字或符号,要为LED显示器提。省略部分。为二位数 MOV 32H,A ;百位数送显示缓存DISP11: LJMP MLOOPDISP: MOV R0,#34HDIR1: MOV DPTR,#SEGTAB MOV A,@R0 MOVC A,@A+DPTR MOV P0,A CJNE R0,#34H,DIR2 SETB P2.0 CALL D1MS CLR P2.0 DEC R0 SJMP DIR1DIR2: CJNE R0,#33H,DIR3 SETB P2.1 CALL D1MS CLR P2.1 DEC R0 SJMP DIR1DIR3: SETB P2.2 CALL D1MS CLR P2.2 RETD1MS: MOV R7,#02HDMS: MOV R6,#0F0H DJNZ R6,$ DJNZ R7,DMS RETSEGTAB: DB 0C0H, 0F9H, 0A4H, 0B0H DB 99H, 92H, 82H, 0F8H DB 80H, 90H, 88H, 83H DB 0C6H, 0A1H, 86H, 8EHTESTKEY:ACALL DISP MOV P1,#0FH ;读入键状态 MOV A,P1 CPL A ANL A,#0FH ;高四位不用 RETKEYTABLE: DB 0EEH,0EDH,0DDH,0BDH ;键码定义 DB 0EBH,0DBH,0BBH,0E7H DB 0D7H,0B7H,0DEH,0BEH DB 07EH,07DH,07BH,077HGETKEY: MOV R6,#10 ;读键子程序 ACALL DELAY MOV P1,#0FH MOV A,P1 CJNE A,0FH,K12 LJMP MLOOPK12: MOV B,A MOV P1,#0EFH MOV A,P1 CJNE A,#0EFH,K13 MOV P1,#0DFH MOV A,P1 CJNE A,#0DFH,K13 MOV P1,#0BFH MOV A,P1 CJNE A,#0BFH,K13 MOV P1,#07FH MOV A,P1 CJNE A,#07FH,K13 LJMP MLOOPK13: ANL A,#0F0H ORL A,B MOV B,A MOV R1,#16 MOV R2,#0 MOV DPTR,#KEYTABLEK14: MOV A,R2 MOVC A,@A+DPTR CJNE A,B,K16 MOV P1,#0FHK15: MOV A,P1 CJNE A,#0FH,K15 MOV R6,#10 ACALL DELAY MOV A,R2 RETK16: INC R2 DJNZ R1,K14 AJMP MLOOP ;10ms延时子程序DELAY: MOV R7,#10TS1: MOV R6,#0FFH TS2: NOP NOP DJNZ R6,TS2 DJNZ R7,TS1 RET END四、 调试与仿真在Proteus中将硬件电路全部接好以后,将Keil中生成的.hex文件导入到单片机中,点击开始仿真按钮,电路开始仿真。可以观察到:数码管显示“000”。分别依次按下按键“9”、“*”、“9”和“=”,可以看到数码管显示“81”;也可以分别调试其它功能键,结果发现调试结果与预期的理论值相吻合,即本次课程设计已成功。五、 试验箱实物图六、 心得体会 为期两周的单片机课程设计结束了,在老师的指导下,终于完成了我们的设计任务-简易计算器。总的来说,这次课程设计是比较成功的。当然,这其中也经历了许多坎坷,但是在我的坚持不懈下,在老师的细心指导下,在同学们的热情帮助下,最终克服了种种困难,取得了成功。 刚开始接到这个计算器的课程设计任务时,由于缺乏编写大量程序的经验,不能如行云流水般的将全部的各部分代码写出,于是去网上查找相关资料,了解计算器的输入控制原理、运算处理以及显示的原理。了解之后自己尝试编写程序,在此过程中,其中键盘扫描和动态扫描显示扫描程序困扰了我很久,经过八九天的辛苦工作,终于初步把所需要的程序编好了,于是就用Keil uversion2进行仿真,在仿真期间也发现了许多错误,经过反复的编译差错,仿真编译通过后,于是开始在Proteus中连硬件电路,全部接完电路之后将Keil生成的.Hex文件导入进行仿真,发现软件与硬件不能够对应协调工作,于是分别对软件和硬件进行检查,经过反复的仿真调试,并且在同学的帮助和自己对每个子程序进行仿真观察下,终于在课设快结束时成功的调试出结果了。这就是我这两周课程设计的经过,看似简单,过程却曲折艰辛。 通过这次课程设计,我进一步加深了对电子自动控制的了解。并进一步熟练了对Keil和Proteus软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。通过请教老师,终于把问题都解决了,并加深了对计算器工作的原理的了解。同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。总之,通过这次的设计,进一步了解了单片微型计算机及应用原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。 同时通过本次课程设计的学习,掌握了一种系统的研究方法,可以进行一些简单的编程,我还深深的体会到设计课的重要性和目的性所在。为了完成项目,在网络上找到了许多相关的资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。将书本上的理论知识和实际有机地结合起来,从理论中得出结论。锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。此次课设还巩固和综合运用所学过的原理知识,从而提高自己的实际动手能力和独立思考的能力。 关 键 词: 89 计算器 51 简易 89c51 课程 设计 基于
天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。