毕业设计多功能计算器的设计.docx
- 文档编号:11358078
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:50
- 大小:731.58KB
毕业设计多功能计算器的设计.docx
《毕业设计多功能计算器的设计.docx》由会员分享,可在线阅读,更多相关《毕业设计多功能计算器的设计.docx(50页珍藏版)》请在冰点文库上搜索。
毕业设计多功能计算器的设计
2013届毕业设计(论文)
题目:
多功能计算器的设计
学院:
浦江学院
专业:
电子信息工程
班级:
姓名:
指导教师:
起讫时间:
2012-11-01~2013-06-10
2013年6月
多功能计算器的设计
摘要
本设计就是利用单片机的原理来进行多功能计算器的设计的,设计过程中的主控制器选用了AT89C52单片机,采用TC1602液晶显示器,输入按键为4×4矩阵键盘,通过软硬件相结合,来实现整数的“加”、“减”、“乘”、“除”运算。
在计算器基本功能顺利完成的基础上,对系统进行了简单的扩展,增加了电子表功能,达到预期的要求,系统功能也更加完善。
本计算器系统简单,实用性强,成本低,使用维护方便,软件功能强,运行稳定可靠等优点。
关键词:
计算器,运算,扩展
Designofmulti-functioncalculator
ABSTRACT
Thisdesignprincipleistheuseofsingle-chipdesignformulti-functioncalculator,thedesignprocessofthemaincontrollerselectstheAT89C52microcontroller,usingTC1602LCDmonitors,inputkeysforthe4×4matrixkeyboard,throughacombinationofhardwareandsoftwaretoachieveinteger"plus","minus","multiply","inadditionto"operation.Thesuccessfulcompletionofthebasicfunctionsofthecalculator,basedonasimpleextensionofthesystem,increasingthespreadsheetfunctions,toachievethedesiredrequirements,thesystemfunctionsmoreperfect.Thiscalculatorsystemissimple,practical,lowcost,easymaintenance,softwarefeaturesstrong,stableandreliable.
KeyWords:
Calculator,Operation,Expand
第一章绪论
1.1引言
当今社会,随着科技的不断发展与进步,人民生活水平和物质水平的不断提高,多种多样的电子产品走进了千家万户,给我们的生活、学习、工作、娱乐提供了很多的便利。
在这当中,计算器作为一种简单,快捷的操作,正确率高,被广泛用于便携式计算工具,已经成为人类生活中不可或缺的助手。
单片机是计算机、自动控制和大规模集成电路技术相结合的产物,融计算机结构和控制功能于一体,因此除单片机外它还有其他名称,例如“嵌入式微处理器”、“微控制器”、“嵌入式微控制器”等。
如今,单片机凭借其微小的体积和低廉的成本在各个领域被广泛使用,例如用于家用电器、工业控制等,所以许多大学里都开设了单片机原理与应用这方面的课程。
这是一门结合了技术性和实践性的学科,学习及研究它不论对我们自身还是社会的发展都是及其有意义的。
计算器就是利用单片机制作的产物,所以本设计的主控制器选用了AT89C52单片机,采用TC1602液晶显示器,输入按键为4×4矩阵键盘,通过软硬件相结合,来实现整数的“加”、“减”、“乘”、“除”运算。
在此基础上还加入了DS1302实时时钟电路的设计,使其本省还具有了电子表的功能。
1.2设计任务
这次设计主要是通过单片机的原理和应用,在电子技术基础的基本理论的指导下,我采用Protues仿真软件和Keil编程软件来进行设计计算器,然后制作实物。
它的主要设计任务有以下几个部分,首先是硬件系统的设计,然后运用keil进行软件系统部分的设计。
利用protues仿真平台,进行软件部分调试及仿真;对照设计好的仿真图进行计算器实物的焊接。
在将软件程序放入硬件之后,对整体电路进行调试与测试,看是否存在问题。
1.3.论文结构
本文共由六章组成,第二章为基础理论部分,介绍单片机的发展现状、AT89Cxx系列单片机的简介,计算器系统简介计算器的总体功能描述,;第三章为计算器的硬件系统设计,从结构上分析计算器的硬件系统框架,最小系统的设计,键盘接口电路的设计,显示电路的设计及DS1302实时时钟电路的设计;第四章介绍计算器的软件系统设计,主要介绍主模块程序的设计,键盘扫描模块程序的设计,运算模块程序的设计,显示模块程序的设计以及DS1302实时时钟模块程序的设计;第五章为计算器系统的组装与调试,对系统的软硬件分别进行了调试;第六章为论文总结,对本次毕业设计做了相关小结并提出了下一步要做的工作。
第二章课题背景
2.1AT89Cxx系列单片机的简介
MCS-51系列单片机具有性能优越,技术成熟,可靠性高,成本效益的优点,所以其迅速占领了工业测量和控制及自动化工程的主要市场,成为主流的芯片应用。
由于其卓越的性能和完美的结构,导致后来许多微控制器制造商多遵循参考它的架构。
和爱特梅尔公司一样,飞利浦,达拉斯和其他领先的半导体公司已经推出与MCS-51单片机产品兼容。
这些知名厂商加入51系列获得了突飞猛进的发展,进一步丰富和发展的51系列,产品性能有了很大的提高。
其主要特性有:
1、80C51核心处理单元。
2、64/32/16/8KB片内FlashROM,具有在应用可编程(IAP)、在系统可编程(ISP)的功能,可实现远程软件升级,无需编程器。
3、1K字节RAM;
4、双DPTR数据指针;
5、支持6时钟或12时钟模式;
6、4个8位I/O口,P1口、P2口、P3口可直接驱动LED;
7、SPI和增强型UAPT;
8、有PCA(可编程计数器阵列),具有PWM的捕获/比较功能;
9、3个16位定时器/计数器;
10、可编程看门狗定时器;
11、低EMI方式(ALE禁止);
12、兼容TTL和COMS逻辑电平;
13、掉电模式和低功耗模式等;
14、全静态操作0Hz~24Hz;
图2-1为AT89Cxx系列单片机的引脚排列图:
图2-1AT89Cxx系列单片机引脚排列图
2.2计算器系统简介
计算器的组成包括运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备。
低级计算器运算器,控制器由数字逻辑电路简单的串行操作,随机存取存储器是只有一个或两个细胞,用于累加存储。
高级计算器和只读存储器由微处理器来实现各种复杂的计算程序,有更多的随机存取记忆体单元来存储程序和数据输入。
键盘是计算机输入成员,一般的接触或传感器类型。
为了减少计算器的大小,一键常常有多种功能。
计算机显示输出部件,发光二极管显示器,液晶显示器等。
除了显示的结果,但也经常会有溢出指示,错误指示。
计算器的电源使用AC电源适配器或电池,电池或太阳能供电的AC转换器转换器充电。
为了节约能源,计算器生产大规模集成电路采用CMOS工艺(互补型金属-氧化物-半导体集成电路),内部配备掉电定时器电路不自动操作。
计算器可选外设,微型打印机,盒式磁带驱动器和磁机。
2.3计算器的总体功能描述
这次设计是多功能计算器的设计,所以它实现的不仅仅是简单的运算,还添加了电子表的功能,其主要实现功能如下所述:
1、本设计为基于单片机的多功能计算器的设计,它的基本功能是进行四则运算“加”、“减”、“乘”、“除”;
2、进行基本的四则运算,键盘由16个键组成,其中包含数字键0~9,符号键“+”、“-”、“*”、“/”、“=”和清零键;
3、设计运算的过程中的数字和符号在显示器上都需要显示,按下“=”号键时,计算结果自动显示出来;
4、可以连续多次的运算,也就是说前面计算所得的结果还可以作为后面运算的第一个值;
5、错误提示,例如除数为0,或者运算结果超过了计算器本身设定的范围时(溢出),可以在显示器上提示错误并内部归零;
6、附加功能:
在以上几点完成的情况下对系统进行下一步的扩展,增加了时钟芯片,这样系统既可以作为计算器,也可作为电子表,电子表具有调时。
第三章计算器的硬件系统设计
3.1计算器的硬件系统框架
计算器的硬件系统框架如图3-1所示:
单片机
按键及键扫电路
显示电路
复位、晶振电路
实时时钟电路
电源系统
图3-1计算器的硬件系统框架图
3.2最小系统的设计
单片机最小系统一般由单片机,复位电路和晶振电路组成,我们在设计中总是喜欢把按键输入、显示输出等加到上述电路中。
1、单片机的选择
在前面我们已经介绍了AT89C系列的单片机,本设计中我们采用AT89C52单片机,它的性能好,价格低。
其引脚图如图3-2所示。
图3-2AT89C52引脚图
2、晶振电路的设计
本次设计的系统对于时间要求不是很高,只要按图来进行设计就可以使系统可靠起振并运行的稳定。
但是由于图中的电容C2、C3的作用是对系统时钟频率的微调和稳定,所以在这次计算器系统的实际应用中一定要注意正确选择参数(本设计采用30pF),振荡频率范围是1.2MHz~12MHz,这里采用11.0592MHz是因为可以准确地得到9600波特率和19200波特率,便于和计算机进行串口通讯。
晶振电路的设计如下图3-3所示。
图3-3晶振电路
3、复位电路的设计
本次设计对复位电路部分的考虑还是蛮周到的,因为复位电路对这次设计来说是很重要的。
当程序运行出错或操作错误导致系统死锁状态时,为了让系统化险为夷,需要按复位键重新启动单片机。
复位操作包过加电复位和手动复位,其中,按键手动复位分为电平方式和脉冲方式两种。
这次设计中,手动复位明显比加电复位更适合,所以在这里采用按键手动复位中的按键电平复位,电路设计如图3-4所示。
图3-4按键电平复位电路
3.3键盘接口电路的设计
这次设计是基于单片机的计算器的设计,并没有要求进行复杂的运算,因此,采用4×4矩阵式键盘16个键来实现基本的“加”、“减”、“乘”、“除”运算即可。
矩阵式键盘的硬件结构比较简单,有行输出口和列输出口构成行列式键盘,按键设置在行、列的交点上。
4×4矩阵式键盘具体按键安排如表3-1:
表3-14×4矩阵式键盘
第0列
第1列
第2列
第3列
第0行
0
1
2
3
第1行
4
5
6
7
第2行
8
9
+
-
第3行
*
/
=
复位
电路设计如图3-5所示,图中1.、2、3、4分别接单片机的P10~P13口,5、6、7、8分别接P14~P17口。
图3-5键盘接口电路
3.4显示电路的设计
单片机应用系统中常用的LED显示器件有LED数码管显示器和LED液晶显示器两种。
液晶显示器和LED数码管显示器对比来说虽然价格贵点,但是它的显示功能强大,体积小、功耗低、界面清晰,便于观察。
这次设计进行的是计算器设计,如果用液晶作为显示器,两行就足够了,一行显示算式,一行显示结果,所以这次设计选择TC1602字符型液晶模块进行显示。
TC1602的工作原理:
TC1602显示模块采用点阵图形来显示字符,显示分为2行、每行16个字符或1行16个字符两种模式,常用模式为2行16个字符。
它包含16个引脚,引脚功能如下表3-2:
表3-2TC1602显示模块
第1脚GND
电源地
第2脚Vcc
接+5V电源
第3脚VL
液晶显示器调整对比度端
第4脚RS
寄存器选择信号线。
高电平时进行读操作,低电平时选择指令寄存器
第5脚RW
读写信号线
第6脚E
使能端,当E端由高电平跳变成低电平时,可以写入数据
第7~14脚
8位双向数据线D0~D7
第15脚BLA
背光电源正极输入端
第16脚BLK
背光电源负极输入端。
BLA接正,BLK接负便会点亮背光灯
TC1602引脚电路图如图3-6所示:
图3-6TC1602电路图
图中7~14脚接单片机的P0口。
TC1602液晶显示模块内置有字符发生ROM,字符发生RAM和字符显示RAM,字符发生存储器已经存储了192个不同的点阵字符图形,每一个字符都有固定的代码,可以通过查表找出所需要显示的字符的地址让其在液晶中显示出来。
3.5DS1302实时时钟电路的设计
在这次设计中,DS1302时钟电路是系统扩展的一个模块,属于附加功能,它跟计算器是不属于一个部分的,在上学期创新设计的基础上,我多添加了这个模块,这样我的计算器除了计算功能外,还多了一项电子表的功能,使系统功能完善了许多。
我设计的计算器和电子表两种模式可以用一个独立按键来进行切换,而且是在同一块液晶屏上显示。
实时时钟电路DS1302的主要特点是采用串行数据传输,可以为电源提供可编程的充电功能,并且还可以关闭充电功能,采用普通32.768kHz晶振,工作电压为2.5V~5.5V。
它可以对年、月、日、周、日、时、分、秒进行计时,还具有闰年补偿等多种功能。
但是这次设计,我设计的只是电子表,所以只需要时、分、秒,很多功能不可以体现出来,我准备在以后对系统进一步扩展,比如可以做个万年历,这样时钟芯片就可以得到充分的利用。
其引脚功能如表3-3所示:
表3-3DS1602引脚功能
第1脚Vcc2
第1脚Vcc2
第2脚X1和第3脚X2
振荡源,外接32.768HZ的晶振
第4脚GND
地线
第5脚
复位/片选线
第6脚I/O
串行数据输入/输出端(双向)
第7脚SCLK
串行时钟输入
第8脚Vcc1
后背电源
DS1302引脚电路图如图3-7所示:
图3-7DS1302电路图
在对该模块进行设计时,我选用了4个独立式按键,它们的功能分别是:
“设置”、“确认”、“+”、“-”,用来准确的设置时间。
设置方法如下:
首先按设置键1下,可按“+”、“-”对“小时”进行设置,设置完毕按确认键退出;和前面一样,按设置键2下对“分”进行设置,按设置键3下对“秒”进行设置。
第四章计算器的软件系统设计
这次设计需单片机硬件电路及软件编程相结合,在单片机的应用系统程序设计时,一般选用汇编语言和C语言。
通过4.1的概述,这次设计我选择用C语言进行编程。
4.1汇编语言和C语言的特点及选择
这次设计我用的是硬件电路和软件编程相结合的设计方案,所以选择合适的编程语言是很重要。
在进行单片机的应用系统程序设计时,常见的有汇编语言和C语言两种。
C语言虽然执行效率没有汇编语言高,但是它语言简单,便于操作,运算丰富,表达化类型多种多样,数据结构类型也很丰富,可以大大提高大大提高单片机应用系统研制开发的效率,而且它的易移植性也有助于打破不同单片机系列之间的界限。
如今单片机的发展水平已经达到了一定高度,内部资源相当丰富,CPU的处理速度非常快。
我觉得这次设计用C语言来控制单片机是一个不错的选择。
所以在这次设计中我选择C语言来编写程序代码。
主函数设计:
/******************函数声明*****************/
#include
#include
#defineucharunsignedchar
ucharkey;
ucharrrr=0xff;
ucharalldata[12]={0};
ucharlove[14];
ucharexit=0,yes=0,kind=0,fu=0,pfu=0,position1=0,position2=0;
unsignedlongdata1=0,data2=0,data3=0,ddata=0;
ucharkeyscan(void);
voiddisplay(uchar);
voidprodis(void);
voidclear(void);
voiddatapc(void);
voidremove0(void);
voiddata3dis(void);
voidmain()
{
init();
while
(1)
{
key=keyscan();
delay();
if(exit==1)
{display(key);}
}
}
4.2主模块程序的设计
主模块是可以说是本次设计的主框架。
在进行结构化程序设计时经常会用到“从上到下”和“从下到上”两种方式,而“从上到下”法的核心便于主框架的构建。
它的好坏直接影响到程序最终功能的实现。
本设计的主要目的是实现计算功能,而不是电子表,仅在计算器功能的基础上,成功完成附加功能的电子表格,所以时间的优先级的设计,该系统应被引导到一种计算模式,而不是电子表格模式,设计完成后我可以根据需要在两者之间切换,主模块的程序流程图如图4-1所示。
开始
初始化液晶屏、DS1302及相关变量
计算模式
判断模式切换键是否按下
N
Y
电子表模式
判断模式切换键是否按下
N
返回
Y
图4-1主模块程序流程图
4.3键盘扫描模块程序的设计
矩阵按键扫描程序是用来节省I/O口的,它可以根据按键数目的多少来节省对应的I/O口。
键盘扫描模块程序的流程图如图4.2所示。
键盘扫描子程序应具有以下功能:
(1)如果键有按下,就计算键值。
它的方法为:
行输出口输出全为0,读列输入口信息,如果列输入值全为1,没有键按下;如果不是为全1,有键按下,对应的计算键值。
(2)去除按键抖动。
在按键操作过程中,按键受到弹性的影响会导致按键的机械触电在闭合及断开的瞬间发生抖动的现象,导致按键不能马上实现完全闭合或断开,并使输入电压信号也会出现抖动现象,抖动时间的长短根据按键的机械特性决定。
在实际应用中,应大于20ms,否则,就会发生按一次做多次处理的情况,从而程序不能正常执行。
开始
是否有键按下
N
消抖
Y
确实有键按下
N
判断并计算键号,执行相应命令
Y
按键是否释放
N
返回
Y
图4-2键盘扫描模块程序流程图
(3)判断按键是否释放。
首先要计算出闭合键的键值,然后对按键判断是否释放。
如果按键释放就等待;如果键已经释放,那么就再延时消抖。
(4)命令处理。
输入闭合键的键值后,程序自动实现该键已经设定的功能。
4.4运算模块程序的设计
在这个模块中,我要实现“加”、“减”、“乘”、“除”四种整数的运算,需要定义三个数:
x、y、z,类型为长整型(-2147485648~+2147485647);其中x为第一个数,y为第二个数,z为两数运算的结果。
这次设计还要求可以根据需要进行连续多次的运算,即把c的值赋给x,输入运算符,再输入y,按下“=”号,再得到z,再赋给x,以此反复执行。
在运算中x的值有可能是负数,而y必定是正数,所以我在进行“加”、“减”、“乘”三种运算时都可能会有溢出,都需要进行报错;在除法运算时,若除数为0,也需要报错。
设d=+2147485647,e=-2147485648,判断溢出的方法是:
(1)加法:
当0
(2)减法:
当e
(3)乘法:
当0
当e
这次需要当心的地方就是在设计过程中除法运算时为了保留四位小数需对z转化为float型并进行×10000的操作,可以想象当z>+214748.5647时,z扩大一万倍就不再属于长整型的范围了,这就产生了溢出错误。
为了阻止这种情况的发生,这次设计规定了当z>+214748.3645或z<-214748.5648时,结果显示不保留小数;当z<+214748.5647或z>-214748.5648时,结果显示保留四位小数。
运算模块程序流程图如图4-3所示。
开始
判断是哪个运算符
乘
减
除
加
除数是否为0
N
错误信息送显示缓冲区
运算结果是否溢出
Y
Y
数值送显示缓冲区
N
图4-3运算模块程序流程图
4.5显示模块程序的设计
在这次设计中,显示器上只需要显示数字和符号,不需要显示图形或者汉字,而且需要显示的数字和符号都有在TC1602液晶模块内置的字符发生存储器里,在编程时,通过查表就可得到相应字符的代码。
显示程序的流程图如图4-4所示。
开显示
液晶初始化
判断是否显示字符
N
相应功能的设置
Y
Y
送地址
送数据
判断是否显示完
N
返回
Y
图4-4显示程序流程图
在这个模块中,我们需要了解液晶的基本操作时序——写指令和写数据。
写指令:
输入:
RS=L,RW=L,D0~D7=指令码,E=高脉冲;输出:
无。
写数据:
输入:
RS=H,RW=L,D0~D7=数据,E=高脉冲;输出:
无。
4.6DS1302实时时钟模块程序的设计
从前面已经了解到了时钟芯片的功能很强大,设计这部分程序前,我必须对DS1302有关日历、时间的寄存器进行深入的了解。
在本设计中,我只用到了时间,所以我在这里就只对时间寄存器进行解释,时(85H、84H)、分(83H、82H)、秒(81H、82H)寄存器及控制寄存器(8FH、8EH)介绍如表4-1所示。
表4-1时、分、秒、控制寄存器介绍
读寄存器
写寄存器
bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
范围
81H
80H
CH
10秒
秒
00~59
83H
82H
10分
分
00~59
85H
84H
0
0
20时
10时
时
0~23
8FH
8EH
WP
0
0
0
0
0
0
0
———
从表中,可以很明了的知道以上寄存器的功能和使用方法,需要说明的是控制寄存器的位7(WP)是写保护位,其他七位都为0,在对任何时钟和RAM进行写操作前,WP必须为0。
当WP为1时,禁止对任一寄存器进行写操作,也就是说在电路上电的初始态WP为1,必须先将它置为0,才可进行写操作。
还有秒寄存器的位7位定义为时钟暂停标志(CH)位置为1时,时钟振荡器停止,DS1302时钟芯片处于低功耗状态;为0时,时钟开始运行。
例如,执行以下语句,就在时钟芯片中写入了时间——11:
20:
05。
write_ds1302(0x8e,0x00);//去保护
write_ds1302(0x84,0x12);//写小时,11时
write_ds1302(0x82,0x30);//写分钟,20分
write_ds1302(0x80,0x01);//写秒钟,05秒
write_ds1302(0x8e,0x80);//写完后,上保护
DS1302时钟程序流程图如图4-5所示。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 多功能 计算器 设计