基于单片机的科学计算器设计Word文件下载.docx
《基于单片机的科学计算器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于单片机的科学计算器设计Word文件下载.docx(41页珍藏版)》请在冰豆网上搜索。
且有较多的随机存储单元用来存放输入程序和数据。
键盘是计算器的输入部件,采用接触式或传感式。
显示器是计算器的输出部件,有发光二极管显示器或液晶显示器等。
除显示计算结果外,还常有溢出指示、错误指示等显示。
计算器电源采用电池或者交流转换器池。
为节省电能,计算器都采用CMOS工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。
计算器可选用的外围设备有盒式磁带机,微型打印机,磁卡机等等。
计算器的基本类型:
1.算术型计算器:
可进行加、减、乘、除等简单的四则运算,又称简单计算器。
2.科学型计算器:
可进行乘方、开方、指数、对数、三角函数、统计等方面的运算,又称函数计算器。
3.程序计算器:
可以编程序,把较复杂的运算步骤贮存起来,进行多次重复的运算。
当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。
计算器作为一种快速通用的计算工具方便了用户的使用。
计算器这一程序机器实际上是从计算机中割裂出来的衍生品,但因其方便快捷的操作模式,已经被广泛应用于商业等日常生活中,极大的方便了人们对于数字的整合运算。
起源和发展最早的计算工具诞生在中国。
筹策是中国古代最早采用的一种计算工具,又被称之为做算筹。
这种算筹的制作材料多是竹子,木头,或兽骨.一束约二百七十枚,使用时可以放在布袋里面随身携带。
直到科技发达的今天,中国群众任然有很多在使用珠算盘,珠算盘是中国古代计算工具领域中的另一项发明,到明代时期。
珠算盘的结构已经几乎与现代的珠算盘相同。
在17世纪初期,计算工具在西方国家的有了非常大的发展,英国数学家-纳皮尔发明了纳皮尔算筹,英国牧师-奥却德发明了圆柱型对数计算尺,这种计算尺能够实现多种计算功能,不仅能够实现基本的四则运算,也可以进行乘方和开方运算。
更为强大的是,这种计算尺还可以计算三角函数,指数函数和对数函数。
这些计算工具积极推动了计算器的发展,为现代计算器的发展奠定了非常良好的基础,慢慢演变,成为现代社会中广泛应用的计算工具。
在1642年,19岁的法国科学家-帕斯卡引用了算盘的原理,发明了世界上第一部机械式计算器,他的计算器装置中有一些齿轮互相联锁,当其中此轮转过十位之后,就会使与其相连接的另一个齿轮转过一位,使用者可以像使用电话号码拨盘那样,直接把数字拨进去,此后计算结果就可以出现在另一个窗口中,但是只可以做加减计算,不能做乘除运算。
在1694年,德国的莱布尼兹将机械式计算器进行了改进,使其可以进行乘除运算。
自此此后,一直等到20世纪50年代末,电子计算器才开始出现。
1.2本课题研究的主要内容
本设计主要研究的是,基于单片机的简易计算器,采用AT89C52单片机作为主控器件,矩阵键盘输入,液晶显示器讲计算过程及结果显示输出,通过C语言编程,实现建议简易计算器的功能。
2设计任务及方案
2.1设计任务
1.对计算器硬件系统进行设计,利用AT89C52作为主控器件,组成一个能进行简单四则运算的计算器,能进行数据归零,按键提示。
2.运用keil进行计算器软件系统的设计。
3.在protues仿真平台上,对软件进行调试及仿真。
2.2设计方案
按照系统设计的功能的要求,确定设计系统由主控模块、显示模块、键盘扫描接口电路、按键提示电路4个模块组成。
系统构成框图如图2.1所示:
图2.1—系统构成框图
3系统硬件设计
3.1单片机最小硬件系统
单片机最小系统就是支持主芯片正常工作的最小电路部分,包括主控芯片、复位电路和时钟电路。
3.1.1主控芯片AT89C52单片机简介
AT89C52引脚图如图3.1所示:
图3.1—AT89C52引脚图
AT89C52是ATMEL公司生产的51系列单片机,是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可以反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM)。
AT89C52的主要功能特性:
兼容MCS51指令系统
8k可反复擦写FlashROM
32个双向I/O口及256x8bit内部RAM
3个16位可编程定时/计数器中断时钟频率0-24MHz
2个串行中断,可编程UART串行通道
2个外部中断源,共6个中断源
2个读写中断口线,3级加密位
低功耗空闲和掉电模式,软件设置睡眠及唤醒功能
AT89C52的主要管脚有:
XTAL1:
振荡器反相放大器的及内部时钟发生器的输入端。
XTAL2:
振荡器反相放大器的输出端。
外接12MHz晶振。
VCC和VSS:
为供电端口,分别接+5V电源的正负端。
RST/Vpd:
为复位输入端口,外接电阻电容组成的复位电路。
P0口:
8位漏极开路型双向I/O口,地址/数据总线复用口。
作为输出口用时,每位可以用吸收电流的方式来驱动8个TTL逻辑门电路,对端口P0写“1”时,可以作为高阻抗输入端使用。
在访问外部数据存储器或者程序存储器的时候,分时转换地址低8位,和数据总线复用。
在访问期间激活内部的上拉电阻。
P1口:
带有内部上拉电阻的8位双向I/O口,P1的输出缓冲级可以驱动(吸收电流或输出电流)的4个TTL逻辑门电路。
对端口写“1”时,通过内部的上拉电阻可以把端口拉到高电平,可作输入口使用。
当作为作输入口使用时,因为内部存在有上拉电阻,因此某个引脚被外部信号拉低,会输出一个电流(IIL)。
与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。
参见表1:
表1:
引脚
功能特性
P1.0
T2时钟输出
P2.0
T2EX(定时器/计数器2)
P2口:
为带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可以驱动(吸收电流或输出电流)4个TTL逻辑门电路。
当对端口P2写“1”时,通过内部的上拉电阻可以把端口拉到高电平去,此时可作输入口使用,当作输入口使用时,因为其内部存在有上拉电阻,当某个引脚被外部信号拉低的时候会输出一个电流(IIL)。
P3口:
为带有内部上拉电阻的8位双向I/O口。
P3口输出缓冲级可驱动(吸收电流或输出电流)4个TTL逻辑门电路。
当对P3口写入“1”时,它们会被内部上拉电阻拉高并且可以作为输入端口。
此时,当被外部拉低的P3口将用上拉电阻输出电流(IIL)。
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还可以接收一些用于Flash闪速存储器编程及程序校验的控制信号。
ALE/PROG:
当访问数据存储器或者外部程序存储器的时候,ALE(地址锁存)允许输出脉冲用在锁存地址的低8位字节。
一般情况之下,ALE仍然以时钟振荡频率的六分之一来输出固定的脉冲信号。
因此它可以用来为外部输出时钟或者用来作为定时目的。
值得大家注意的是:
每当来访问外部的数据存储器时,将会跳过一个ALE脉冲。
在对Flash存储器编程的期间,该引脚还可以用于输入编程脉冲(PROG)。
如果有必要,还可通过对特殊功能寄存器(SFR)区域中的8EH单元的D0位置位,可以禁止ALE操作。
在该位置位后,只有一条MOVX和MOVC指令才可以将ALE激活。
此外,该引脚还会被微微拉高一些,当单片机执行外部程序时,应该设置ALE禁止位无效。
PSEN:
程序存储允许外部程序读取内存频闪(PSEN)的方式,当AT89C52取从外部程序存储器读取指令时(或数据),每个机器周期两次有效PSEN。
作为外部数据存储器的访问,并在同一时间传递信号,跳过PSEN两次。
EA/VPP:
允许外部访问,意图使CPU只访问外部程序的存储器(地址范围为0000H-FFFFH),EA端必须保持低电平(接地)。
注意:
如果当加密位LB1被编程时,EA端状态会在复位时被内部锁存。
如果EA管脚接为高电平(连接Vcc端)时,CPU执行内部程序存储器的指令。
当Flash存储器编程时,此引脚和+12V的编程允许电源VPP,当然,这必须是该设备使用12V编程电压Vpp。
特殊功能寄存器:
在AT89C52的芯片内的存储器中,一共有128个单元的的80H-FFH的特殊功能寄存器(SFE)。
不是所有的地址都能被定义,总共有128个字节从80H-FFH只有一部分会被定义,以及有相当一部分还没有被定义。
针对该单位对没有提供的定义的部分读写将是无效的,读出的数值将是不确定的,而写的数据也将会丢失。
不应将数据“1”被写入没有被定义的单位,因为可能会在未来中的产品,在这些单元中的赋予了新的功能,这而在样的情况下,复位后,这些单位在数值始终为“0”
数据存储器:
AT89C52内部RAM有256字节。
80H-FFH,高128字节特殊功能寄存器(SFR)地址重叠,也就是说,高128字节的RAM,与特殊功能寄存器有相同的地址,它们是分开的,在物理上来说。
当一个指令访问的7FH内部地址单元以上的部分,指令寻址模式是不同的,该决定寻址访问高位128字节的RAM或访问特殊功能寄存器。
如果指令是直接寻址访问,那么访问的是特殊功能寄存器。
定时器2:
定时器2是一个16位的定时器/计数器。
它无论是作为一个计时器,还是作为外部事件计数器,都是可行的。
它的工作原理所选择的特殊功能寄存器T2CONC/T2。
定时器2的工作模式有三种:
捕捉,自动重装模式(向上或向下计数)和波特率发生器,工作T2CON控制位选择。
定时器2由两个8位寄存器TH2和TL2定时器工作,在定时器的工作方式中,每个机器周期TL2寄存器的值加1,一个机器周期由12个振荡器时钟构成,因此,计数率是振荡频率的1/12。
在计数器工作的时候,当T2引脚的外部输入信号时,1-0下降沿产生,寄存器的值加1,在这样的工作之下,在每个机器周期5SP2期间,外部输入进行采样。
通过在第一个机器周期所采样到的值为1,下一个机器周期所采样到的值是0,随后的寄存器中,就在下一个周期的S3P1期间加1。
确定1-0过渡占用两个机器周期(24个振荡周期),因此,最大计数率的振荡频率的1/24。
是必需的,以确保正确的采样的输入电平的变化时刻之前保持至少一个完整的周期,以确保输入信号被至少一次采样。
捕获方式:
在捕获模式下,T2CON控制位EXEN2来选择两个不同的工作方式。
当EXEN2=0,定时器2就是是一个16位的定时器或者计数器。
当计数溢出的时候,溢出标志TF2在T2CON中设置,此时中断在同一时间激活。
如果EXEN2=1,定时器2做同样的操作,T2EX引脚的外部输入信号1-0负跳变发生时,TH2和TL2中的值被捕获到RCAP2H和RCAP2L中。
此外,T2EX引脚信号跳变使T2CON的EXF2置位,TF2的类似,EXF2激活中断。
当定时器处于自动重装模式,可以通过编程来向上或向下计数,这个功能可以DCEN位特殊功能寄存器T2CON(允许自动重装(向上或向下计数器)倒计时)选择。
复位的时候,DCEN位置“0”,默认设置定时器计数。
当DCEN设置,定时器2可以向上计数,取决于T2EX引脚的值,,当DCEN=0时,定时器2会自动设置为计数摸索,且向上,在此模式控制位EXEN2T2CON中有两个选项,如果EXEN2=0,定时器2计数到0FFFFH溢出集,TF2激活中断,而16位计数寄存器RCAP2H和RCAP2L的重装RCAP2H和RCAP2L的值由软件预置。
如果EXEN2=1,定时器2的16-位重载溢出或外部输入端子的T2EX触发从1-0的的的下降沿。
这个脉冲信号使EXF2设置的中断被启用时,如果一个中断被允许,同样也会产生中断。
定时器2的中断入口地址是:
002BH-0032H。
当DCEN=1时的。
并允许定时器2向上计数或者向下计数,通过这种方式,用T2EX引脚来控制计数器的计数方向。
该T2EX引脚到一个逻辑“1”时,使得该定时器计数高达0FFFFH时,产生溢出,置位TF2,同时把16-位的的计数的寄存器RCAP2H与RCAP2L重新-加载成TH2和TL2中。
当T2EX引脚到逻辑“0”的时候,就将定时器2的向下计数,当TH2和TL2的值是等于到包含在RCAP2H和RCAP2L中的值的时候,计数溢出,把TF2置位,与此同时,在定时寄存器中,重新装入0FFFFH。
中断:
AT89C52共有6个中断源:
两个外部中断(INT0和INT1),三个定时中断(定时器0,1,2)和串行端口中断。
通过设置特殊寄存器IE设置或清除控制每个中断源的允许或禁止。
IE的总禁止位是EA,它用来控制所有中断的允许或禁止。
程序员不可以把1写入保留位,它们是用来在未来AT89系列产品中被用作为扩展的。
在定时器2中,受T2CON,TF2和EXF2的逻辑的影响来产生中断,这些标志不能被硬件清除,服务程序被确定为TF2或EXF2产生中断。
并且是由软件来清除所产生的中断标志。
TF0和TF1定时器0和定时器1标志S5P2机器周期定时器溢出状态位设置,并在下一个机器周期的中断标志查询之前查询到该标志。
然而,定时器2标志TF2S2P2机器周期定时器溢出状态位被设置,并在同一个机器周期查询标志。
时钟振荡器:
AT89C52有一个高增益的反相放大器,用于构成内部振荡器。
引脚XTAL2和引脚XTAL1是放大器的输出端和输入端。
此放大器的反馈元件芯片石英晶体或陶瓷谐振器一起构成一个自激振荡器的振荡电路,一个外部晶体(或陶瓷谐振器)和电容器C1,C2构成并联连接到放大器的反馈回路中的振荡电路。
外部电容器C1,C2的选择,虽然不是很严格的要求,但电容的大小由电平的振荡频率受到轻微影响,振荡器的工作的稳定性,启动程序的难度和温度稳定性,并且如果我们使用石英晶体,那么电容选取30pF±
10pF的范围比较合适,如果是选择陶瓷谐振器来使用,那么建议选择40PF±
10F的范围比较合适。
用户也可以使用外部时钟。
在这种情况下,外部时钟脉冲接到XTAL1端,也可称之为,内部时钟产生电路的输入端,此时,把XTAL2引脚悬空。
外部时钟信号通过2分频路作为内部时钟信号的触发器,因此对外部时钟信号的占空比无特殊要求应符合技术条件的要求低的最低高电平持续时间和最大持续时间。
空闲节电模式:
在空闲模式操作时,此时CPU处于睡眠状态,所有片上外设仍然活跃在软件这种方式。
在这种情况下,芯片上的RAM和特殊功能寄存器的内容冻结。
空闲模式可以终止任何启用的中断请求或硬件复位。
由硬件复位终止空闲,只需要短短两个机器周期有效复位信号,在这种状态下,片上硬件抑制访问内部RAM,但访问的端口引脚,当复位到终止空闲的端口,以避免可能产生无意的写指令的指令后,进入空闲模式不应该是单端口或外部存储器写指令。
掉电模式:
在掉电模式下,振荡器停止,而进入掉电模式的指令是最后一条指令被执行,片上RAM以及特殊功能寄存器的内容将会在终止掉电模式前被冻结住。
只有采取硬件复位的方式,才能退出掉电模式是。
一个硬件复位之后,所有的特殊功能寄存器将被重新定义,但RAM中的内容不会被改变,在VCC的正常工作电平被恢复之前,应为无效复位,并必须保持目标时间,才能使振荡器重新启动并稳定工作。
3.1.2复位电路
复位电路如图3.2
图3.2—复位电路
采用按键方式,电阻分别选取100Ω和10K,电容选取0.1μF。
上电复位是复位电路的第一功能。
通用的微机电路正常的的工作电源电压为5V±
5%,即4.75V至5.2V。
复位电路是用来让微型计算机系统保持稳定可靠的工作状态的不能缺少的部分。
总所周知,微型计算机电路是有时序的数字电路,它需要一个稳定的时钟信号,所以当电源开启时,只有当VCC超过4.75V的时候或者VCC低于5.25V的时候,并且要晶体振荡器工作状态持续稳定,复位信号才可以被撤销,计算机电路才能开始正常工作。
上电复位原理:
当VCC上电时,电容C充电,而在10K的电阻上出现电压,使得单片机可以复位;
几个毫秒之后,电容C被充满,10K的电阻上的电流被降为0,电压此时也为0,从而使得单片机开始进入工作状态。
手动复位原理:
工作期间,按下按键S,电容C放电。
按键S松手,电容C又充电,此时在10K电阻上出现电压,从而使得单片机复位。
几个毫秒后,单片机开始进入工作状态。
3.1.3时钟电路
时钟电路如图3.3:
图3.3—时钟电路
时钟电路是计算机的心脏,它控制着计算机的工作节奏就是通过复杂的时序电路完成不同的指令功能的。
单片机工作时,从取指令到译码再进行微操作,必须在时钟信号控制下才能有序地进行,时钟电路就是为单片机工作提供基本时钟的。
单片机的时钟信号通常有两种产生方式:
内部时钟方式和外部时钟方式。
内部时钟方式:
内部有一个用于构成振荡器的高增益反相放大器,引脚分别为此放大器的输人端和输出端,在单片机XTAL1和XTAL2引脚上跨接上一个晶振和两个稳频电容,可以与单片机片内的电路构成一个稳定的自激振荡器。
晶振的取值范围一般为0~24MHz,常用的晶振频率有6MHz、12MHz、11.0592MHz、24MHz等。
一些新型的单片机还可以选择更高的频率。
外接电容的作用是对振荡器进行频率微调,使振荡信号频率与晶振频率一致,同时起到稳定频率的作用,一般选用20~30pF的瓷片电容。
外部时钟方式:
是在单片机XTAL1引脚上外接一个稳定的时钟信号源,它一般适用于多片单片机同时工作的情况,使用同一时钟信号可以保证单片机的工作同步。
3.2键盘接口电路
键盘接口电路如图3.4所示:
图3.4—键盘接口电路
4*4矩阵键盘工作原理:
矩阵键盘又称为行列式键盘,它由4条I/O线为行线,4条I/O线做列线组成,在行线和列线的每个交叉点上设置一个按键。
这样键盘中的按键数为4*4个,所以称之为4*4矩阵键盘,这种行列式的键盘结构大大提高了I/O口的利用率。
在本设计中:
行线置高电平,接P1口的低四位P1.3-P1.0
列线置低电平,接P1口的高四位P1.7-P1.4
高四位为输入,低四位为输出
1.检测当前是否有键按下,采用逐行扫描法,检测方法为先将P1.7-P1.4依次置0,检测P1.3-P1.0状态,若全为1则无键闭合,否则有键闭合。
2.取出键抖动,当检测到有键按下后,延时一段时间再做下一步判断。
3.若有键按下,应判断究竟是哪一键按下。
方法是对键盘的行线进行扫描
将P1.7-P1.4依次置0时,P1.3-P1.0状态表3.2:
P1.3
1
P1.2
P1.1
闭合状态
第一行闭合
第二行闭合
第三行闭合
第四行闭合
表3.2—P10-P13状态表
3.3液晶显示电路
本设计液晶显示部分采用LCD1206电路如图3.5:
图3.5—LCD1206电路
液晶显示原理:
线段的显示:
图象形式的液晶显示装置有M×
N个基本的显示单元,假设LCD显示64行,每行有128列,一字节的8位对应每8位,即组成方式是由每行16字节,共16×
8=128个点而组成的,64×
16显示单元与RAM的显示区对应于1024个字节,以对应于每一个显示位置上的每个字节的显示的亮暗程度。
例如,屏幕亮和暗的第一行的内容由16个字节的RAM区内容来决定,而当000H-00FH(000H)=FFH时显示在屏幕左上角的短亮线,长度是8个小点,而当(3FFH)=FFH,就在屏幕的右下角会显示一个简短的亮线;
(000H)=FFH(001H)=00H(002H)=00H,......(00EH)=00H(00FH)=00H,第8段亮线和8个暗线,在屏幕顶部显示一条虚线。
这是液晶显示器(LCD)显示的基本原理。