毕业设计(论文)-基于单片机工程运算系统的设计1.doc_第1页
毕业设计(论文)-基于单片机工程运算系统的设计1.doc_第2页
免费预览已结束,剩余44页可下载查看

下载本文档

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

文档简介

东北石油大学毕业设计(论文)任务书题目 基于单片机工程运算系统的设计主要内容、基本要求、主要参考资料等:主要内容:工程运算系统是一种能够进行加(+),减(-),乘(),除(),百分数(%),倒数(1/x),开方(sqrt),百分比(%),正弦函数(sin),余弦函数(cos),正切函数(tan)和余切函数(cot)等计算的电子器件,但组成却是麻雀虽小,五脏俱全,由运算器、控制器、存储器、键盘、显示器、电源和一些外围设备组成。本设计的主要内容是用8051单片机实现计算要求,通过自己编写的程序下载到单片机中,从而实现单片机可以进行的算术运算。基本要求:1. 以单片机为主体来实现;2. 能够进行加(+),减(-),乘(),除(),百分数(%),倒数(1/x),开方(sqrt)等计算;3. 具有独立按键,复位键,通过键盘输入;4. 用lm016l液晶显示屏显示计算结果;主要参考资料:1 单片微型计算机与接口技术,李群芳、黄建编著,电子工业出版社;2 单片机原理及应用,张毅刚编著,高等教育出版社;3 51系列单片机及c51程序设计,王建校,杨建国等编著,科学出版社;4 单片机原理及接口技术,李朝青编著,北京航空航天大学出版社;完成期限: 2012.6.17指导教师签名: 专业负责人签名: 2012 年 3 月 11 日 东北石油大学本科生毕业设计(论文)摘 要随着社会的发展,科学的进步,工程运算系统在生活中应用越来越广泛,将来会出现使用携带更加方便、功能更加强大的工程运算系统。基于这样的理念,本次设计是设计基于单片机的工程运算系统。该系统是以at89c51 为核心器件的单片机运算系统,其外围电路包括:1. 58 的键盘矩阵作为运算系统的输入,通过键盘扫描来对输入数的控制;2. 时钟电路和复位电路,3. 液晶显示屏lm016l作为运算系统的输出显示。使用c语言编写运算系统软件,在keil uvision4编译环境下调试运行,利用proteus仿真软件进行软硬件综合仿真和调试。本次设计实现了加,减,乘,除,求倒数,开方,百分比,正弦函数,余弦函数,正切函数和余切函数等运算功能,该工程运算系统在protues仿真平台上能够正常运行。 关键词:工程运算;lm016l液晶显示屏;单片机;protuesabstractwith the development of society, the progress of science, engineering, computing systems in their lives more and more widely, and now being developed in the future, there will be more powerful engineering computing systems. based on this concept, the design is the design engineering and computing systems with mcu. the design system is based on at89c51 microcontroller, p2 port as input, external 5x8 keyboard, the keyboard scan control to enter the number, p 0 the output port, through lm016l lcd display. keil programming software, programming in c, proteus simulation software simulation and debugging, and finally run out of results. function of the design will be completed, subtraction, multiplication, division, seeking reciprocal, square root, percentage of the sine function, cosine function, the tangent and cotangent functions such as engineering calculations.keywords: engineering operations; lm016l screen; microconrroller 东北石油大学本科生毕业设计(论文)目 录 第1章 概述11.1 工程运算系统的简介11.2 工程运算系统的目的和意义1第2章 总体设计思路22.1 单片机的选取22.2 液晶显示屏的选取42.3 工程运算系统总体设计思路62.4 本章小结8第3章 系统设计93.1 硬件设计93.2 软件设计133.3 本章小结27第4章 工程运算系统的编译和仿真284.1 工程运算系统的keil软件编译284.2 工程运算系统的proteus仿真304.3 本章小结36第5章 工程运算系统的调试375.1 keil软件调试375.2 proteus调试375.3 本章小结37总结38参考文献39致谢40附录一4134第1章 概 述1.1 工程运算系统的简介工程运算系统一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。低档工程运算系统的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档工程运算系统由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。键盘是工程运算系统的输入部件,一般采用接触式或传感式。为减小系统的尺寸,一键常常有多种功能。显示器是工程运算系统的输出部件,有发光二极管显示器和液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。工程运算系统电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,工程运算系统都采用cmos工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。工程运算系统可选用的外围设备有微型打印机、盒式磁带机和磁卡机等。1.2 工程运算系统的目的和意义当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品。工程运算系统作为一种快速通用的计算工具方便了用户的使用,可谓是我们最亲密的电子伙伴之一。本次设计着重在于分析工程运算系统软件和开发过程中的环节和步骤,并从实践经验出发对工程运算系统设计做了详细的分析和研究。单片机3由于其微小的体积和极低的成本,广泛的应用于家用电器、工业控制等领域中。在工业生产中。单片微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。本系统就是充分利用了8051芯片的i/o引脚。系统以采用at89c51单片机中心器件来设计计算器控制器,实现了能根据实际输入值显示并存储的功能。通过本次设计的训练,可以使我在基本思路和基本方法上对基于at89c5151单片机系统设计有一个比较感性的认识,并具备一定程度的设计能力。东北石油大学本科生毕业设计(论文)第2章 总体设计思路2.1 单片机的选取工程运算系统的单片机主要用at89c51,因为at89c511是一种带4k字节闪烁可编程可擦除只读存储器(fperomfalsh programmable and erasable read only memory)的低电压,高性能cmos8位微处理器。单片机的可擦除只读存储器可以反复擦除100次。具有128字节内部ram,32 个i/o 口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,at89c51可降至0hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止cpu的工作,但允许ram,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存ram中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。at89c51单片机为很多系统提供了一种灵活性高且价廉的方案。at89c51芯片如图2-1所示:图2-1 at89c51芯片图1. 主要特性2(1) 与mcs-51 兼容 (2) 4k字节可编程闪烁存储器 (3) 全静态工作:0hz-24hz(4) 三级程序存储器锁定(5) 128*8位内部ram(6) 32可编程i/o线(7) 两个16位定时器/计数器(8) 5个中断源 (9) 可编程串行通道(10) 低功耗的闲置和掉电模式(11) 片内振荡器和时钟电路 2. at89c51单片机引脚介绍(1) vcc: 供电电压。 (2) gnd:接地。 (3) p0口:p0口为一个8位漏级开路双向i/o口,每脚可吸收8ttl门电流。当p0口的管脚第一次写1时,被定义为高阻输入。p0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在fiash编程时,p0口作为原码输入口,当fiash进行校验时,p0输出原码,此时p0外部必须被拉高。 (4) p1口:p1口是一个内部提供上拉电阻的8位双向i/o口,p1口缓冲器能接收输出4ttl门电流。p1口管脚写入1后,被内部上拉为高,可用作输入,p1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在flash编程和校验时,p1口作为第八位地址接收。 (5) p2口:p2口为一个内部上拉电阻的8位双向i/o口,p2口缓冲器可接收,输出4个ttl门电流,当p2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,p2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。p2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,p2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,p2口输出其特殊功能寄存器的内容。p2口在flash编程和校验时接收高八位地址信号和控制信号。 (6) p3口:p3口管脚是8个带内部上拉电阻的双向i/o口,可接收输出4个ttl门电流。当p3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,p3口将输出电流(ill)这是由于上拉的缘故。p3口也可作为at89c51的一些特殊功能口:p3.0 rxd(串行输入口) p3.1 txd(串行输出口) p3.2 /int0(外部中断0) p3.3 /int1(外部中断1) p3.4 t0(记时器0外部输入) p3.5 t1(记时器1外部输入) p3.6 /wr(外部数据存储器写选通) p3.7 /rd(外部数据存储器读选通) p3口同时为闪烁编程和编程校验接收一些控制信号。(7) rst:复位输入。当振荡器复位器件时,要保持rst脚两个机器周期的高电平时间。 (8) ale/prog:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在flash编程期间,此引脚用于输入编程脉冲。在平时,ale端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ale脉冲。如想禁止ale的输出可在sfr8eh地址上置0。此时, ale只有在执行movx,movc指令是ale才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ale禁止,置位无效。 (9) /psen:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/psen有效。但在访问外部数据存储器时,这两次有效的/psen信号将不出现。 (10) /ea/vpp:当/ea保持低电平时,则在此期间外部程序存储器(0000h-ffffh),不管是否有内部程序存储器。注意加密方式1时,/ea将内部锁定为reset;当/ea端保持高电平时,此间内部程序存储器。在flash编程期间,此引脚也用于施加12v编程电源(vpp)。 (11) xtal1:反向振荡放大器的输入及内部时钟工作电路的输入。 (12) xtal2:来自反向振荡器的输出。2.2 液晶显示屏的选取液晶显示屏选用lm016l,因为lm016l液晶模块采用hd44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,lm016l与单片机mcu通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位寄存器,指令寄存器(ir)和数据寄存器(dr)忙标志(bf),显示数ram(ddram),字符发生器roma(cgorom)字符发生器ram(cgram),地址计数器ram(ac)。ir用于寄存指令码,只能写入不能读出,dr用于寄存数据,数据由内部操作自动写入ddram和cgram, 或者暂存从ddram和cgram读出的数据,bf为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,ddtam用来存储显示的字符,能存储80个字符码,cgrom由8位字符码生成5*7点阵字符160中和5*10点阵字符32种。8位字符编码和字符的对应关系。cgram是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,ac可以存储ddram和cgram的地址,如果地址码随指令写入ir, 则ir自动把地址码装入ac,同时选择ddram或cgram。 lm016l液晶显示屏如图2-2所示:图2-2 lm016l液晶显示屏图lm016l液晶模块的引脚功能如下表所示: 表2-1 lm016l引脚功能引脚符号功能说明1vss一般接地2vdd接电源(+5v)3v0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度)。4rsrs为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5r/wr/w为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。6ee(或en)端为使能(enable)端,下降沿使能。7db0底4位三态、 双向数据总线 0位(最低位)8db1底4位三态、 双向数据总线 1位9db2底4位三态、 双向数据总线 2位10db3底4位三态、 双向数据总线 3位11db4高4位三态、 双向数据总线 4位12db5高4位三态、 双向数据总线 5位13db6高4位三态、 双向数据总线 6位14db7高4位三态、 双向数据总线 7位(最高位)(也是busy flang)15bla背光电源正极16blk背光 电源负极2.3 工程运算系统总体设计思路本系统选用at89c51单片机为主控机。通过扩展必要的外围接口电路,实现对工程运算系统的设计。分别对键盘输入模块、lcd显示模块和算术运算模块进行设计,并用visio画系统方框图,keil编写程序与protues仿真分析调试并计算结果。 工程运算系统是一种能够进行加(+),减(-),乘(),除(),百分数(%),倒数(1/x),开方(sqrt),百分比(%),正弦函数(sin),余弦函数(cos),正切函数(tan)和余切函数(cot)等计算的电子器件,主要以at89c51单片机为主体,由运算器、控制器、存储器、键盘、显示器、电源和一些外围设备组成。本设计的主要内容是用单片机实现计算要求,c语言编写程序,用keil调试程序,通过proteus仿真软件仿真,再将编好的程序下载到单片机中,仿真出结果,从而实现单片机可以进行简单的算术运算。工程运算系统整体模块由单片机、输入模块、运算模块和显示模块组成。手动按键输入数字,lm016llcd液晶显示屏显示,通过单片机进行运算,最后结果再由lcd液晶显示屏显示。1. 系统框图如图2-3所示:单片机运算模块显示模块输入模块图2-3 系统框图系统框图按照硬件的原理图画,运算模块在单片机的内部,加上外部时钟电路和复位电路2. 系统总流程图如图2-4所示:开始初始化参数初始化lcd显示有键输入?读取键码lcd显示数字键清零键功能键状态清零输入数值数值送显示缓冲yn等待数值输入结果送显示缓冲功能键和输入的数据计算、处理键盘扫描图2-4 系统流程图2.4 本章小结本章对本设计所需的主要芯片at89c51单片机和lm160l液晶显示屏的功能和使用方法做了详尽的介绍,并阐述了本工程运算系统的总体设计思路和最终实现的功能,给出了硬件实现的原理框图和软件编程的流程框图。东北石油大学本科生毕业设计(论文)第3章 系统设计3.1 硬件设计硬件系统是指构成微机系统5的实体和装置,通常由运算器、控制器、存储器、输入接口电路和输入设备、输出接口电路和输出设备等组成。单片机实质上是一个硬件的芯片,在实际应用中,通常很难直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统。本设计选用以at89c51单片机为主控单元。显示部分:采用lcd静态显示。按键部分,采用5*8键盘。硬件电路原理图如图3-1所示:图3-1 部分硬件电路原理图3.1.1 手动上电复位电路复位4是单片机的初始化操作,只需给at89c51的复位引脚rst加上大于2个机器周期(即24个时钟振荡周期)的高电平就可得单片机复位.复位时,pc初始化为0000h,使单片机从out单元开始执行程序。除了进入系统的正常初始化之外,由于程序运行出错或操作错误而使系统处于死锁状态11。为摆脱死锁状态,也需按复位键使得rst脚为高电平,使单片机重新启动。复位电路如图3-2所示图3-2 复位电路在系统中,有时会出现显示不正常。为了调试方便,需要设计一个复位电路。at89c51单片机复位电路共有上电复位、按键电平复位和按键脉冲复位。本系统的复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可由简单的rc电路构成,也可使用其它的相对复杂,但功能更完善的电路。本系统采用的电路工作原理是:上电瞬间,rc电路充电,reset引脚端出现正脉冲,只要reset保持10ms以上高电平,就能使单片机有效的复位。当时钟频率选用12mhz时,c取10uf,r取10k,上电自动复位电路由上电瞬间c与r构成充电电路,reset端的电位与电源vcc相同,随着充电电流的减少,reset的电位逐渐下降。rc时间常数越大,上电时reset端保持高电平的时间越长,这组参数足以保证复位操作。若复位电路失效,加电后cpu从一个随机的状态开始工作,系统就不能正常运行。按键的功能是按键复位,按下按键时rst为高电平,只要保持10ms以上的高电平,就可以使单片机复位。按键复位用在系统运行时的复位,使系统重新运行。3.1.2 内部时钟模式电路时钟是单片机的心脏,单片机各功能部件的运行都是以时钟频率为基准有条不紊地一拍一拍地工作的。因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统得稳定性。常用的时钟电路有两种方式:一种是内部时钟方式,另一种是外部时钟方式。单片机必须在时钟的驱动下才能工作。在单片机内部有一个时钟振荡电路,只要外界一个振荡源就能产生一定的时钟信号送到单片机内部的各个单元,决定单片机的工作速度。本系统使用的是内部时钟方式。一般选用石英晶体振荡器。此电路在加电大约延迟10ms后振荡器起振,在xtal2引脚产生幅度为3v左右的正弦波时钟信号,其振荡频率主要由石英晶振的频率确定。电路中两个电容的作用有两个:一是帮助振荡器起振;二是对振荡器的频率进行微调。时钟电路如图3-3所示图3-3 时钟电路当单片机工作于内部时钟模式的时候,只需在xtal1和xtal2引脚连接一个晶体振荡器或者陶瓷振荡器,并接两个电容后接地即可,在使用时对于电容的选择有一定的要求:当外接晶体振荡器的时候,电容值一般选择c1=c2=30+10pf或30-10pf;当外接陶瓷振荡器的时候,电容值一般选择c1=c2=40+10pf或40-10pf;3.1.3 键盘接口电路计算器输入数字和其他功能按键2要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的i/o 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用八条i/o 线作为行线,五条i/o 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为58个。这种行列式键盘结构能有效地提高单片机系统中i/o 口的利用率。矩阵键盘内部电路图如图3-4所示:图3-4 矩阵键盘内部电路图3.1.4 lcd液晶显示器电路本设计采用lcd液晶显示器来显示输出数据。通过d0-d7引脚向lcd写指令字或写数据以使lcd实现不同的功能或显示相应数据。如图3-5所示:图3-5 lcd液晶显示图3.1.5 运算模块(单片机控制)at89c51 单片机是在一块芯片中集成了cpu、ram、rom、定时器/计数器和多功能i/o等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(cpu)、数据存储器(ram)、程序存储器(rom/eprom)、并行i/o 口、串行口、定时器/计数器、中断系统及特殊功能寄存器(sfr)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件,可以很快地实现运算功能。3.2软件设计3.2.1汇编语言和c语言的特点及选择本设计是硬件电路和软件编程相结合的设计6方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和c语言。机硬件,程序可读性和可移植性比较差。而c语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达式类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,cpu的处理速度非常的快。用c语言来控制单片机无疑是一个理想的选择。所以在本设计中采用c语言编写软件程序。 3.2.2主程序void main()lcdinit(); tmod = 0x01;/定时器0,方式1 th0 = 0x3c;/50us,晶振频率为12m tl0 = 0x0b0; ea = 1;/允许溢出中断设置 et0 = 1; tr0 = 1; /开始计时displaycharat(15,2,0);while(1)selectkey=scankeyboard();if(selectkey!=0)if(selectkey!=)preprocess(selectkey);/按键预处理elseif(isequal=0)/ 如果已经有等号按下,则忽略operatekey();/按等号后结果处理if(isequal!=1)/当输出结果时不显示提示信息displaymessage();/显示相关信息 3.2.3 矩阵键盘程序设计键扫描程序的过程为:开始时,先扫描第一行,扫描完后,去抖动,对第一行按键赋值,然后释放。扫描第二行到第八行时重复以上操作,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。uchar scankeyboard() /键盘扫描程序 uchar tmp1,tmp2,key; lcd_key_p3=0xff;/扫描第一行 lcd_key_p2=0xfe; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); /键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe:key=0x80;break;/shift case 0xfd:key=0x81;break;/drg case 0xfb:key=0x82;break;/abs case 0xf7:key=0x83;break;/del case 0xef:key=0x84;break;/ac default: break; while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); lcd_key_p3=0xff;/扫描第二行 lcd_key_p2=0xfd; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); /键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe: if(shift=1) key=0x86;/m-shift=0;elsekey=0x85;/m+break; case 0xfd: if(shift=1)key=0x88;/mcshift=0;elsekey=0x87;/mrbreak; default:break; while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); lcd_key_p3=0xff;/扫描第四行 lcd_key_p2=0xf7; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); /键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe:key=(;break; /( case 0xfd:key=);break; /) case 0xfb: key=0x93;/sinbreak; case 0xf7: key=0x95;/cosbreak; default:break; while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); lcd_key_p3=0xff;/扫描第五行 lcd_key_p2=0xef; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); /键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe:key=7;break; /7 case 0xfd:key=8;break; /8 case 0xfb:key=9;break; /9 case 0xf7:key=;break; / case 0xef:key=0x99;break; /x-1 default:break; while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); lcd_key_p3=0xff; /扫描第六行 lcd_key_p2=0xdf; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); /键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe:key=4;break; / 4 case 0xfd:key=5;break; /5 case 0xfb:key=6;break; /6 case 0xf7:key=*;break; /* case 0xef:key=/;break; / default:break; while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); lcd_key_p3=0xff; /扫描第七行 lcd_key_p2=0xbf; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); /键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe:key=1;break; / 1 case 0xfd:key=2;break; / 2 case 0xfb:key=3;break; / 3 case 0xf7:key=+;break; / + case 0xef:key=-;break; / - default:break; while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); lcd_key_p3=0xff;/ 扫描第八行 lcd_key_p2=0x7f; tmp1=lcd_key_p3; tmp2=tmp1; if(tmp2!=0xff) delay1ms(); / 键抖动处理 tmp1=lcd_key_p3; if(tmp1=tmp2) switch(tmp2) case 0xfe:key=0;break; / 0 case 0xfd:key=.;break; / case 0xfb: if(shift=1)key=0x9b;/pishift=0;elsekey=0x9a;/expbreak; case 0xf7:key=0x9c;break;/ans case 0xef: if(shift=1)key=%;/%shift=0;elsekey=;/ =break; case 0xdf:break; case 0xbf:break; case 0x7f:break; /0xfd除号在液晶中的代码 while(tmp2!=0xff) /键释放处理 tmp2=lcd_key_p3; return(key); return(0);3.2.4 算术运算程序设计算术运算程序5的过程为:先存放数据的数据栈,节点bolani为运算符,则从数据栈datastact弹出数据进行计算,并将结果压入数据栈datastact中在计算中若除数为0,返回-1。然后进行取模、取负、正弦、余弦、开方等9运算,计算正确,返回。计算错误,返回-1。int compvalue(void)double datastackmax/2; /存放中间数据的数据栈int top=0,i; /数据栈datastact的栈顶 /数组bolan的下标for(i=0;bolani.oper!=#;i+)/节点bolani为数值,则如数据栈datastactif(bolani.flag=0)top+;datastacktop=bolani.value;continue;/*节点bolani为运算符,则从数据栈datastact弹出数据进行计算,并将结果压入数据栈datastact中在计算中若除数为,返回*/if(bolani.flag=1)switch(bolani.oper)case +:datastacktop-1=datastacktop-1+datastacktop;top-;break;case -:datastacktop-1=datastacktop-1-datastacktop;top-;break;case %:if(datastacktop!=0) datastacktop-1=fmod(datastacktop-1,datastacktop); top-; break;else / 取模x%y函数mod(x,y)中y为,返回return 5;case *: datastacktop-1=datastacktop-1*datastacktop;top-;break;case /:if(datastacktop!=0.0)datastacktop-1=datastacktop-1/datastacktop; top-; break;else /除数为0,返回

温馨提示

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

评论

0/150

提交评论