微机课程设计报告题目简易计算器仿真学院(部)信息学院专业通信工程班级2011240401学生姓名张静学号3312 月14 日至12 月27 日共2 周指导教师(签字)吴向东宋蓓蓓单片机十进制加法计算器设计摘要本设计是基于51系列的单片机进行的十进制计算器系统设计,可以完成计算器的键盘输入,进行加、减、乘、除3位无符号数字的简单四则运算,并在LED上相应的显示结果。
软件方面从分析计算器功能、流程图设计,再到程序的编写进行系统设计。
编程语言方面从程序总体设计以及高效性和功能性对C语言和汇编语言进行比较分析,针对计算器四则运算算法特别是乘法和除法运算的实现,最终选用全球编译效率最高的KEIL公司的μVision3软件,采用汇编语言进行编程,并用proteus仿真。
引言十进制加法计算器的原理与设计是单片机课程设计课题中的一个。
在完成理论学习和必要的实验后,我们掌握了单片机的基本原理以及编程和各种基本功能的应用,但对单片机的硬件实际应用设计和单片机完整的用户程序设计还不清楚,实际动手能力不够,因此对该课程进行一次课程设计是有必要的。
单片机课程设计既要让学生巩固课本学到的理论,还要让学生学习单片机硬件电路设计和用户程序设计,使所学的知识更深一层的理解,十进制加法计算器原理与硬软件的课程设计主要是通过学生独立设计方案并自己动手用计算机电路设计软件,编写和调试,最后仿真用户程序,来加深对单片机的认识,充分发挥学生的个人创新能力,并提高学生对单片机的兴趣,同时学习查阅资料、参考资料的方法。
关键词:单片机、计算器、AT89C52芯片、汇编语言、数码管、加减乘除目录摘要 (01)引言 (01)一、设计任务和要求.............................1、1 设计要求1、2 性能指标1、3 设计方案的确定二、单片机简要原理.............................2、1 AT89C51的介绍2、2 单片机最小系统2、3 七段共阳极数码管三、软件设计...................................4、1 系统设计四、调试与仿真.................................5、1 Keil C51单片机软件开发系统5、2proteus的操作五、心得体会....................................参考文献......................................... 附录1 系统硬件电路图............................ 附录2 程序清单..................................一、设计任务和要求1.1 设计要求本次课程设计,我选择的课题是单片机十进制加法计算器软硬件设计,设计任务为:设计一键盘显示装置,键盘上除需定义10个十进制数字键外还要相应的功能键,其它键不定义无响应。
利用此系统可分别可输入十进制被加数与加数,实现两数相加并将结果以十进制形式显示出来。
(扩展:多位10进制数相加)1.2 性能指标本课程设计的十进制加法计算器的计算范围为0~255,计算结果全为整数,计算结果溢出结果不显示。
1、加法:三位加法,计算结果超过255溢出不显示2、减法:三位减法,计算结果若小于零溢出不显示3、乘法:三位数乘法4、除法:整数除法5、有清零功能1.3 设计方案的确定按照1.1的设计要求,本课题需要使用数码管显示和扩展4*4键盘,由于AT89C51芯片的I口不够多,而且为了硬件电路设计的简单化,故选择串行动态显示和用P1口扩展4*4键盘,扩展的4*4键盘定义十个数字键,六个功能键,使用串行动态显示显示运算结果。
主程序进行初始化,采用行列扫描进行查表得出键值,每次按键后调用显示子程序。
二、单片机简要原理在该课程设计中,主要用到一个AT89C51芯片和串接的共阴数码管。
作为该设计的主要部分,下面将对它们的原理及功能做详细介绍和说明。
2.1 AT89C52的介绍:图一AT89C52外形结构和引脚分布图芯片AT89C52的外形结构和引脚图如图一所示。
2.2 组成部分支持主芯片正常工作的组成部分,包括电阻、数码管、键盘(一)电阻图二电阻(二)键盘图三键盘2.3 数码管图四数码管图为数码管的引脚图,从左到右数码管的段码分别为a,b,c,d,e,f,g和小数点dp。
三、软件设计在十进制加法计算器的软件规划要求下,简易计算器的程序主要包括以下功能模块:(1)主模块,为系统的初始化。
(2)显示与读键模块,分为判键程序段、运算操作子程序、显示子程序等部分;3.1系统设计(一)系统模块图输入模块单片机运算模块显示模块图六系统模块图此系统包括输入、运算和显示模块,由单片机控制。
其中通过输入键盘模块将数字0~9和运算符号“+”、“-”、“*”、“/”输入单片机进行运算;运算模块分别根据输入的运算符进行加减乘除运算;显示模块将运算后的数值通过动态扫描使之在数码管上输出。
(二)系统总流程图主程序主要是用来进行初始化的,调用其他子程序,清空各个标志位,清空缓存区,读取键码,判断功能,在LED上作出回应,主程序流程图如图六所示。
(1)数字送显示缓冲程序设计简易计算器所显示的数值最大位六位要。
(2)运算程序的设计首先初始化参数,送LED三位显示“0”,其它位不显示。
然后扫描键盘看是否有键输入,若有,读取键码。
判断键码是数字键、清零键还是功能键,是数值键则送LED显示并保存数值,是清零键则做清零处理,是功能键则又判断是“=”还是运算键,若是“=”则计算最后结果并送LED显示,若是运算键则保存相对运算程序的首地址。
图七 主程序流程 初始化参数 清零键LED 显示输入数值 读取键值 状态清零数值送显示缓存开始按键输入?分析键值数字键 等待数值输入结果送显示缓存保存结果和功能键根据上次功能键和输入的数据计算结果 功能键否是是数字键 是清零键是功能键四、调试与仿真下面用KEIL uVision3与proteus仿真软件介绍十进制加法计算器的仿真与调试。
4.1 Keil C51单片机软件开发系统(一)系统的整体结构C51工具包的整体结构中,其中uVision是C51 for Windows的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。
开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。
然后分别由C51编译器编译生成目标文件(.OBJ)。
目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。
ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。
(二)采用KEIL 开发的89c51单片机应用程序步骤:1. 在uVision 集成开发环境中创建新项目(Project),扩展文件名为.UV2,并为该项目选定合适的单片机CPU器件(本设计采用ATMEL 公司下的AT89C51)2. 用uVision 的文本编辑器编写源文件,可以是汇编文件(.ASM),也可以使C语言文件(扩展名.C),并将该文件添加到项目中去。
一个项目文件可以包含多个文件,除了源程序文件外,还可以是库文件、头文件或文本说明文件。
3. 通过uVision 3 的相关选择项,配置编译环境、连接定位器以及Debug 调试器的功能。
4. 对项目中的源文件进行编译连接,生成绝对目标代码和可选的HEX文件,如果出现编译连接错误则返回到第2步,修改源文件中的错误后重构整个项目。
5. 对没有语法错误的程序进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的ROM中。
4.2 proteus的操作(一)硬件电路图的接法操作1.放置选择(删除)元器件2.移动元器件3.缩放视图4.连接导线5.仿真,调试(二)单片机系统PROTEUS设计与仿真过程Proteus强大的单片机系统设计与仿真功能,使它可成为单片机系统应用开发和改进手段之一。
全部过程都是在计算机上通过Proteus来完成的。
其过程一般也可分为三步:1.在ISIS平台上进行单片机系统电路设计、选择元器件、接插件、连接电路和电气检测等,简称Proteus电路设计。
2.在Keil平台上进行单片机系统程序设计、编辑、汇编编译、代码级调试,最后生成目标代码文件(*.hex)。
简称Proteus源程序设计和生成目标代码文件。
3.在ISIS平台上将目标代码文件加载到单片机系统中,并实现单片机系统的实时交互、协同仿真。
它在相当程度上反映了实际单片机系统的运行情况。
简称Proteus仿真。
(三) Proteus中课程设计的仿真结果在Proteus中将硬件电路全部接好以后,将Keil中生成的.hex文件导入到单片机中,点击开始仿真按钮,电路开始仿真。
可以观察到:数码管显示“000”;分别依次按下按键“5”、“+”、“6”和“=”,可以看到数码管显示“11”;也可以分别调试其它功能键,结果发现调试结果与预期的理论值相吻合,即本次课设已成功。
总的仿真原理电路图见附录1图九。
五、心得体会为期一周的单片机课程设计终于结束了,通过紧张的工作,完成了我们的设计任务-十进制加法计算器。
总的来说,这次课程设计是比较成功的。
当然,这其中也经历了许多坎坷,但是在我的坚持不懈下,在老师的细心指导下,在同学们的热情帮助下,最终克服了种种困难,取得了成功。
刚开始接到这个计算器的课程设计任务时,因为以前做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。
但是由于缺乏编写大量程序的经验,不能如行云流水般的将全部的各部分代码写出,于是去网上查找相关资料,了解计算器的输入控制原理、运算处理以及显示的原理。
了解之后自己尝试编写程序,在此过程中,其中键盘扫描和动态扫描显示扫描程序困扰了我很久,经过三四天的辛苦工作,终于初步把所需要的程序编好了,于是就用Keil uversion3进行仿真,在仿真期间也发现了许多错误,基本上都是平日容易犯的错误,比如忘记了子程序标号、死循环程序、标点符号的漏写等。
经过反复的编译差错,仿真编译通过后,于是开始在Proteus中连硬件电路,全部接完电路之后将Keil生成的.Hex文件导入进行仿真,发现软件与硬件不能够对应协调工作,于是分别对软件和硬件进行检查,经过反复的仿真调试,并且在同学的帮助和自己对每个子程序进行仿真观察下,终于在课设快结束时成功的调试出结果了。
这就是我这一周课设的经过,看似简单,过程却曲折艰辛。
通过这次课程设计,我进一步加深了对电子自动控制的了解。