单片机计算器设计论文_第1页
单片机计算器设计论文_第2页
单片机计算器设计论文_第3页
单片机计算器设计论文_第4页
单片机计算器设计论文_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 、单片机原理及应用课程设计(论文) 题 目 基于单片机的计算器设计 学院名称 电气学院 指导教师 职 称 教授 班 级 电力1201班 学 号 学生姓名 2015年 9 月 20 日1单片机课程设计任务书1课程设计的内容和要求(包括原始数据、技术要求、工作要求等):一、基于AT89C51单片机设计一个计算器。二、主要技术指标与要求:1、计算机的功能:(1). 功能模块一:实时键盘扫描(2). 功能模块二:数据1602液晶显示。2、基本要求: (1)、简要阐述单片机技术发展的国内外现状及LED动态显示和矩阵键盘基本 原理; (2)、掌握MCS-51系列某种产品(例如8051)的最小电路及外围扩

2、展电路的设 计方法; (3)、了解单片机数据转换功能及工作过程; (4)、完成主要功能模块的硬件电路设计及必要的参数确定; (5)、用protel软件完成原理电路图的绘制;II 2对课程设计成果的要求包括图表、原理图、仿真图等:设计电路,编写程序,安装调试或仿真,分析实验结果,并写出设计说明书,语言流畅简洁,文字不得少于3500字。要求图纸布局合理,符合工程要求,使用proteus软件绘出原理图,器件的选择要有计算依据。3主要参考文献:1 王千. 实用电子电路大全M. 电子工业出版社, 2004, 28-362 彭为. 单片机典型系统设计实例精讲M. 电子工业出版社,2 006, 69-883

3、 张荣. 基于单片机的智能系统设计与实现M. 电子工业出版社, 2005, 35-384 朱勇. 单片机原理与应用技术M. 清华大学出版社, 2006, 14-165 潘永雄. 新编单片机原理与应用M. 西安电子科技大学出版社, 2003, 78-8614课程设计工作进度计划:序号起 迄 日 期工 作 内 容12015.9.5布置任务,教师讲解设计方法及要求22015.9.5-2015.9.9学生查找阅读资料,初定方案,小组会议讨论并确定方案32015.9.10-2015.9.12硬件电路设计及程序编写42015.9.13.2015.9.18仿真、实验并写说明书,小组讨论52015.9.19答

4、辩主指导教师日期: 2015 年 9 月 20 日1摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控制检测技术日益更新。在实时检测和自动控制的单片机应用系统中,单片机往往作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件结构、软硬件结合,来加以完善。计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本次设计是用AT89S51单片机、LCD显示器、控制按键为元件来设计的计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握常用的LCD

5、显示器的使用方法和一般键盘的使用方法。关键词: 单片机; 液晶显示屏; 计算器; 矩阵键盘11 绪论11.1 课题背景11.2 设计目的22 总体方案设计22.1 计算器设计总体思想2 2.2 简易计算器设计基本原理32.3 MCS-51系列单片机简介3 2.4 单片机发展现状52.5 计算器系统现状72.6 简易计算器系统简介73 硬件设计8 3.1 电源模块83.2 主控制器模块84 硬件实现及单元电路设计94.1 主控制模块94.2 单片机的时钟电路与复位电路设计104.3 单片机管脚说明114.4 键盘电路设计134.5 液晶显示电路设计145 系统软件设计方案155.1 主程序流图1

6、6V5.2 运算程序设计166 PROTEUS软件仿真与调试187 系统的安装与调试197.1 安装步骤19结论21参考文献22附录一 整机电路原理图23附录二 部分源程序24附录三 元件清单.42 附录四 实物图.43VI1 绪论1.1 课题背景当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且比较容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器软件和开发过程中的环节和步骤,并从实践经验出发对计算器设计做

7、了详细的分析和研究。现如今,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店、办公室、学校因此设计一款简单实用的计算器会有很大的实际意义。本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。通过本设计的学习,使我掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析实际问题,提高解决毕业设计实际问题的能力,为单片机应用和开发打下良好的基础。对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用LCD(液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编

8、程,设计LCD和单片机的接口电路,以及利用单片机对液晶显示模块的驱动和操作;在充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。1.2 设计目的通过本次工程实践,运用智能化测量控制仪表原理与设计、MCS-51系列单片微型计算机及其应用所学知识及查阅相关资料,完成简易计算器的设计,达到理论知识与实践更好结合、提高综合运用所学知识和设计能力的目的。通过本次设计训练,可以使我们在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。2 总体方案设计2.1 计算器设计总体思想根据

9、功能和指示要求,本系统选用以MCS-51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采用LCD显示数据和结果。另外键盘包括数字键(0-9)、符号键(+、-、*、/)、清除键和等号键,故只需要16个按键即可,设计中采用集成的计算机键盘。执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。2.2 简易计算器设计基本原理根据功能和指示要求,本系统选用以

10、MCS-51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。2.3 MCS-51系列单片机简介stc89c52是MCS-51系列单片机的典型产品,以这一代表性的机型进行系统的讲解。stc89c52单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,其内部结构如图2.1所示,现在分别加以说明: 图2.1 stc89c52内部结构图中央处理器:中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统

11、协调的工作,完成运算和控制输入输出功能等操作。数据存储器(RAM):stc89c52内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。程序存储器(ROM):stc89c52共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。定时/计数器:stc89c52有两个16位的可编程定时/计数器,以实现定时或计数产生中断,用于控制程序转向。并行输入输出(I/O)口:stc89c52共有4组8位I/O口(

12、P0、 P1、P2和P3),用于对外部数据的传输。全双工串行口:stc89c52内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。中断系统:stc89c52具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。时钟电路:stc89c52内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但stc89c52单片机需外置振荡电容。下图是MCS-51系列单片机的内部结构示意图2.2。图2.2 MCS-51内部结构图2.4 单片机发展现状单片机的发展趋势

13、:低功耗CMOS化;微型单片化;主流与多品种共存;单片机从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供广阔的天地。 纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:(1) 低功耗CMOS化 MCS-51系列的stc89c52推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。象80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然

14、功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。 (2)微型单片化现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身

15、定做,制造出具有自己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。(3) 主流与多品种共存 现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的Winbond系列单片机。所以Cstc89c52为核心的单片机占据了半壁江山。而Microchip公司的PIC精简指令集(RISC)也有着强劲的发展势头,中国台湾的HOL

16、TEK公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场分额。此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。在一定的时 期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道路。2.5 计算器系统现状计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。键盘是计算器的

17、输入部件,一般采用接触式或传感式。为减小计算器的尺寸,一键常常有多种功能。显示器是计算器的输出部件,有发光二极管显示器或液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。计算器可选用的外围设备有微型打印机、盒式磁带机和磁卡机等。2.6 简易计算器系统简介本计算器是以MCS-51系列stc89c52单片机为核心构成的简易计算器系统。该系统通过单片机控制,实现对4*4键盘扫描进行实时的按

18、键检测。整个系统可分为2个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据1602液晶显示。3 硬件设计 硬件系统是指构成微机系统的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。本设计选用以AT89S51单片机为主控单元。显示部分:采用LCD静态显示。按键部分,采用4*4键盘。3.1 电源模块 由于本系统采用电池供电,我们考虑了如下几种方案为系统供电。方案1:采用5V蓄电池

19、为系统供电。蓄电池具有较强的电流驱动能力以及稳定的电压输出性能。但是蓄电池的体积过于庞大,在使用极为不方便。因此我们放弃了此方案。方案2:采用3节1.5 V干电池共4.5V做电源,经过7805的电压变换后为单片机,传感器供电。经过实验验证系统工作时,单片机、传感器的工作电压稳定能够满足系统的要求,而且电池更换方便。综上所述采用方案23.2 主控制器模块方案1: 采用可编程逻辑器件CPLD作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复

20、杂的逻辑功能,对数据的处理速度的要求也不是非常高。且从使用及经济的角度考虑我们放弃了此方案。方案2: 采用STC89C52单片机作为整个系统的核心,用其控制密码锁控制,以实现其既定的性能指标。充分分析我们的系统,其关键在于密码锁的控制,而在这一点上,单片机就显现出来它的优势控制简单、方便、快捷。这样一来,单片机就可以充分发挥其资源丰富、有较为强大的控制功能及可位寻址操作功能、价格低廉等优点。STC89C52单片机具有功能强大的位操作指令,I/O口均可按位寻址,程序空间多达8K,对于本设计也绰绰有余,更可贵的是STC89C52单片机价格非常低廉。因此,这种方案是一种较为理想的方案。从方便使用的角

21、度考虑,我们选择了方案2。4 硬件实现及单元电路设计4.1 主控制模块主控制最小系统电路如图4.1所示。 图4.1 单片主控电路4.2 单片机的时钟电路与复位电路设计本系统采用STC系统列单片机,相比其他系列单片机具有很多优点。一般STC单片机资源比其他单片机要多,而且执行速度快;STC系列单片机使用串口对单片机进行烧写,下载程序较为方便;STC51单片机内部集成了看门狗电路;且具有很强抗干扰能力。本系统采用内部方式的时钟电路和加电自复位的复位电路,如下图4.2图4.3所示:图4.2 时钟电路图4.3 复位电路由于单片机P0口内部不含上拉电阻,为高阻态,不能正常地输出高/低电平,因而该组I/O

22、口在使用时必须外接上拉电阻。4.3 单片机管脚说明VCC(40):供电电压,其工作电压为5V。GND(20):接地。P0端口(P0.0-P0.7):P0口为一个8位漏极开路双向I/O口,每个引脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。P1端口(P1.0-P1.7):P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高电平,可用作输

23、入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2端口(P2.0-P2.7):P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口,用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程

24、和校验时接收高八位地址信号和控制信号。P3端口(P3.0-P3.7):P3口管脚是一个带有内部上拉电阻的8位的双向I/O端口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入端时,由于外部下拉为低电平,P3口将输出电流(ILL)。P3口同时为闪烁编程和编程校验接收一些控制信号。复位RST(9):复位输入。在振荡器运行时,有两个机器周期(24个振荡周期)以上的高电平出现在此引脚时,将使单片机复位,只要这个引脚保持高电平,51芯片便循环复位。复位后P3.0-P3.7口均置1,引脚表现为高电平,程序计数器和特殊功能寄存器SFR全部清零。当复位脚由高电平变

25、为低电平时,芯片为ROM的00H处开始运行程序。复位操作不会对内部RAM有所影响。ALE/(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如果想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,则置位无效。(29):外部

26、程序存储器的选通信号。在由外部程序存储器取指令期间,每个机器周期两次有效。但在访问外部数据存储器时,这两次有效的信号将不出现。EA/VPP(31):当保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,将内部锁定为RESET;当端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V的编程电源(VPP)。XTAL1(19):来自反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2(18):来自反向振荡器的输出。4.4 键盘电路设计在单片机应用系统中,一般都会设置键盘,主要为了控制运行状态,输入一些命令或数据,

27、以完成特定的人机交互。键盘是与单片机进行人机交互的最基本的途径,其以按键的形式来设置控制功能或输入数据,按键的输入状态本质上是一个开关量。对于简单的开关量的输入可以采用独立式按键,这种方法接口简单,但占用单片机I/O端口资源较多。对于输入参数较多、功能复杂的系统,需要采用矩阵式键盘进行输入控制。本系统采用4*4矩阵式键盘,键盘连接方式如图4.4所示:图4.4 键盘电路4.5 液晶显示电路设计液晶显示器(LCD)是一种功耗很低的显示器,它的使用非常广泛,比如电子表、计算器、数码相机、计算机的显示器和液晶电视等。电子密码锁中需要显示的信息比较多,为了能直观的看到结果,并且为了设计显的美观,使用总线

28、和排阻进行简化连接方式,本设计采用液晶显示屏LCD进行显示,具体连接方式如图4.5所示。图4.5 液晶显示电路5 系统软件设计方案5.1 主程序流图 如图5.1为主程序流程图图5.1 主程序流程图5.2 运算程序设计STC89C52单片机是一块芯片中集成了CPU、RAM、ROM、定时器、计数器、和多功能I/O等一台计算器所需要的基本功能部分。如果按功能划分,它由如下功能部分组成,即微处理器(CPU)、数据处理器(RAM)、程序处理器(ROM/CPROM)、并行I/O口、串行口、定时器、计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,

29、尤其是特殊一些功能,通过使用单片机编写的程序可以凸显高智能、高效率以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快实现运算功能。计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用到很多的I/O资源,因此在很多情况下都不采用这种方式(如图11)。但因为实体资源有限不得已而为之,但不会影响其功能。图5.2 运算程序6 PROTEUS软件仿真与调试 图6.1 计算器的proteus仿真我们运用proteus进行了电路仿真,仿真结果如图6.1,这说明程序以及电路没有错误,接下来就可以进行实物的焊接了。7 系统的安装与调试7.1

30、安装步骤检查元件的好坏按电路图买好元件后首先检查买回元件的好坏,按各元件的检测方法分别进行检测,一定要仔细认真。而且要认真核对原理图是否一致,在检查好后才可上件、焊件,防止出现错误焊件后不便改正。放置、焊接各元件按原理图的位置放置各元件,在放置过程中要先放置、焊接较低的元件,后焊较高的和要求较高的元件。特别是容易损坏的元件要后焊,在焊集成芯片时连续焊接时间不要超过10s,注意芯片的安装方向。结论通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同

31、时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,掌握得不够牢固,对C语言掌握得不够好等。回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西。使我们在单片机的基本原理、单片机应用系统开发过程,以及在常用编程设计思路技巧的掌握方面都能向前迈了一大步,为日后成为合格的应用型人才打下良好的基础。这是一次考验。怎样才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计

32、划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。在这里真诚地对所有关心我、帮助我、鼓励我的老师、同学、朋友道声:“谢谢!”参考文献1 王千. 实用电子电路大全M. 电子工业出版社, 2004, 28-362 彭为. 单片机典型系统设计实例精讲M. 电子工业出版社,2 006, 69-883 张荣. 基于单片机的智能系统设计与实现M. 电子工业出版社, 2005, 35-384 朱勇. 单片机原理与应用技术M. 清华大学出版社, 2006, 14-16

33、5 潘永雄. 新编单片机原理与应用M. 西安电子科技大学出版社, 2003, 78-86附录1 整机电路原理图附录2 部分源程序#include<reg52.h>#include<stdio.h>#include<string.h>#include<lcd1602.h>#include<stdlib.h>#define uint unsigned int#define uchar unsigned charsbit batt = P35;float num1; / 保存第一个数float num2; / 保存第二个数uchar jjc

34、c; / 加减乘除标志变量uchar idata Lcd_Str17; / 显示区缓存uchar idata Num_str17; uchar Lcd_num2_add = 0;/ 第二个数据开始位的增量uchar Lcd_dis1_i = 0; / 记录显示第一行字符uchar Lcd_num1_i = 0; / 记录num1 是几位数uchar Lcd_num2_i = 0; / 记录num2 是几位数uchar Dian_i = 0; / 小数点位数/* *函数名称:delayms;函数功能:延时z毫秒;形 参:z (延时时间参数) */void delayms(uchar z) uin

35、t x,y; for(x=z;x>0;x-) for(y=110;y>0;y-);uchar Key_io; / 暂存IO值uchar Key_jl; / 松手检测自锁变量uchar Key_value; / 返回键值uchar Key_D_bit;uchar saom(void) Key_value=18; P2=0xf0; / 拉低低四位 Key_io=P2; if(Key_io!=0xf0) / 查看高四位是否有低电平 Key_io|=0x0f; / 保持高四位出现低电平的管脚,拉高第四位 P2=Key_io; / 重新复制IO口 Key_io=P2; / 读取IO信息,确定

36、键值 if(Key_jl=0) / 自锁变量,松手检测 Key_jl=1; switch(Key_io) case 0x7e: Key_value=1; break ; case 0x7d: Key_value=2; break ; case 0x7b: Key_value=3; break ; case 0x77: Key_value=12; break ; case 0xbe: Key_value=4; break ; case 0xbd: Key_value=5; break ; case 0xbb: Key_value=6; break ; case 0xb7: Key_value=1

37、3; break ; case 0xde: Key_value=7; break ; case 0xdd: Key_value=8; break ; case 0xdb: Key_value=9; break ; case 0xd7: Key_value=14; break ; case 0xee: Key_value=10; break ; case 0xed: Key_value=0; break ; case 0xeb: Key_value=11; break ; case 0xe7: Key_value=15; break ; else Key_jl=0; Key_io = P3; /

38、 独立按键扫描 Key_io&=0xc0; if(Key_io!=0xc0) if(Key_D_bit=0) Key_D_bit = 1;switch(Key_io) case 0x80: Key_value = 16; break; case 0x40: Key_value = 17; break; else Key_D_bit = 0; return Key_value;uchar XS_JG(uchar add,float n) uchar len,p=0; memset(Lcd_Str,0,16) ; sprintf(Lcd_Str,"%e",n) ; wh

39、ile(Lcd_Strp!='e') p+; if(Lcd_Strp+2=0x30&&Lcd_Strp+3<0x37) sprintf(Lcd_Str,"%f",n); len = strlen(Lcd_Str) ; while(len) if(Lcd_Strlen-1='.') Lcd_Strlen-1 = 0; break; if(Lcd_Strlen-1='0') / 去除数据中多余的0与小数点 Lcd_Strlen-1 = 0; else break; len-; else while(p) if

40、(Lcd_Strp-1='.') Lcd_Strp-1 =' ' break; if(Lcd_Strp-1='0') / 去除数据中多余的0与小数点 Lcd_Strp-1 = ' ' else break; p-; Dis_str(add," "); Dis_str(add,Lcd_Str); return len;void fuhao(uchar s) if(jjcc<5) if(Num_str0!='A') if(Num_str0<=0x39&&Num_str0&

41、gt;=0x30&&jjcc != 2) num1=atof(Num_str); / 从数组中取第二个数字/ XS_JG(0x8a,num1); if(jjcc=0) Num_strLcd_dis1_i = s ; Lcd_dis1_i+;Lcd_num2_add = Lcd_dis1_i ; else if(Num_strLcd_num2_add=0) Num_strLcd_dis1_i-1 = s ; Dis_str(0x80,Num_str); if(jjcc=5) Lcd_dis1_i = 4 ; Lcd_num2_i = 0 ; Lcd_num2_add = 4; m

42、emset(Num_str,0,16); Num_str0 = 'A' Num_str1 = 'n' Num_str2 = 's' Num_str3 = s; Dis_str(0x80," "); Dis_str(0x80,Num_str); void main(void) uchar num_key1; init_1602(); write_1602dat('0'); memset(Num_str,0, 16); while(1) num_key1=saom(); /读按键值 delayms(10); if(

43、num_key1<18)/是否有按键按下,小于16时有按键按下 batt = 0; delayms(30);batt = 1; switch(num_key1) case 11: if(Num_strLcd_num2_add<=0x39&&Num_strLcd_num2_add>=0x30) num2=atof(Num_str+Lcd_num2_add); / 从数组中取第二个数字 Else break; Lcd_num2_i=0 ;/ XS_JG(0x8a,num2); switch(jjcc) case 1: num1+=num2; / 加 break;

44、case 2: num1-=num2; / 减 break; case 3: num1*=num2; / 乘 break; case 4: num1/=num2; / 除 break; XS_JG(0xc0,num1); Dis_str(0x80+Lcd_dis1_i,"="); jjcc=5; / 等号标志 break;case 12: if(Num_str0=0|Lcd_num2_i>0) break; fuhao('+'); jjcc=1;Dian_i=0 ; break; / 按下加号键case 13: if(Num_str0=0|Lcd_num2_i>0) break; fuhao('-'); jjcc=2;Dian_i=0 ; break; / 按下减号键case 14: if(Num_str0=0|Lcd_num2_i>0) break; fuhao('*'); jjcc=3;Dian_i=0 ; break; / 按下乘号键case 15: if(Num_str0=0|Lcd_num2_i>0) break; fuhao('/'); jjcc=4;Dian_i=0 ; break; /

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论