课程设计 简易计算器设计与实现.docx
《课程设计 简易计算器设计与实现.docx》由会员分享,可在线阅读,更多相关《课程设计 简易计算器设计与实现.docx(13页珍藏版)》请在冰豆网上搜索。
课程设计简易计算器设计与实现
课程设计简易计算器设计与实现
长江职业学院工学院
毕业实践报告
课题名称:
简易计算器设计与实现
专业班级:
计算机控制技术081班
学生姓名:
黄杨
学号:
20082940
班级序号6
实践性质:
校内毕业实践
实践成绩:
指导老师:
杜力
2011年2月25日
一、绪论
一、绪论
本课题拟定以MCS-51系列单片机为控制中心,采用模块化的设计方案,运用液晶显示器或LED显示数据/键盘输入数据,以实现能够完成加、减、乘、除、数据存储等运算的简易计算器。
系统的功能是:
(1)模拟的计算器能显示10位数字,开机运行时,只显示最低位为“0”,其余不显示;
(2)4×4键盘分别表示:
0到9,+,-,×,/,=,CL;(3)第一次按下,显示“D1”,第二次按下,显示“D1D2”,第三次按下,显示“D1D2D3”…8个全显示完毕,再次按下按键时,给出“嘀”的提示音;(4)可以对计算结果小于256的两个无符号数进行加、减、乘、除运算。
单片机程序用汇编语言编写,经过Wave软件调试,生成HEX文件,再用Proteus软件进行计算机仿真。
程序中键盘部分使用行列式扫描原理,若无键按下则调用动态显示程序,并继续检测键盘;若有键按下则得其键值,并通过查表转换为数字0—9和功能键与清零键的代号。
动态显示程序,是先建立待显示缓冲区地址指针和共阴极数码管的段代码表;缓冲区内容通过查表得相应的段代码,再用位选信号动态扫描显示。
主程序在初始化后调用键盘程序,再判断返回的值。
若为数字0—9,则根据按键的次数进行保存和显示的处理,当按键次数超过八时,喇叭位置一;若为功能键,则先判断上次的功能键,根据代号执行不同功能,并将按键次数清零,然后进入BCD码程序,将计算结果拆分成个、十、百位,再返回主程序继续检测键盘并显示;若为清零键,则返回主程序的最开始。
1.1计算器的历史
说起计算器,值得我们骄傲的是,最早的计算工具诞生在中国。
中国古代最早采用的一种计算工具叫筹策,又被叫做算筹。
这种算筹多用竹子制成,也有用木头,兽骨充当材料的。
约二百七十枚一束,放在布袋里可随身携带。
直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。
17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的"纳皮尔算筹",英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加减乘除、乘方、开方运算,甚至可以计算三角函数,指数函数和对数函数,这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。
1.2电子计算器的特殊键
在使用电子计算器进行四则运算的时候,一般要用到数字键,四则运算键和清除数据键。
除了这些按键,还有一些特殊键,可以使计算更加简便迅速。
1.3单片机概述
单片机是现代电子设备中使用最广泛的电子元件。
它的价格低廉,功能强大,条件小,性能稳定。
目前在各类产品中都能看到单片机的身影,如门铃、报警器、玩具以及各类数据采集系统等。
单片机又称为微处理器,它是把中央处理器CPU、随机存取存储器RAM、只读存储器、I\O接口、定时器\计数器及其其他通信接口等全部集成在一块半导体芯片上,构成一个完整的微型计算机。
但随着大规模集成电路和计算机的技术的迅速发展,现在有些单片机本身就带有A/D、D/A转换器和串行接口等功能部件,使其更符合多功能控制技术要求。
单片机在电路中作为一个控制器,在外部必然加一些硬件系统(如驱动电路、输入设备及执行机构等)和软件设计(流程图、程序),这样就是一个实用的控制系统,以满足各个应用领域的需要。
单片机厂商很多,但目前在我国使用最为广泛的单片机系列Intel公司生产的MCS-51系列单片机。
1.4设计要求
1.设计4*4的键盘,其中10个数字键0~9,其余6个为“+”“-”“*”“/”“=”和“C”
2.设计2位LED接口电路
3.实现1位数的简单运算
1.5我做简易模拟计算器的过程说明
计算器是数字电路系统中最基本的功能模块之一。
设计十进制计算器,要求计算器有计数允许和复位输入及进位输出功能。
计数时钟可以用2Hz信号,用LED显示计数值。
本设计要求用仿真和测试两种手段来验证计数器的功能。
1.6系统的基本功能
它具有计数允许,复位和预置数据功能。
二、课题设计的分析与思路的确定
首先本次课程设计的任务是设计一个简单的能进行六位无符号整数的加减乘除运算的计算器,首先考虑画原理图,所用CPU可以选择AT89C51或AT89C52,我选择了后者。
显示设备,因为是六位数,所以可以选择一个六位LED液晶显示屏作显示器,显示屏有共阳极的和共阴极的两种,在这里我选择了共阳极显示屏,输入数据低电平有效。
控制端高电平有效。
程序设计首先考虑键盘,程序要一直不断地扫描键盘,看是否有按键按下,当按键按下时就会执行相应的程序。
键盘只需要八个接口就可以完全控制,因此使用AT89C52的一个并行口就可实现,用p1口控制键盘实现键盘的扫描。
用p2口传送数据显示数字,用p3口的低六位控制六个数码管的显示。
扫描到按键就要处理按键,显示0~9十个数字,用到按键数据显示函数,数据显示需要一个动态显示的过程,计算器要处理第一个数和运算符,因此还要编写运算符处理函数。
加减乘除运算的结果不能在数码管上显示,需要将数据转换,让六个数码管分别显示各个位上的数据。
这就需要编写LED显示函数。
当按下加减乘除运算符处理完相应的运算后,要将数码显示管清零以便显示系一个数据,因此又需要编写清零函数。
整个程序采用函数思想,将整个程序化整为零。
编写各个函数然后调用函数就可实现计算器功能。
程序的整体流程为:
1、主函数调用键盘扫描函数,2、如果有按键且是0~9十个数字则调用按键显示函数显示数字,3、如果是开关按键则调用清零函数。
4、如果是加减乘除运算符,调用第一个数及运算符处理函数。
5、如果是等号按键,则调用运算结果运算函数,运算结果函数再调用LED显示函数显示结果。
程序的整体设计思路就出来了,程序中还会用到延时程序,因此添加完延时程序后,整个程序就编写完了。
三、芯片简介
3.1MSC-51芯片简介
MCS-51单片机内部结构
8051是MCS-51系列单片机的典型产品,我们以这一代表性的机型进行系统的讲解。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
中央处理器
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
数据存储器(RAM)
8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
图1
程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断
一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
单片机的结构有两种类型,一种是程序存储器和数据存储器分开的形式,即哈佛(Harvard)结构,另一种是采用通用计算机广泛使用的程序存储器与数据存储器合二为一的结构,即普林斯顿(Princeton)结构。
INTEL的MCS-51系列单片机采用的是哈佛结构的形式,而后续产品16位的MCS-96系列单片机则采用普林斯顿结构。
下图是MCS-51系列单片机的内部结构示意图5。
3.2MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
MCS-51的引脚说明:
MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直接DIP结构,右图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。
现在我们对这些引脚的功能加以说明:
如图3
Pin9:
RESET/Vpd复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。
初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。
RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。
然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。
8051的复位方式可以是自动复位,也可以是手动复位,见下图4。
此外,RESET/Vpd还是一复用脚,Vcc掉电其间,此脚可接上备用电源,以保证单片机内部RAM的数据不丢失。
Pin30:
ALE/
当访问外部程序器时,ALE(地址锁存)的输出用于锁存地址的低位字节。
而访问内部程序存储器时,ALE端将有一个1/6时钟频率的正脉冲信号,这个信号可以用于识别单片机是否工作,也可以当作一个时钟向外输出。
更有一个特点,当访问外部程序存储器,ALE会跳过一个脉冲。
如果单片机是EPROM,在编程其间,
将用于输入编程脉冲。
Pin29:
当访问外部程序存储器时,此脚输出负脉冲选通信号,PC的16位地址数据将出现在P0和P2口上,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。
Pin31:
EA/Vpp程序存储器的内外部选通线,8051和8751单片机,内置有4kB的程序存储器,当EA为高电平并且程序地址小于4kB时,读取内部程序存储器指令数据,而超过4kB地址则读取外部指令数据。
如EA为低电平,则不管地址大小,一律读取外部程序存储器指令。
显然,对内部无程序存储器的8031,EA端必须接地。
在编程时,EA/Vpp脚还需加上21V的编程电压。
四、计算器程序设计
4.1存储单元分配
30H单元:
数值个位显示单元;31H单元:
数值十位显示单元;32H单元:
数值百位显示单元;33H单元:
数值千位显示单元;23H单元:
第一操作数存储单元;24H单元:
第二操作数存储单元;25H单元:
键值暂存单元;27H单元:
清除键状态;34H-37H单元:
结果数据转换暂存单元;38H-39H单元:
结果高低8位暂存单元;R5单元:
操作数计数单元;R4单元:
操作数数值位数计数单元;R3单元:
运算符号存储单元。
4.2主程序设计
主程序进行程序中用到的一些存储单元的初始化,数值显示和4*4键盘扫描。
首先,进行存储单元初始化,给数码管显示单元30H-33H赋予“0000”字形数据,将数值计数单元,存储单元,23H-25H,34H-37H,38H,39H,3AH,3BH,3CH,赋予初值零。
之后,调用键盘扫描子程序,和数码管显示数据转换程序,数码管动态显示子程序。
主程序不断进行键盘扫描,数码管显示数据转换子程序和动态显示子程序。
4.3数码管显示数据转换子程序CONV
由于数值单元存放的是二进制数,而用户熟悉的是十进制数,所以应将数值单元中的二进制转换为十进制数,即BCD码。
要通过数码管显示出当前数值,还必须将BCD码进一步转换为七段码,转换的最终结果数据存放于显示缓冲区30H-33H单元中,其中30H单元存放数值的个位七段码,31H单元存放数值的十位七段码,32H单元存放数值的百位七段码,33H单元存放数值的千位七段码。
4.4数码管动态显示子程序
本任务由P1口输出字形码,P0口输出字位码。
先将存放于30H单元的数值个位七段码由P1口输出,同时P0口输出使数值个位显示数码管点亮的字位码。
由于采用的是共阳数码管,所以只有该位数码管对应的P0.0为1,其他位P0.1-P0.3位0,点亮延时10MS。
然后P1口输出数值十位七段码,P0.1位1,数值十位数码管点亮,延时10MS。
接着P1口输出数值百位七段码,P0.2为1,数值百位数码管点亮,延时10MS。
最后P1口输出数值千位七段码,P0.3为1,数值千位数码管点亮,延时10MS。
五、连接知识
5.1键盘的连接
键盘由4*4共16个按键组成,10个数字键(由0-9组成)5个运算符号(加减乘除等于)组成,1个清除键(作用相当于整体复位)。
键盘只需要八个接口就可以完全控制,因此使用AT89C52的一个并行口就可实现,用p1口控制键盘实现键盘的扫描。
用p2口传送数据显示数字,用p3口的低六位控制六个数码管的显示。
监测是否有键按下,有键按下时,在无硬件去抖的动电路时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。
键盘连接图如下。
5.2、显示器的连接
在本任务中用6位LED数码管显示当前数值的十万,万,千,百,十,个,由于数码管个数多,如采用静态显示方式,则占用单片机的I/O口线太多,如果用定时器/计数器的串行移位寄存器工作方式及外接串入并出移位寄存器74LS164的方式,则电路复杂。
所以,在数码管个数较多时,常采用动态显示方式。
显示屏有共阳极的和共阴极的两种,这这里我们选择共阳极显示屏,输入数据低电平有效,控制端高电平有效。
6位数码管的相同段并联在一起,由一个8位I/O(P1口)输出字形码控制显示某一字形,每个数码管的公共端由另外一个I/O口(P2口)输出的字位码控制,即数码管显示的字形是由单片机I/O口输出的字形码确定,而哪个数码管点亮是由单片机I/O口输出的字位码确定的。
6个数码管分时轮流循环点亮,在同一时刻只有1个数码管点亮,
本此硬件连接的系统总框图如下:
六、仿真过程
程序编写完成后,编译、连接、运行程序,生成hex文件。
如果程序有错进行调试,按f10进行单步调试,调试无误后会生成hex文件,右键单击cpu后添加hex文件,将软件与硬件结合起来进行仿真,输入数据检测加减乘除运算。
当然程序运行无误并不等于完成任务,如果硬件不能实现预设的功能,还需要检查源程序采用单步调试,选取变量,观察变量值是否符合。
多次调试直到与预想功能符合时,仿真成功。
调试过程中最主要的难点就是程序运行正确,硬件却不能实现其功能,语法逻辑错误好检查,但功能错误却难检查,这需要认真检查程序的每一步,全局纵观程序。
在功能上找出错误。
当然在本程序中我采用了结构化的程序结构,以减轻工作复杂度和难度,在单步调试的过程中,可以每个函数分开调试,单个函数比较短小,调试起来就比整个程序调试简单的多。
把一项复杂的工作分成多个简单工作去做会大大提高工作效率。
七、致谢
时光匆匆如流水,转眼便是大学毕业时节,春梦秋云,聚散真容易。
离校日期已日趋临近,毕业论文的完成也随之进入尾声。
从开始进入课题到论文的顺利完成,一直都离不开老师、同学、朋友给我的热情的帮助,在这里请接受我的诚挚的谢意!
通过这次毕业设计,我才明白学习是一个长期积累的过程,只有不断的的努力学习,才能在在以后的工作、生活中游刃有余,从中提高自己知识和综合素质。
在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮助,不懂的大家在一起相互讨论,从而使我们更好的理解知识,所以在这里非常感谢帮助我的同学。
总之,在这次设计中遇到的困难的确比较多,真是万事开头难,不知道如何入手。
最后终于完成了时,有种如释重负的感觉。
此外,通过这次毕业设计还得出一个结论就是:
知识必须通过应用才能实现其价值!
有些东西以为学会了,但真正到用的时候才发现什么都不是看起来那么简单,所以我认为只有到真正会用的时候才是真的学会了。
在此我要感谢我的指导老师李老师对我悉心的指导,感谢老师给我的帮助。
在设计过程中,我通过查阅大量有关资料,与同学交流经验和自学,并向老师请教等方式,使自己学到了不少知识,也经历了很多的困难,但收获同样很大。
在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心。
虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。
八、参考文献
1 李全利、迟荣强.单片机原理及接口技术.高等教育出版社,2003
2张敏霞、孙丽凤.c语言程序设计教程.北京电子工业出版社,2007
3李亚平EDA应用技术中国劳动社会保障出版社2007年8月
4李全利、迟荣强.单片机原理及接口技术.高等教育出版社,2003