简易计算器设计课程设计.docx

上传人:b****0 文档编号:12730284 上传时间:2023-04-21 格式:DOCX 页数:30 大小:236.88KB
下载 相关 举报
简易计算器设计课程设计.docx_第1页
第1页 / 共30页
简易计算器设计课程设计.docx_第2页
第2页 / 共30页
简易计算器设计课程设计.docx_第3页
第3页 / 共30页
简易计算器设计课程设计.docx_第4页
第4页 / 共30页
简易计算器设计课程设计.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

简易计算器设计课程设计.docx

《简易计算器设计课程设计.docx》由会员分享,可在线阅读,更多相关《简易计算器设计课程设计.docx(30页珍藏版)》请在冰豆网上搜索。

简易计算器设计课程设计.docx

简易计算器设计课程设计

 

课程设计(论文)

 

题目名称简易计算器设计

课程名称单片机原理及应用

学生姓名

学号

系、专业

指导教师

 

2013年6月24日

摘要

本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。

设计过程在硬件与软件方面进行同步设计。

硬件方面从功能考虑,首先选择内部存储资源丰富的AT89C51单片机,输入采用4×4矩阵键盘。

显示采用3位7段共阴极LED动态显示。

软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。

编程语言方体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,采用汇编语言进行编程,并用proteus仿真。

关键词:

计算器;AT89C51芯片;数码管;矩阵键盘

 

 

第1章设计说明

1.1设计要求

要求能实现小于255的数的加减乘除运算,采用4×4键盘,根据输入键的按下实现不同的功能,最终结果通过LED显示。

1.2性能指标

本课程设计的十进制加法计算器的计算范围为0~255,计算结果全为整数,计算结果溢出结果不显示。

1.加法:

三位加法,计算结果超过255溢出不显示

2.减法:

三位减法,计算结果若小于零溢出不显示

3.乘法:

三位数乘法

4.除法:

整数除法

5.有清零功能

1.3设计方案的确定

按照设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于AT89C51芯片的I/O口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。

主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。

 

第2章单片机主要原理

在该课程设计中,主要用到一个AT89C51芯片和串接的共阴数码管。

作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。

2.1单片机概述

单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。

单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。

通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件:

中央处理器、存储器和I/O接口电路等。

因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。

单片机经过1、2、3,3代的发展,目前单片机正朝着高性能和多品种方向发展,它们的CPU功能在增强,内部资源在增多,引脚的多功能化,以及低电压低功耗。

MSC-51芯片简介:

8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:

(1)中央处理器:

中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。

(2)数据存储器(RAM):

8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。

(3)程序存储器(ROM):

8051单片机具有64KB程序存储器寻址空间,程序存储器内外统一编址,用来存放用户程序、表格、常数。

当引脚EA=1时,程序从内部的程序存储器开始执行,当内部程序存储器中的程序执行完毕后,在转向外部的程序存储器。

当引脚EA=0时,程序从外部程序存储器开始执行。

(4)并行输入输出(I/O)口:

8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。

当P0口作为通用的I/O接口使用时,漏极处于开路状态,所以需接上拉电阻。

(5)全双工串行口:

8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。

(6)中断系统:

8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。

(7)MCS-51的引脚说明:

MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。

现在我们对这些引脚的功能加以说明:

如图1.1

 

图1.1单片机引脚

1.电源引脚:

VCC:

电源正(一般接+5V电源)

GND:

电源接地端

2.复位引脚:

RST:

复位引脚。

当该引脚保持两个机器周期以上的高电平时,单片机就可恢复初始状态。

3.端口引脚:

P0.0-P0.7:

P0口,8位双向线。

P1.0-P1.7:

P0口,8位双向线。

P2.0-P2.7:

P0口,8位双向线。

P3.0-P3.7:

P0口,8位双向线。

4.时钟电路:

XTAL1和XTAL2:

外接晶振引脚。

晶振信号直接加在XTAL1和XTAL2两端。

5.控制引脚:

ALE/

、EA/Vpp组成MCS控制总线。

EA/Vpp(31引脚):

程序存储器的内外部选通线。

当EA=1时,选通内部程序存储器中的程序,当片内程序存储器存放的指令读完后再读外部存储器指令;当EA=0时,不管片内有无程序存储器,一律读取外部程序存储器程序。

ALE/

(30引脚):

地址锁存信号。

访问外部程序存储控制信号。

2.2单片机最小系统

单片机最小系统就是支持主芯片正常工作的最小部分,是单片机工作的最基本的配置,包括主控芯片、复位电路和晶振电路。

如图2.1

图2.1单片机最小系统

2.3七段共阳极数码管

图2.2七段共阳数码管

图为七段共阳数码管的引脚图,从左到右数码管的段码分别为a,b,c,d,e,f,g和小数点dp,低电平时点亮,最右边为位选端。

 

第3章硬件设计

简易数字计算器系统硬件设计主要包括:

键盘电路,显示电路以及其他辅助电路。

下面分别进行设计。

3.1键盘电路的设计

键盘可分为两类:

编码键盘和非编码键盘。

编码键盘是较多按键(20个以上)和专用驱动芯片的组合,当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。

通用计算机使用的标准键盘就是编码键盘。

当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。

但大多数智能仪器和电子产品的按键数目都不太多(20个以内),为了降低成本和简化电路通常采用非编码键盘。

非编码键盘的接口电路有设计者根据需要自行决定,按键信息通过接口软件来获取。

本课题需要的是16个按键,故选择用非编码键盘。

计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。

矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。

这样键盘上按键的个数就为4×4个。

这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。

矩阵键盘的工作原理:

计算器的键盘布局如图五所示:

一般有16个键组成,在单片机中正好可以用一个P1口实现16个按键功能,这种形式在单片机系统中也最常用。

具体电路连接如图3.1所示:

图3.14*4键盘接口电路

3.2显示电路的设计

当系统需要显示少量数据时,采用LED数码管进行显示是一种经济实用的方法。

数码管显示有静态显示和动态显示两种方法。

为了减少端口的使用,故选择动态显示。

电路如下图3.2所示:

图3.2三位数码管显示电路

 

第4章软件设计

在十进制加法计算器的软件规划要求下,简易计算器的程序主要包括以下功能模块:

(1)主模块,为系统的初始化。

(2)显示与读键模块,分为判键程序段、运算操作子程序、显示子程序等部分;

4.1系统设计

(1)系统模块图

 

图4.1系统模块图

此系统包括输入、运算和显示模块,由单片机控制。

其中通过输入键盘模块将数字0~9和运算符号“+”、“-”、“*”、“/”输入单片机进行运算;运算模块分别根据输入的运算符进行加减乘除运算;显示模块将运算后的数值通过动态扫描使之在数码管上输出。

(2)系统总流程图

主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图4.2所示。

1.数字送显示缓冲程序设计

简易计算器所显示的数值最大位三位。

要显示数值,先判断数值大小和位数,如果是超过三位或大于255,将不显示数字。

可重新输入数字,再次计算。

2.运算程序的设计

首先初始化参数,送LED三位显示“0”,其它位不显示。

然后扫描键盘看是否有键输入,若有,读取键码。

判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。

 

 

 

图4.2主程序流程图

4.2显示与按键设计

(1)LED显示程序设计

LED显示器由七段发光二极管组成,排列成8字形状,因此也称为七段LED显示器。

为了显示数字或符号,要为LED显示器提供代码,即字形代码。

七段发光二极管,再加上一个小数点位,共计8段,因此提供的字形代码的长度正好是一个字节。

简易计算器用到的数字0~9的共阳极字形代码如下表:

 

表1共阳极数码管段码对照表

显示字型

g

f

e

d

c

b

a

段码

0

0

1

1

1

1

1

1

0c0h

1

0

0

0

0

1

1

0

0f9h

2

1

0

1

1

0

1

1

0a4h

3

1

0

0

1

1

1

1

0b0h

4

1

1

0

0

1

1

0

99h

5

1

1

0

1

1

0

1

92h

6

1

1

1

1

1

0

1

82h

7

0

0

0

0

1

1

1

0f8h

8

1

1

1

1

1

1

1

80h

9

1

1

0

1

1

1

1

90h

(2)读键子程序设计

为了实现键盘的数据输入功能和命令处理功能,每个键都有其处理子程序,为此每个键都对应一个码——键码。

为了得到被按键的键码,现使用行扫描法识别按键。

其程序框图如图4.3。

矩阵按键扫描程序是一种节省I/O口的方法,按键数目越多节省I/O口就越可观,思路:

先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。

本键盘扫描程序的优点在于:

不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。

另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。

读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。

第一次所有列线均输出低电平,从所有读入键盘信息(行信息);第二次所有行线均输出低电平,从所有行线读入键盘信息(列信息)。

将两次读键信息进行组合就可以得到按键的特征编码,然后通过查表得到按键的顺序编码。

将各特征编码按希望的顺序排成一张表,然后用当前读得的特征码来查表。

当表中有该特征码时,它的位置就是对应的顺序编码;当表中没有该特征码时,说明这是一个没有定义的键码,与没有按键(0FFH)同等看待。

 

 

 

 

图4.3计算键值子程序流程图

第5章调试与仿真

下面用KEILuVision3与proteus仿真软件介绍十进制加法计算器的仿真与调试。

5.1KeilC51单片机软件开发系统

(1)系统的整体结构

C51工具包的整体结构中,其中uVision是C51forWindows的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。

开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。

然后分别由C51编译器编译生成目标文件(.OBJ)。

目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。

ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。

(2)采用KEIL开发的89c51单片机应用程序步骤:

1.在uVision集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL公司下的AT89C51)

2.用uVision的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。

一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。

3.通过uVision3的相关选择项,配置编译环境、连接定位器以及Debug调试器的功能。

4.对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。

5.对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。

5.2proteus的操作

(1)硬件电路图的接法操作

1.放置选择(删除)元器件

2.移动元器件

3.缩放视图

4.连接导线

5.仿真,调试

(2)简易计算器设计原理图

图5.1简易计算器原理电路图

(3)单片机系统PROTEUS设计与仿真过程

Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。

全部过程都是在计算机上通过Proteus来完成的。

其过程一般也可分为三步:

1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。

2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。

简称Proteus源程序设计和生成目标代码文件。

3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。

它在相当程度上反映了实际单片机系统的运行情况。

简称Proteus仿真。

在Proteus中将硬件电路全部接好以后,将Keil中生成的.hex文件导入到单片机中,点击开始仿真按钮,电路开始仿真。

可以观察到:

数码管显示“000”;分别依次按下按键“5”、“+”、“6”和“=”,可以看到数码管显示“11”;也可以分别调试其它功能键,结果发现调试结果与预期的理论值相吻合,即本次课设已成功。

仿真结果如下:

图5.24+5的仿真结果

图5.38-2的仿真结果

图5.421*10的仿真结果

图5.566/3的仿真结果

图5.6计算器清零

 

第6章心得体会

刚开始接到这个计算器的课程设计任务时,因为以前做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。

但是由于缺乏编写大量程序的经验,不能如行云流水般的将全部的各部分代码写出,于是去网上查找相关资料,了解计算器的输入控制原理、运算处理以及显示的原理。

了解之后自己尝试编写程序,经过三四天的辛苦工作,终于初步把所需要的程序编好了,于是就进行仿真,在仿真期间也发现了许多错误,基本上都是平日容易犯的错误,比如忘记了子程序标号、死循环程序、标点符号的漏写等。

经过反复的编译差错,仿真编译通过后,于是开始在Proteus中连硬件电路,全部接完电路之后将.Hex文件导入进行仿真,发现软件与硬件不能够对应协调工作,于是分别对软件和硬件进行检查,经过反复的仿真调试,并且在同学的帮助和自己对每个子程序进行仿真观察下,终于在课设快结束时成功的调试出结果了。

这就是我这两周课程设计的经过,看似简单,过程却曲折艰辛。

通过这次课程设计,我进一步熟练了对Proteus软件的操作。

在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。

通过与同学探讨和请教老师,终于把问题都解决了,并加深了对计算器工作的原理的了解。

同时也掌握了做课程设计的一般流程,为以后的设计积累了一定的经验。

做课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。

学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

总之,通过这次的设计,进一步了解了单片微型计算机及应用原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。

同时通过本次课程设计的学习,掌握了一种系统的研究方法,可以进行一些简单的编程,我还深深的体会到设计课的重要性和目的性所在。

为了完成项目,在网络上找到了许多相关的资料,大大扩充自己的知识面,使许多以前想解决却无法解决的困难迎刃而解。

将书本上的理论知识和实际有机地结合起来,

理论中得出结论。

锻炼了实际分析问题和解决问题的能力,提高了适应实际的能力,为今后的学习和实践打下了良好的基础。

此次课设还巩固和综合运用所学过的原理知识,从而提高自己的实际动手能力和独立思考的能力。

参考文献

[1]周航慈.单片机应用程序设计技术(修订版).北京航空大学出版社

[2]江世明、黄同成.单片机原理及应用.中国铁道出版社

[3]张志良.单片机原理与控制技术.第2版.机械工业出版社

[4]康华光.电子技术基础(第5版).高等教育出版社出版,2006

[5]蒋力培.单片微机系统实用教程(第1版).机械工业出版社

[6]姜志海、刘连鑫.单片微型计算机原理及应用.电子工业出版社,2011

 

致谢

为期两周的单片机课程设计终于结束了,通过紧张的工作,完成了我的设计任务简易计算器设计。

总的来说,这次课程设计是比较成功的。

当然,这其中也经历了许多坎坷,但是在我的坚持不懈下,在老师的细心指导下,在同学们的热情帮助下,最终克服了种种困难,取得了成功。

在此,我非常感谢刘伟春老师对我这次课程设计的指导,在老师的教导下,我不仅学到了有关这个课题的相关知识,而且更重要的是学到了一种学习方法。

如果说刘老师的指导为我这次课程设计指明了大方向,那么同学就在细节上给了我很大的帮助,主要是帮我改论文格式和程序中的小错误。

老师的指导和同学的帮助给了我很大鼓励,是我这次课程设计得以完成的巨大动力。

通过本次课程设计也让我明白了团结的重要性,在此再一次感谢刘老师的指导和同学的帮忙。

 

附录程序清单

YJEQU50H;结果存放

YJ1EQU51H;中间结果存放

GONGEQU52H;功能键存放

ORG00H

START:

MOVR3,#0;初始化显示为空

MOVGONG,#0

MOV32H,#00H

MOV33H,#00H

MOV34H,#00H

MLOOP:

CALLDISP;调显示子程序

WAIT:

CALLTESTKEY;判断有无按键

JZWAIT

CALLGETKEY;读键

INCR3;按键个数

CJNEA,#0,NEXT1;判断是否数字键

LJMPE1;转数字键处理

NEXT1:

CJNEA,#1,NEXT2

LJMPE1

NEXT2:

CJNEA,#2,NEXT3

LJMPE1

NEXT3:

CJNEA,#3,NEXT4

LJMPE1

NEXT4:

CJNEA,#4,NEXT5

LJMPE1

NEXT5:

CJNEA,#5,NEXT6

LJMPE1

NEXT6:

CJNEA,#6,NEXT7

LJMPE1

NEXT7:

CJNEA,#7,NEXT8

LJMPE1

NEXT8:

CJNEA,#8,NEXT9

LJMPE1

NEXT9:

CJNEA,#9,NEXT10

LJMPE1

NEXT10:

CJNEA,#10,NEXT11;判断是否功能键

LJMPE2;转功能键处理

NEXT11:

CJNEA,#11,NEXT12

LJMPE2

NEXT12:

CJNEA,#12,NEXT13

LJMPE2

NEXT13:

CJNEA,#13,NEXT14

LJMPE2

NEXT14:

CJNEA,#14,NEXT15

LJMPE2

NEXT15:

LJMPE3;判断是否清除键

E1:

CJNER3,#1,N1;判断第几次按键

LJMPE11;为第一个数字

N1:

CJNER3,#2,N2

LJMPE12;为第二个数字

N2:

CJNER3,#3,N3

LJMPE13;为第三个数字

N3:

LJMPE3;第四个数字转溢出

E11:

MOVR4,A;输入值暂存R4

MOV34H,A;输入值送显示缓存

MOV33H,#00H

MOV32H,#00H

LJMPMLOOP;等待再次输入

E12:

MOVR7,A;个位数暂存R7

MOVB,#10

MOVA,R4

MULAB;十位数

ADDA,R7

MOVR4,A;输入值存R4

MOV32H,#00H;输入值送显示缓存

MOV33H,34H

MOV34H,R7

LJMPMLOOP

E13:

MOVR7,A

MOVB,#10

MOVA,R4

MULAB

JBOV,E3;输入溢出

ADDA,R7

JBCY,E3;输入溢出

MOVR4,A

MOV32H,33H;输入值送显示缓存

MOV33H,34H

MOV34H,R7

LJMPMLOOP

E3:

MOVR3,#0;按键次数清零

MOVR4,#0;输入值清零

MOVYJ,#0;计算结果清零

MOVGONG,#0;功能键设为零

MOV32H,#00H;显示清空

MOV33H,#00H

MOV34H,#00H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 幼儿读物

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1