基于单片机的简易计算器的设计.docx
《基于单片机的简易计算器的设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的简易计算器的设计.docx(41页珍藏版)》请在冰豆网上搜索。
![基于单片机的简易计算器的设计.docx](https://file1.bdocx.com/fileroot1/2023-1/26/24a1d4fc-7949-4c13-a0c6-c97802cf1971/24a1d4fc-7949-4c13-a0c6-c97802cf19711.gif)
基于单片机的简易计算器的设计
基于单片机的简易计算器的设计
摘要单片机是采用超大规模集成电路技术,把一台计算机的主要部件集成在一个芯片上所构成的一种集成电路芯片,因此单片机被称为单片微型计算机。
由于单片机体积小、价格低、可靠性高、适用面宽以及有其本身的指令系统等诸多优势,在各个领域、各个行业都得到了广泛应用。
很多大专、本科院校都开设了关于单片机原理与应用方面的课程。
本设计就是依据单片机的原理来进行简易计算器的设计的,设计采用了STC89C52RC单片机作为计算器的主控制器,TC1602液晶作为显示器,4×4矩阵键盘作为输入按键,通过软硬件相结合,来实现整数的“加”、“减”、“乘”、“除”运算。
并在计算器顺利完成的基础上,对系统进行了简单的扩展,增加了电子表功能,使系统完善化和多功能化。
关键词:
单片机,计算器,运算,扩展
ABSTRACT
SCMisaintegratedcircuitchipsthatintegratedthemaincmponentsofacomputerinachipbyusingthelargescaleintegratedcircuittechnology.SotheSCMiscalledthesinglechipcomputer.Invariousfields,SCMhasbeenwidelyusedforitssmallsize,lowprice,highreliability,andwideapplicationetc.ManycollegeanduniversitiesopenedthecoursesabouttheprincipleandapplicationofSCM.
ThedesignisasimplecalculatothatbasedontheprincipleofSCM.ThechipofSTC89C52RCisthemaincontrollerofthecalculatorandthedisplayisTC1602LCDinmydesign,thekeyboardof4×4matrixisusedasinputkeys,Withthecombinationofhardwareandsoftware,itcanachievetheintegertoplus,reduction,multiplication,division.onthebasisofthesuccessfulcompletion,thedesigncanexpandthesystemandmakeitperfectandmulti-functional.
KeyWords:
MCSCalculatorOperationExpand
1.绪论
1.1课题简介
近年来,随着社会的不断发展与进步,人民生活水平、物质水平的不断提高,各种各样的电子产品走进了家家户户,为我们的生活、学习、工作、娱乐提供了各种各样的便利。
其中,计算器作为一种操作简便、运算快速、正确率高、便于携带的计算工具而被广泛使用,成为了我们最亲密的伙伴之一。
单片机也被称为“单片微型计算机”、“微控制器”、“嵌入式微控制器”等。
目前,单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域,许多本科、大专院校、职业培训学校,都开设了单片机原理与应用这方面的课程。
这是一门技术性和实践性很强的学科,学习它研究它不论对我们自身还是社会都具有重大的意义。
本设计就是依据单片机的原理来进行的设计,它采用了51单片机作为计算器的主控制器,加上必要的外围扩展,通过软硬件的相结合,来实现整数的“加”、“减”、“乘”、“除”运算。
1.2设计目的
本文设计的计算器看似简单,没有创新性,但是它不仅需要运用我所学过的关于单片机的知识,并且需要查阅大量的资料,这可以进一步提升我对单片机的认识。
而且亲自动手设计与制作可以对硬件的结构和功能有全新的认识,以达到理论与实践更好的结合,进一步提高综合运用所学知识进行设计的能力,这是对本人大学四年的学习的检验,具有重要的意义。
1.3设计任务
本设计主要通过单片机的原理和应用,以电子技术基础的基本理论为指导,利用Protues仿真软件和Keil编程软件来设计简易计算器,并制作实物。
其主要设计要求有:
1、对计算器硬件系统的设计;
2、运用keil进行计算器软件系统的设计;
3、在protues仿真平台上,对软件进行调试及仿真;
4、计算器实物的焊接;
5、软硬件结合之后,进行整体电路的调试与测试。
2.课题背景
2.1单片机的发展现状
单片机是采用超大规模集成电路技术,把一台计算机的主要部件集成在一个芯片上所构成的一种集成电路芯片,因此单片机被称为单片微型计算机(SCM)。
其主要组成部分有中央处理器(CPU)、存储器(RAM和ROM)、基本I/O端口以及定时器/计数器等部件,并具有独立的指令系统。
由于单片机体积小、价格低、可靠性高、适用面宽以及有其本身的指令系统等诸多优势,在各个领域、各个行业都得到了广泛应用。
单片机的发展大致可归纳为四个阶段。
1、第一阶段(1976—1980):
低性能单片机探索阶段。
该阶段是以较简单的8位低档单片机为主,将原有的单板机功能集成在一块芯片上,该芯片具有原来单板机的功能。
其主要代表芯片为Intel公司的MCS-48系列,该系列芯片内集成了8位CPU、并行口I/O接口、8位定时器/计数器,寻址范围为4KB,没有串行通信接口。
2、第二阶段(1980—1983):
高性能单片机发展阶段。
这一阶段仍以8位机为主,主要增加了串行口、多级中断处理系统、16位定时器/计数器,除片内RAM、ROM容量加大外,片外寻址范围达64KB。
这一阶段的单片机以Intel公司的MCS-51系列、Motorla公司的6801系列和Zilong公司的Z8系列为代表。
3、第三阶段(1983—1990):
高性能的16位单片机发展阶段。
这一阶段的单片机性能更加完善,主频速率提高,运算速度加快,具有很强的实时处理能力,更加适用于速度快、精度高、响应及时的应用场合。
其主要代表为Intel公司的MCS-96系列。
4、第四阶段(1990至今):
微控制器的全面发展阶段。
各公司的产品在尽量兼容的同时,出现了高速、强运算能力,寻址范围更大的8位、16位、32位通用型单片机,以及小型廉价的专用型单片机。
随着微电子技术的不断发展,单片机正朝着高集成度、低能耗、低电压、多功能的方向发展。
[1]
2.2STC89系列单片机的简介
MCS-51单片机是由美国的Intel公司开发研制的。
该系列单片机以其优越的性能、成熟的技术及高可靠性和高性价比,迅速占领了工业测控和自动化工程应用的主要市场,成为国内单片机应用领域中的主流。
正因为其优越的性能和完善的结构,导致后来许多单片机生产商多沿用或参考了其体系结构。
像Atmel、Philips、Dallas等著名的半导体公司都推出了兼容MCS-51的单片机产品。
这些著名厂商的加盟使51系列单片机获得了飞速发展,进一步丰富和发展了51系列单片机,产品性能得到了很大提升。
[2]
在这里我们要介绍的是由美国研发,台湾公司生产的STC89系列单片机。
STC89系列单片机是MCS-51系列单片机的派生产品,它们在指令系统、硬件结构和片内资源上与标准8051单片机完全兼容。
其主要特性有:
1、80C51核心处理单元。
2、64/32/16/8KB片内FlashROM,具有在应用可编程(IAP)、在系统可编程(ISP)的功能,可实现远程软件升级,无需编程器。
3、1K字节RAM;
4、双DPTR数据指针;
5、支持12时钟或6时钟模式;
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为STC系列单片机的引脚排列图:
图2.1STC系列单片机引脚排列图
其引脚功能如下:
1、主电源引脚Vcc和Vss
Vcc(40脚):
接+5V电源正端;
Vss(20脚):
接电源地。
2、外接时钟引脚XTAL1和XTAL2
XTAL1(19脚):
外接石英晶体振荡器的一端。
XTAL2(18脚):
外接石英晶体振荡器的另一端。
3、控制信号或与其他电源复用引脚
(1)RST(9脚):
RST即RESET,当单片机振荡器工作时,该引脚上出现持续两个机器周期的高电平,即可实现系统复位。
(2)ALE/
(30脚):
地址锁存允许信号,当访问外部存储器时,在每个机器周期内ALE信号会出现两个正脉冲,用于锁存出现在P0口的低8位地址信息。
在不访问外部存储器时,ALE端仍以上述频率(振荡器频率的1/6)周期性地输出正脉冲信号,此信号可作为外部其他部件的时钟脉冲或用于定时目的。
(3)
(29脚):
片外程序存储器读选通信号输出端,低电平有效。
当从外部程序存储器读取指令或读取常数期间,每个机器周期
两次有效。
访问外部数据存储器期间,
信号将不出现。
(4)
(31脚):
为访问外部程序存储器控制信号,低电平有效。
当
端为高电平时,单片机访问片内程序存储器4KB(52系列为8KB),若超出此范围,自动转去执行外部程序存储器的程序。
当
端为低电平时,无论片内有无程序存储器,均只访问外部程序存储器。
4、输入/输出(I/O)引脚P0口、P1口、P2口及P3口
(1)P0口(39脚~32脚):
P0.0~P0.7。
当不接外部存储器,也不扩展I/O接口时,它可作为准双向8位输入/输出接口。
当接有外部存储器或扩展I/O接口时,P0口为地址/数据分时复用端口。
它分时提供低8位地址信息和8位双向数据信息。
(2)P1口(1脚~8脚):
P1.0~P1.7,P1口是一个带内部上拉电阻的8位准双向I/O端口。
在FLASH编程和校验时,P1口作为第八位地址接收。
(3)P2口(21脚~28脚):
P2.0~P2.7.,可作为普通准双向I/O接口。
当构成系统总线时,P2口作为高8位地址总线,传送高8位地址信息。
(4)P3口(10脚~17脚):
P3.0~P3.7,为双功能端口,可以作为一般的准双向I/O接口使用,而每一位都具有第2功能(见表2.1),并且P3口的每一条引脚均可独立定义第1功能的输入/输出或第2功能。
表2.1P3口第2功能
引脚
符号
第2功能
P3.0
RXD
串行口输入端
P3.1
TXD
串行口输出端
P3.2
外部中断0请求输入端,低电平有效
P3.3
外部中断1请求输入,低电平有效
P3.4
T0
定时器/计数器0计数器脉冲输入端
P3.5
T1
定时器/计数器1计数器脉冲输入端
P3.6
外部数据存储器写选通信号输出端,低电平有效
P3.7
外部数据存储器读选通信号输出端,低电平有效
2.3计算器的总体功能描述
计算器需要实现的功能如下:
1、本设计为基于单片机的简易计算器的设计,所以最基本的功能是可以进行整数的“加”、“减”、“乘”、“除”四则运算;
2、既然只需要进行基本的四则运算,那么键盘只需16个键即可,包括数字键0~9,符号键“+”、“-”、“*”、“/”、“=”和一个清零键;
3、运算时所键入的数字,符号(+、-、*、/)均需要在显示器上显示,当键下“=”号键时,显示计算所得的结果;
4、可以进行多次连续运算,即上次计算所得的结果可以作为下次运算的第一个值;
5、可以进行错误提示,如当除数为零,或者结算结果大于计算器所能运算的范围时(溢出),在显示器上提示错误并内部归零;
6、附加功能:
在计算器顺利完成的基础上对系统进行简单的扩展,如加时钟芯片,让系统既可以作为计算器,同时也可作为电子表,电子表应具备调时功能。
3.计算器的硬件系统设计
硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。
一个单片机应用系统的硬件电路设计包含两部分内容:
一是系统扩展,即当单片机内部的功能单元,如ROM、RAM、I/O、定时器/计数器、中断系统等不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计相应的电路;二是系统的配置,即按照系统功能要求配置外围设备,如键盘、显示器、打印机、A/D、D/A转换器等,并为这些外围设备设计合适的接口电路。
3.1计算器的硬件系统框架
计算器的硬件系统框架如图3.1所示:
单片机
显示电路
按键及键扫电路
实时时钟电路
复位、晶振电路
电源系统
图3.1计算器的硬件系统框架图
3.2最小系统的设计
单片机最小系统是指用最少的元件组成的单片机可以工作的系统。
对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路。
1、单片机的选择
在第2部分中我们已经介绍了STC89系列的单片机,本设计中我们采用STC89C52RC单片机,其性能稳定,价格便宜。
它相对于另一种比较常用的AT89系列的单片机来说,在功能上、引脚排列上并没有较大的差异,我会选择STC系列的单片机,主要是觉得其程序写入时可以通过串口采用STC-ISP软件在线下载,比AT系列大多采用编程器下载更方便。
STC89C52RC主要性能有:
(1)8K Byte程序存储器;
(2)工作频率从静态到33MHz,更加灵活;
(3)32根IO端口;
(4)内置两个16位定时计数器,利用单片机周期工作,方便控制且可靠性高;
(5)包含了全双工串行接口,方便与电脑或其它终端通信;
(6)内置看门狗,防止程序跑丢,在外界环境突变时可自行复位继续工作;
(7)编程简单,可以在线下载,很方便。
其引脚如图3.2所示,引脚功能我们在2.2STC89系列单片机的简介中已详细介绍过,在此就不多做介绍了。
图3.2STC89C52RC引脚图
2、晶振电路的设计
晶振电路的设计如图3.3所示。
对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。
但由于图中的电容C1、C2有对系统时钟频率有微调和稳定的作用,因此,在本计算器系统的实际应用中要注意正确选择参数(本设计采用30pF),振荡频率范围是1.2MHz~12MHz,这里采用11.0592MHz是因为可以准确地得到9600波特率和19200波特率,便于和计算机进行串口通讯。
[3]
图3.3晶振电路
3、复位电路的设计
复位是单片机的初始化操作。
其主要功能是把程序计数器PC值初始化为0000H,使单片机从0000H单元开始执行程序。
除了进入系统的正常初始化之外,程序运行出错或操作错误使系统处于死锁状态时,为摆脱困境,也需要按复位键重新启动单片机。
复位操作有上电自动复位和按键手动复位两种方式,其中,按键手动复位分为电平方式和脉冲方式两种。
在本设计中,按键手动复位明显比上电复位更人性化、更方便,所以这里采用按键手动复位中的按键电平复位,电路设计如图3.4所示。
[4]
图3.4按键电平复位电路
3.3键盘接口电路的设计
键盘是一种按键的集合,它是单片机应用系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。
键盘中每个按键都是一个常开开关电路。
本设计是基于单片机的简易计算器的设计,不需要进行复杂的运算,因此,采用4×4矩阵式键盘16个键来实现基本的“加”、“减”、“乘”、“除”运算即可。
矩阵式键盘的硬件结构比较简单,有行输出口和列输出口构成行列式键盘,按键设置在行、列的交点上。
[5]
4×4矩阵式键盘具体按键安排如下:
第0列第1列第2列第3列
第0行:
0123
第1行:
4567
第2行:
89+-
第3行:
*/=复位
电路设计如图3.5所示,图中1.、2、3、4分别接单片机的P1.0~P1.4口,5、6、7、8分别接P1.4~P1.8口。
图3.5键盘接口电路
3.4显示电路的设计
单片机应用系统中常用的显示器件有LED数码管显示器、LED阵列显示器和液晶显示器等。
液晶显示器较之LED数码管显示器来说虽价格较贵,但其显示功能较强大,体积小、功耗低、界面美观大方。
本设计进行的是计算器设计,如果用液晶作为显示器,两行就足够了,一行显示算式,一行显示结果,所以本设计采用TC1602字符型液晶模块进行显示。
TC1602的工作原理:
TC1602显示模块采用点阵图形来显示字符,显示分为2行、每行16个字符或1行16个字符两种模式,常用模式为2行16个字符。
它有16个引脚,其引脚和电路连接如图3.6所示,引脚功能如下:
第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接负便会点亮背光灯。
图3.6TC1602电路图
图中7~14脚接单片机的P0口。
TC1602液晶显示模块内置有字符发生ROM,字符发生RAM和字符显示RAM,字符发生存储器已经存储了192个不同的点阵字符图形,每一个字符都有固定的代码,我们可以通过查表找出所需要显示的字符的地址让其在液晶中显示出来。
[1]
3.5DS1302实时时钟电路的设计
在本设计中,DS1302时钟电路属于一个系统扩展模块,是一个附加功能,它跟计算器是分离开来的,在时间和硬件条件的允许下,我决定添加这个模块,让我的计算器除了能进行计算外,还能当电子表使用,使系统功能更加完善。
计算器和电子表两种模式通过一个独立按键来进行切换,在同一块液晶屏上显示。
实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路,主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能,采用普通32.768kHz晶振,工作电压为2.5V~5.5V。
它可以对年、月、日、周、日、时、分、秒进行计时,且具有闰年补偿等多种功能。
在本设计中,我们设计的只是电子表,所以用上的只有时、分、秒,这似乎有点大材小用了,我争取在以后对系统进一步扩展,比如做个万年历,使时钟芯片得到充分的利用。
其引脚和电路连接如图3.7所示,引脚功能如下:
第1脚Vcc2:
主电源。
第2脚X1、第3脚X2:
振荡源,外接32.768HZ的晶振。
第4脚GND:
地线。
第5脚
:
复位/片选线。
第6脚I/O:
串行数据输入/输出端(双向)。
第7脚SCLK:
串行时钟输入。
第8脚Vcc1:
后背电源。
图3.7DS1302电路图
一般的电子表都具有设置时间的功能,我的也不例外。
在此模块中,我选择使用4个独立式按键,分别是:
“设置”、“确认”、“+”、“-”,用来对时间进行设置。
设置方法是:
按设置键1下,可按“+”、“-”对“小时”进行设置,设置完毕按确认键退出;同理,按设置键2下对“分”进行设置,按设置键3下对“秒”进行设置。
独立式按键是指直接用一根I/O口线构成的单个按键电路,每个独立式按键单独占有一根I/O口线,每根I/O口线上的按键的工作状态不会影响其他I/O口线的工作状态。
独立式按键接口电路配置灵活,软件结构简单。
其电路设计如图3.8所示。
图3.8时间设置按键电路
3.6计算器的硬件电路原理图
图3.9计算器硬件电路原理图
4.计算器的软件系统设计
本设计需单片机硬件电路及软件编程相结合,在单片机的应用系统程序设计时,常用的是汇编语言和C语言。
本设计采用C语言进行程序的编写。
C语言是一种编译型程序设计语言,它兼顾了多种高级语言的特点,并具备了汇编语言的功能。
C语言是为了能够胜任系统程序设计的要求而开发的,因此有很强的表达能力,能够用于描述系统软件各方面的特性。
它具有较高的可移植性,提供了种类丰富的运算符和数据类型,极大地方便了程序设计。
同时它具有丰富的库函数,运算速度快、编译效率高,且可以直接实现对系统硬件的控制。
它具有完善的模块程序结构,因此在软件开发中可以采用模块化程序设计方法。
目前,使用C语言进行程序设计已成为软件开发的主流。
[5]
4.1主模块程序的设计
主模块是系统软件的主框架。
结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。
它的合理与否关系到程序最终功能实现的多少与好坏。
本设计的主功能是计算器,而不是电子表,电子表只是在计算器功能顺利完成的基础上附加的功能,因此在设计的时候要分清主次,系统一开机进入的应该是计算模式,而不是电子表模式,用户可以根据自己的需要通过模式切换键进行两者的切换。
本设计的主模块的程序流程图如图4.1所示。
开始
初始化液晶屏、DS1302及相关变量
计算模式
判断模式切换键是否按下
N
Y
电子表模式
判断模式切换键是否按下
N
返回
Y
图4.1主模块程序流程图
4.2键盘扫描模块程序的设计
矩阵按键扫描程序是一种节省I/O口的方法,按键数目越多节省I/O口就越可观。
键盘扫描模块程序的流程图如图4.2所示。
键盘扫描子程序应具有以下功能:
(1)判断有无键按下,若有则计算键值。
其方法为:
行输出口输出全为0,读列输入口信息,若列输入值为全1,则说明无键按下;若不为全1,则说明有键按下,并计算键值。
(2)消除按键的抖动。
在按键的使用过程中,由于弹性作用的影响按键的机械触电在闭合及断开的瞬间都会有抖动现象,即不能马上实现按键的完全闭合或断开,从而使输入电压信号也出现抖动现象,抖动时间的长短由按键的机械特性决定,一般为5ms~10ms。
但实际应用中,应大于20ms,否则,会导致按一次做多次处理,影响程序的正常执行。
开始
是否有键按下
N
消抖
Y
确实有键按下
N
判断并计算键号,执行相应命令
Y
按键是否释放
N
返回
Y
图4.2键盘扫描模块程序流程图
(3)判断按键是否释放。
计算出闭合键的键值后,再判断按键是否释放。
若按键释放则等待;若键已释放,则再延时消抖。
(4)命令处理。
根据闭合键的键值,程序应完成该键所设定的功能。
[2]
4.3运算模块程序的设计
在此模块中,要实现“加”、“减”、“乘”、“除”四种整数的运算,我们需要定义三个数:
a、b、c,类型为长整型(-2147483648~+2147483647);其中a为第一个数,b为第二个数,c为两数运算的结果。
本设计还要求可以根据需要进行连续多次的运算,即把c的值赋给a,输入运算符,再输入b,按下“=”号,再得到c,再赋给a,以此反复。