欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    基于80C51的简易计算器设计-毕业论文.doc

    • 资源ID:29908712       资源大小:366KB        全文页数:28页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    基于80C51的简易计算器设计-毕业论文.doc

    毕业设计设计题目:基于80C51的简易计算器设计 系别: 电气学院 专业: 应用电子技术 班级: 电子1547班 姓名: 学号: 1230302154705 指导教师: (共 28 页) 2015年 04 月 23 日 摘  要随着社会的发展,科学的进步,人们的生活水平在逐步的提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了, 单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。单片机由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。在工业生产中。单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机应用系统的可靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。计算器在人们的日常中是比较的常见的电子产品之一。在本次的毕业设计课题中,我以MCS-51系列单片机基础及其应用课程中所学知识为基础,设计了简易计算器。本系统以MCS-51系列中的80C51单片机为核心,能够实现两位数的四则运算。关键词:单片机,AT89C51,计算器,Proteus,Keil vision1激情进取 志在超越 航空报国 强军富民目 录一、选题的背景及意义1.1 选题的背景1.2 选题的意义二、软件介绍2.1 Proteus软件2.2 Keil vision软件三、总体设计3.1 设计目的3.2 设计任务及要求3.3 方案选择四、硬件设计4.1 MCS-51系列单片机简介4.2 74LS373简介4.3 6264简介4.4 LCD显示4.5 运算模块4.6 键盘接口电路4.7 硬件系统框图五、软件设计5.1 软件调试步骤5.2 软件设计流程图六、设计总结七、参考文献八、附录8.1 简易计算器原理图8.2 元器件清单8.3 C语言程序一、 选题的背景及意义1.1 选题的背景当今时代,是一个新技术层出不穷的时代。在电子领域,尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统正以前所未见的速度被单片机智能控制系统所取代。单片机具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。过去习惯于传统电子领域的工程师、技术员正面临着全新的挑战,如不能在较短时间内学会单片机,势必会被时代所遗弃,只有勇敢地面对现实,挑战自我,加强学习,争取在较短的时间内将单片机技术融会贯通,才能跟上时代的步伐。1.2 选题的意义我这次毕业设计的题目是“基于80C51的简易计算器”。是在我们学习了单片机原理C语言基础计算机基础等课程的基础上所选择了此课题。这次毕业设计是应用了好几门专业课程,对我所学专业进行的一次总结,不仅培养了我如何合理运用课本中所学到的理论知识与实践紧密结合,还学会了独立解决实际问题的能力。二、 软件介绍2.1 Proteus软件Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。Proteus软件具有其它EDA工具软件(例:multisim)的功能。这些功能是:1 原理布图2PCB自动或人工布线3SPICE电路仿真革命性的特点1 互动的电路仿真用户甚至可以实时采用诸如RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件。2仿真处理器及其外围电路可以仿真51系列、AVR、PIC、ARM、等常用主流单片机。还可以直接在基于原理图的虚拟原型上编程,再配合显示及输出,能看到运行后输入输出的效果。配合系统配置的虚拟逻辑分析仪、示波器等,Proteus建立了完备的电子设计开发环境。2.2 Keil vision软件单片机开发中除必要的硬件外,同样离不开软件。随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。 Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(mVision)将这些部份组合在一起。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选。Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。 C51工具包的整体结构,其中mVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。三、 总体设计3.1 设计目的本设计主要是依据单片机的原理来进行简易计算器的设计,设计采用了80C51单片机作为计算器的主控制器,LM020 L作为显示器,4×4 keypad-smallcalc键盘作为输入按键,通过软硬件相结合,来实现整数的“加”、“减”、“乘”、“除”运算。进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。在本设计中,使我掌握单片机程序设计和微机接口应用的基本方法,并能综合运用大学阶段所学软、硬件知识分析实际问题,提高解决毕业设计实际问题的能力,为单片机应用和开发打下良好的基础。充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。3.2 设计任务及要求本设计主要通过单片机的原理和应用,以电子技术基础及C语言程序的基本理论为指导,利用Proteus仿真软件和Keil编程软件来设计简易计算器。本系统充分利用了80C51芯片的I/O引脚。系统以采用MCS-51系列单片机Intel80C51为中心器件来设计计算器控制器,实现了能根据实际输入值显示并存储的功能,计算程序则是参照教材。根据功能和指示要求,本系统选用以MCS-51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD显示数据和结果。2、另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。主系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换成显示器显示;功能模块三,显示器动态显示。另还有:复位系统电路,晶振电路。主要设计要求有: 1、对计算器硬件系统的设计; 2、运用keil进行计算器软件系统的设计; 3、在protues仿真平台上,对软件进行调试及仿真;    4、软硬件结合之后,进行整体电路的调试与测试。3.3 方案选择1. 方案一 根据功能和指标要求,本系统选用MCS-51系列单片机AT89C51为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。用七段数码管作为显示电路,矩阵键盘作为输入电路。2. 方案二 根据计算器的功能要求,选择AT89C51为主控机,通过扩展必要的外围接/口电路,实现对计算器的设计。外部主要由4*4矩阵键盘和一个液晶显示屏构成,内部由一块AT89C51单片机构成。计算器电路包括四个部分:选用LCD作为显示部分,矩阵键盘作为输入部分,运算模块,单片机控制部分。最终选择方案二。四、 硬件设计4.1 MCS-51系列单片机简介80C51是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。80C51单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,其内部结构如图4.1.1所示,现在分别加以说明: 图4.1.1 MCS-51内部结构中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM):80C51内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。程序存储器(ROM):80C51共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器:80C51有两个16位的可编程定时/计数器,以实现定时或计数产生中断,用于控制程序转向。并行输入输出(I/O)口:80C51共有4组8位I/O口(P0、 P1、P2和P3),用于对外部数据的传输。全双工串行口:80C51内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:80C51具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路:80C51内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。下图是MCS-51系列单片机的内部结构示意图4.1.2。 图4.1.2 MCS-51结构框图MCS-51的引脚说明:MCS-51系列单片机中的8031、8051及8751均采用40Pin封装的双列直插DIP结构,下图是它们的引脚配置,40个引脚中,正电源和地线两根,外置石英振荡器的时钟线两根,4组8位共32个I/O口,中断口线与P3口线复用。现在对这些引脚的功能加以说明:如图4.1.3所示。 图 4.1.3 MCS-51引脚图Pin9:RESET/Vpc复位信号复用脚,当8051通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统即初始复位。初始化后,程序计数器PC指向0000H,P0-P3输出口全部为高电平,堆栈指针写入07H,其它专用寄存器被清“0”。RESET由高电平下降为低电平后,系统即从0000H地址开始执行程序。然而,初始复位不改变RAM(包括工作寄存器R0-R7)的状态,8051的初始态。8051的复位方式可以是自动复位,也可以是手动复位。此外,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端必须接地。4.2 74LS373简介74LS373为三态输出的八 D 透明锁存器,共有 54/74LS373 和 54/74LS373 两种线路结构型式如图4.2.1,其主要电器特性的典型值如下(不同厂家具体值有差别): 图4.2.1 74LS373引脚图74LS373 的输出端 0007 可直接与总线相连。当三态允许控制端 OE 为低电平时,0007 为正常逻辑状态,可用来驱动负载或总 线。当 OE 为高电平时,0007 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。当锁存允许端 LE 为高电平时,O 随数据 D 而变。当 LE 为低电平时,O 被锁存在已建立的数据电平。当 LE 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mV。 引出端符号: D0D7 数据输入端 OE 三态允许控制端(低电平有效) LE 锁存允许端 O0O7 输出端 真值表如图4.2.2所示DnLEOEOnHHLHLHLLXLLQ0XXH高阻态 图4.2.2 真值表4.3 6264简介Intel 6264的容量为8KB,是28引脚双列直插式芯片,采用CMOS工艺制造。 A12A0(address inputs):地址线,可寻址8KB的存储空间。 D7D0(data bus):数据线,双向,三态。 (output enable):读出允许信号,输入,低电平有效。 (write enable):写允许信号,输入,低电平有效。 (chip enable):片选信号1,输入,在读/写方式时为低电平。 CE2(chip enable):片选信号2,输入,在读/写方式时为高电平。 VCC:+5V工作电压。 GND:信号地。 Intel 6264的操作方式由, CE1 , CE2的共同作用决定 写入:当和为低电平,且和CE2为高电平时,数据输入缓冲器打开,数据由数据线D7D0写入被选中的存储单元。 读出:当和为低电平,且和CE2为高电平时,数据输出缓冲器选通,被选中单元的数据送到数据线D7D0上。 保持:当为高电平,CE2为任意时,芯片未被选中,处于保持状态,数据线呈现高阻状态。如图 4.3.1 6264原理图 图 4.3.1 6264原理图4.4 LCD显示本设计采用LCD液晶显示器来显示输出数据。LCD的特性有:1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。其接口电路如图4.4.1所示。 图4.4.1 LCD显示4.5 运算模块MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等计算机所需要的基本功能部件。如果按功能划分,它由以下功能部件组成,即微处理器(CPU),数据存储器(RAM),程序存储器(ROM/EPROM),并行I/O口,串行口,定时器/计数器,中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的一些功能,通过使用单片机编写的程序可以实现高智能、高效率以及高可靠性,因此采用单片机作为计算器的主要功能部件,可以很快的实现运算功能。运算模块由键盘和显示屏组成。单片机通过按键来实现输入数据和操作方式的控制,在运算过程中,对所设的数据进行四则运算时,要先确定选用的是哪一个运算符,若是+或*,则要判断结果是否会溢出,溢出则显示错误提示,没有溢出则显示运算结果,若是/,则要判断除数是否为零,为零时显示错误提示,不为零显示运算结果。4.6 键盘接口电路计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图4.6.1所示:一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。 图4.6.1 计算器的键盘布局矩阵键盘内部电路图如4.6.2所示 图4.6.2 矩阵键盘内部电路按键介绍计算器所需按键有:数字键:1,2,3,4,5,6,7,8,9,0     功能键:+, - , *, /  ,  = ,  C( 清零) 共计16个按键,采用4*4矩阵键盘,键盘的行和列之间都有公共端相连,四行和四列的8个公共端分别接P1.0P1.7,这样扫描P1口就可以完成对矩阵键盘的扫描,通过对16个按键进行编码,从而得到键盘的口地址,对比P1口的扫描结果和各按键的地址,我们就可以得到是哪个键按下,从而完成键盘扫描的功能。键盘电路设计 键盘输入采用4*4的矩阵键盘。4*4键盘分别与PC0PC7相连。PC0PC3作为输入口(回送线),PC4PC7作为输出口(扫描线)。16个按键分别用于控制数字“09”以及数学运算符号“+、-、*、/”。4.7 硬件系统框图 LCD显示 51系列单片机系统 4*4键盘 晶振电路 复位电路五、软件设计5.1 软件调试步骤1.打开软件后,在Project菜单中选择New Project命令,打开一个新项目。保存此项目,输入工程文件名后,并保存工程文件的目录。2.为项目文件选择一个目标器件,即选择8051的类型。在Data base 列表框中选择“ATML 89C51”,确定。 3.上述设置好后,创建源程序文件并输入程序代码。输入好代码后点击“文件/保存”。4.把源文件添加到项目中,用鼠标指在目标工作区的目标1,点击右键在弹出的菜单中选择添加文件到源代码组,在弹出的添加文件框中,选择需要添加到项目中的文件。 5.开始编译,对项目文件进行编译。若没有错误后进行硬件调试。5.2 软件设计流程图 开始 根据功能键和输入 的数据 初始化参数 LED显示 功能键有键输入 其他键 是“=” 读取键码 键码是? 保存结果 和功能键 计算最后 结果 结果送显示缓冲 功能键 清零键 数字键 状态清零等待数值输入 输入数值 数值送显示缓冲六、设计总结随着毕业日子的到来,毕业设计也接近了尾声。经过几周的奋战我的毕业设计终于完成了。在没有做毕业设计以前觉得毕业设计只是对这几年来所学知识的单纯总结,但是通过这次做毕业设计发现自己的看法有点太片面。毕业设计不仅是对前面所学知识的一种检验,而且也是对自己能力的一种提高。通过这次毕业设计使我明白了自己原来知识还比较欠缺。自己要学习的东西还太多,以前老是觉得自己什么东西都会,什么东西都懂,有点眼高手低。通过这次毕业设计,我才明白学习是一个长期积累的过程,在以后的工作、生活中都应该不断的学习,努力提高自己知识和综合素质。万事开头难,想刚开始拿到毕业设计课题的时候真是不知道如何入手。最后终于做完了,有种如释重负的感觉。此外,还得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。在设计过程中,我通过查阅大量有关资料,与同学交流和自学,并向老师请教等方式,使自己学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了我的动手能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次毕业设计的最大收获和财富,使我终身受益。大学三年就会在这最后的毕业设计总结划上一个圆满的句号.我曾经以为时间是一个不快不慢的东西,但现在我感到时间过的是多么的飞快,三年,感觉就在一眨眼之间结束了我的大学生涯。毕业,最重要的一个过程,能把理论知识运用到实践当中的过程就数毕业设计了。这也是我们从一个学生走向社会的一个转折,另一个生命历程的开始,毕业设计的两个月,我学到了很多,也成熟了很多,我现在将我的过程以及所学到的总结如下:我选择的毕业设计题目是“基于80C51的简易计算器设计”。我做毕业设计的步骤是:1. 去图书馆及在网上查找关于单片机80C51以及如何应用Proteus和Keil软件相关的资料;2. 熟悉Proteus和Keil软件(通过看视频及书本上的资料);3. 用Proteus软件绘制简易计算器原理图;4. 用Keil软件编写计算器C语言程序并进行调试;5. 将程序导入原理图中并运行;6. 根据设计编写毕业设计论文。 在做毕业设计的过程中,每一步都是我自己亲自操作,遇到的问题非常多,在遇到问题,思索问题及解决问题的过程中,也让我收获颇多。以往没有注意到的问题,都在这一次的毕业设计中得以体现,让我在以后的工作中更加的细心,专心,有耐心。七、 参考文献1、典型模块设计实例导航编著:求是科技2、基于Proteus的8051单片机实例教程主编:李学礼3、单片机c语言程序设计实训100例主编:彭伟4、Proteus教程主编:朱清慧5、单片机技术“做中学”案例教程主编:陈石胜八、附录8.1 简易计算器原理图8.2 元器件清单仪器名称数量80C51.BUS174LS00374LS37316264174074BUTTON1CAP2CAPELEC1CRYSTAL1KEYPAD-SMALLCALC1LM020L1RES1 27激情进取 志在超越 航空报国 强军富民8.3 C语言程序#include <reg51.h>#include <ctype.h>#include "calc.h" static data long lvalue; static data long rvalue;static data char currtoken;static data char lasttoken; static data char lastpress; static xdata char outputbufferMAX_DISPLAY_CHAR;/输出缓冲 /- /主程序 /- void main() /变量初始化 lvalue=0; rvalue=0; currtoken='=' lasttoken='=' /初始化LCD initialise(); calc_putput(OK); calc_evaluate(); /- /获取按键值并进行计算处理 /- void calc_evaluate() char data key; int data i; char xdata numberMAX_DISPLAY_CHAR; char xdata *bufferptr; /清除缓冲 for(i=0;i<=MAX_DISPLAY_CHAR;i+) numberi=' ' bufferptr=number; while(1) key=calc_getkey();if(calc_testkey(key)         if(bufferptr!=&numberMAX_DISPLAY_CHAR-2)           *bufferptr=key;      calc_display(number);      bufferptr+;             else         if(lasttoken='0')        lvalue=calc_asciidec(number);     else      rvalue=calc_asciidec(number);     /清除数字缓冲  bufferptr=number;     for(i=0;i<=MAX_DISPLAY_CHAR;i+)      numberi=' '     /处理操作符     currtoken=key;     if(currtoken='C')     calc_opfunctions(currtoken);     else      calc_opfunctions(lasetoken);     /清除输出缓冲     for(i=0;i<=MAX_DISPLAY_CHAR;i+)      outpufbufferi=' '     bufferptr=number;     if(currtoken!0x3D)      lasttoken=currtoken;         lastpress=key;     /- /   根据运算符按键进行运算处理 /- void calc_opfunctions (char token)   char data result;  switch(token)     case '+':if(currtoken='='|isdigit(lastpress)     lvalue+=rvalue;    result=calc_chkerror(lvalue);      else result=SLEEP;   break;   case '-':if(currtoken='='|isdigit(lastpress)       Lvalue-=rvalue;    result=calc_chkerror(lvalue);      else result=SLEEP;   break;   case '*':if(currtoken='='|isdigit(lastpress)       lvalue*=rvalue;    result=calc_chkerror(lvalue);      else result=SLEEP;   break;   case '/':if(currtoken='='|isdigit(lastpress)  if (rvalue)     lvalue/=rvalue;    result=calc_chkerror(lvalue);      else result=SLEEP;  else result=SLEEP;  break;  /取消  case 'C':lvalue=0;      rvalue=0;           currtoken='0'           lasttoken='0'     result=OK;     break;  default:result=SLEEP;    calc_output(result);  /- /   检查待显示数据的上界和下界/- int calc_chkerror (long num)   if(num>=-99999999&&num<=99999999)   return OK;  else    return ERROR;  /- /   根据操作状态输出 /-void calc_output int status-   switch(status)     case OK:calc_deaplay(calc_decascii(lvalue);      break;   case SLEEP:    break;   case ERROR:calc_display("Exception");       break;   default:calc_display("Exception")       break;    /- /将ASCII字符串转换为浮点数 /- long calc_asciidec (char *buffer)    long data value;  long data digit;  value=0;  while(*buffer!=' ')     digit=*buffer-'0'   value

    注意事项

    本文(基于80C51的简易计算器设计-毕业论文.doc)为本站会员(豆****)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开