基于单片机的计算器的设计与实现
1 绪论1.1 课题背景 现今,科学技术不断发展,人们不断学习新知识、新科学、新技术,社会竞争也日益激烈起来。另外人们生活水平也在不断地提高,电子产品不再是遥不可及,它已经和我们的生活息息相关。对于一些复杂的计算,人的大脑是运算不过来的,而且也比较容易出现错误。于是用户把计算器作为一种计算工具使用,从而使计算既快速又简便而且错误率低,现在计算器已成为工作和生活中必不可少的物品之一。计算器最开始是电子计算机中的一部分,后来由于它经常被用户使用,而且使用方便快捷、操作简单,对于人们日常生活和工作都很方便,所以就把它从计算机独立出来单独制成物品使用,这样使用起来更加方便快捷。由于单片机体积微小和成本极低,因此它被广泛的应用于智能化仪器仪表、家用电子电器、工业自动化控制、新型智能化汽车电子系统等领域中。在工业控制生产过程中,由于单片机在控制领域有着非常重要的作用,于是单片机也被称为微控制器,是嵌入式系统中重要且发展迅速的组成部分。因此本次设计就采用以AT89C51单片机为核心控制器来设计计算器的控制系统,以及一些与AT89C51芯片上的I/O口连接外围设备,从而能实现基本四则运算的功能,所以本设计成本低廉,操作简单,可用于日常生活中的简单计算。1.2 计算器系统的发展现状目前市面上流通的计算器通常都是由一核心芯片作为控制核心,输入模块采用机械按键键盘运,显示模块采用LCD液晶屏,以及结合一些外围辅助设备组成。普通的计算器由于其硬件电路和软件程序都很简单,所以一般只能实现带小数点的加、减、乘、除四则运算,而对于一些相对复杂的数学公式不能运算。高档计算器一般都采用处理速度非常快的核心芯片而且软件程序也相对复杂得多,高性能的芯片才能实现各种复杂的运算程序,另外由于存储单元的内存比较大,所以可以存放较多的程序和数据以实现复杂的数学运算公式和连续运算。按键是计算器的重要组成部分,一般采用接触式按键,现在计算器的按键部分不断地被完善,一般一个按键具有多种功能,这样即可以减小计算器的体积又使用方便。计算器的输出部分一般采用由液晶显示器,液晶屏用来显示输入数值和运算结果,此外还通常具有错误指示、溢出指示等功能。本设计采用AT89C51单片机作为核心控制器,运用C语言编程实现控制硬件电路工作,该系统通过检测机械键盘输入数值,并把检测的数据存储下来,然后经过CUP处理运算,在LCD液晶屏上显示输入数值和计算结果。该计算器系统的具体执行过程为:首先存储单元清零,LCD液晶屏初始化,显示初始值“0.”,然后对进行键盘按键扫描并存储输入的按键数值,之后单片机则对数据进行储存与相应转换处理,最后经过运算处理送入LCD 显示器显示1。本设计将重点分析普通计算器的硬件电路以及软件设计,并从实际计算经验做了详细的分析与研究。2 系统设计2.1 设计要求在本次毕业设计中,不仅需要运用数字电路、模拟电路、单片机原理与接口技术等基本的所学相关知识,还需熟练运用相关的硬件电路设计软件,还需多方面查阅相关资料。只有具备了上述基本的理论知识才能完成一个简易计算器的设计,为了更好的实现理论与实践相结合,进一步完善所学知识和提高学习能力。此次毕业设计中,我需对单片机的基本概念和基于单片机的嵌入式系统设计的基本方法进行深入的学习,同时掌握必要的设计技巧。在本次设计中,需要完成如下几方面的设计任务:1、简要阐述单片机的最小系统的基本原理和串行接口以及LCD 液晶屏动态显示和带有PS2协议的机械键盘基本原理。2、掌握AT89C51的最小电路及外围扩展电路的设计方法。3、需完成功能模块的硬件电路设计和工作过程。4、用protel 软件完成原理电路图的绘制。 在本次设计中根据功能和指示要求,需选用以AT89C51单片机为主控机,通过外围扩展接口电路,实现对简易计算器的设计2。具体的设计要求如下: 1、该设计的简单计算器,能进行基本的四则运算,并且采用1601LCD液晶屏显示输入数据和计算结果。 2、键盘输入部分采用带有PS/2口的机械键盘,其包括数字键、符号键、功能键、 和等号键总共20个键。 3、具体执行过程为:开机LCD初始化显示“0.”,之后等待键盘输入按键值,当按下数字键时,计算器在内部自动执行数值转换与存储并通过LCD显示出来,当按键输入加、减、乘、除符号键时,执行运算功能,之后等待再次输入数字键并存储数值,最后按下等号键计算器自动计算出结果,并在LCD上显示1。 4、错误提示:当计算数值过大和不符合数学计算原理时,程序执行报错功能,并在LCD上显示相应的提示,当计算器计算数值大于9999999时存储单元会溢出,这时会在LCD上提示“over flow!”;当除数为0时,因不符合数学计算原理,这时在LCD上会提示错误“Cant div by 0!”。2.2 系统设计本设计采用以AT89C51单片机为主控单元,外围接口主要由LCD液晶屏和带有PS/2口的机械键盘构成2。另外还包括:串行通信接口UART和MAX232,这主要用来直接可以从电脑上加载程序,方便使用。设计的简单计算器可以实现7位的带小数点的加、减、乘、除、运算,并且利用Keil编译软件和Protel绘制电路图来实现本课题设计要求。计算器系统整体设计框图如图2-1所示:AT89C51最小应用系统按键电路晶振电路复位电路LCD显示 图2-1计算器总体设计框图计算器总体程序设计如下:1开机LCD液晶屏初始化,开INT0外中断,在液晶屏左边显示“0.”。2循环检测键盘上是否有按键按下,如果当一个键盘按下的时候,按键程序要判断是哪个按键按下,并且存储到按键值变量中,然后调用处理按键的子程序。3 通过LCD的子程序来显示,当输入一个数值或符号时要把输入这个的值给通过LCD显示出来,经过运算在按下等号之后显示出此次运算的结果3。其程序主程序如下:void main()Uchar i=0;lcd_int ();/ LCD初始化IT1=1; / 外中断INT1设定为负边沿触EA=1;/ 开总中断EX1=1;/ 开INT1中断(P3.3口)While (1)If (ps2_input_datai!=0x00)uchar ps2_val; /定义PS2键值存储变量ps2_val=ps2val_check(ps2_input_datai); /检测PS2键盘输入的通码并返回 if(ps2_val!=0 && ps2_val!=0xe0)key_handle(ps2_val); /调用按键处理函数ps2_input_datai=0x00;i+;if(i>9)i=0;2.3 单片机模块在微处理器问世后不久,便出现了一个大规模集成电路为主组成的微型计算机单片微型计算机(简称MCU或单片机)。在单片机内部含有计算机的基本功能部件:CPU、存贮器、各种接口电路。再给单片机配上适当的外围设备和软件就构成了单片机应用系统。单片机从上世纪80年代的发展成熟阶段进入了至今高速发展阶段。 本设计采用了AT89C51单片机作为控制系统的主要部分。51系列单片机有ROM型、OTP型和无ROM型,是典型的8位单片机。AT89C51带有4K字节的ROM程序存贮器、128字节的RAM数据存贮器、4个8位并行口、2个16位定时器和一个异步串行口。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次4。2.3.1AT89C51特性简介51系列单片机都包含有Intel 8051的基本功能模块:相同或相似的8位CPU,4KROM程序存储器,128个字节RAM数据存储器,4个8位并行口,2个16位定时器T0、T1,一个异步串行口UART。在此基础上,新型51单片机扩大了ROM容量(最大为64K),或增加了RAM(256字节),有的将本在外部空间的部分RAM放到内部,有的增加了并行口,或多功能定时器T2或PCA计数阵列或A/D等特殊I/O部件。2.3.2AT89C51的引脚功能其引脚如图2-2所示。 图2-289ATC51引脚图51单片机有P0、P1、P2、P3四个并行口,P0口为三态双向I/O口,可以作为输入/输出口使用,直接连外部输入/输出设备;也可作为系统扩展的地址/数据总线口。在本次设计中利用P0口外连接LCD液晶屏的DB0-DB7。P2口直接可以作为输入输出口使用,直接连接输入/输出设备;也可以作为系统扩展的地址总线口,输出高八位地址。在设计中P2口2.5-P2.7连接液晶屏的3根控制线。P3口第一功能为准双向口,第二功能为特殊输入/输出线。在本次设计中P3.0 RXD作为串行输入口,P3.1 TXD作串行输出口,P3.2 /INT0作外部中断0,P3.3 接PS/2键盘的时钟线,P3.4接PS/2键盘的数据线5。XTAL1、XTAL2为内部振荡器电路的输入输出端,外接晶振电路。图中外接电容和晶振构成了时钟震荡电路。RST:复位输入。输入高电平使C51复位,返回低电平退出复位。本设计中该引脚外接复位电路。/EA:运行方式时,EA为程序存贮器选择信号,EA接地时,CPU从外部存贮器CPU从内部或外部取指令。本设计中该引脚接高电平。VCC:供电电压。GND:接地。2.4 键盘模块本设计输入模块采用带有PS/2协议的机械键盘,PS/2键盘履行的是一种双向同步串口通信协议。也就是说当数据线发送一位数据时,时钟线也就发一个脉冲,主机可以发送数据和命令到键盘上,键盘也可以发送命令和数据到主机上,但是主机在总线上具有优先权,当键盘和主机同时发送命令和数据到总线上时,总线必须先处理来自总线上的信号,抑制来自键盘上的信号6。由从设备产生.PS/2键盘接口与管脚功能定义如表2-1所示:表2-1PS/2键盘接口与管脚功能定义表端口结构管脚定义1数据口2未实现,保留3电源地4电源,+55时钟口插头插座6未实现,保留当键盘向主机发送数据时,首先需要检查时钟线是否为高电平.若是高时钟线为电平,则键盘就可以向主机传输数据了,键盘向主机传送的数据由11位组成,包括起始、应答、停止和DATA0-DATA7,键盘向主机发送数据的时序图如图2-3所示:图2-3键盘到主机的通信主机到键盘的通信,主机需要首先将时钟线和数据线设置为“请求发送”的状态,然后先下拉数据线,最后释放时钟线完成请求要求。当键盘检测到主机的时钟线和数据线处于以上状态时,键盘就可以接受主机发送的信号了。主机到键盘的通信每一帧数据由12位组成,与键盘到主机通信相比增加了“应答”一位7,主机到键盘通信的时序图如图2-4所示.图2-4主机到键盘的通信与键盘到主机的通信相比,其每一帧数据多了一个应答位,当键盘答接收到主机的应答位时,键盘需拉低数据线产生该位,因此应答位总是为0。主机到键盘的通信过程中,主机总是在时钟线为低电平时,数据线改变其状态,键盘在时钟上升沿时读入来自数据线的数据。本次设计中,单片机的P1.3口接PS/2