电子设计-基于STC89C52RC单片机的简易计算器设计_第1页
电子设计-基于STC89C52RC单片机的简易计算器设计_第2页
电子设计-基于STC89C52RC单片机的简易计算器设计_第3页
电子设计-基于STC89C52RC单片机的简易计算器设计_第4页
电子设计-基于STC89C52RC单片机的简易计算器设计_第5页
已阅读5页,还剩34页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、电子设计实验名称:基于STC89C52RC单片机的简易计算器设计姓 名:学 号:指导老师:目录、可行性研究 .3、设计方案简述 42.1、 功能介绍4基本功能 扩展功能2.2、 总体设计方案5总体设计思路 .5方案论证与比较 6系统组成 .7三、详细设计121. 各个模块设计 12输入模块:键盘扫描 13运算模块:单片机控制 14显示模块:LCD1602M示152. 硬件电路设计 .16硬件连接 163. 元件的介绍 17STC89C52I片机组成 17复位和复位电路 18LCD1602a 示器194. PCB设计以及结果显示22五、总结 24附录主要程序代码 25一、设可行性分析:1.2.1

2、 经济可行性由于只是实验性质的编程,所以在设计和开发都不需要过多的经费,但是系 统投入运行以后,硬件维护和损耗所造成的耗费是必须的,但是数目也不会很大。 所以经过初步分析,经济上基本上是可行的1.2.2 技术可行性在技术方面,因为都学习了 C语言,硬件课程设计等课程,对于开发语言c语言 也有一定的掌控能力,应该能够完成相应的任务。1.2.3 运行可行性该成果简单易操作,非常容易使用。1.2.4 法律可行性由于我们需要完成的功能相对简单,没有太多涉及到很专业方面的内容,更没有计划将系统利用到商业用途,所以不存在侵权或者版权纠纷方面的问题。1.2.5 结论该系统的软硬件都比较容易理解和实现,所以,

3、 具有实现一计算器的可行性。二、设计方案简述2.1 功能概述系统基本功能:( 1)由于设计的计算器要进行四则运算,为了得到较好的显示效果,经综合分析后,最后采用LCD显示数据和结果。(2)采用键盘输入方式,键盘包括数字键(09)、符号键(+、-、X、+)、 清除键(onc)和等号键(=),故只需要16个按键即可,设计中采用集成的计算 键盘。(3)在执行过程中,开机显示零,等待键入数值,当键入数字,通过LCEM示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次 键入数值,当再键入数值后将显示键入的数值,按等号就会在LCDt输出运算结果。(4)错误提示:当计算器执行过程

4、中有错误时,会在LCDt显示相应的提示,如: 当输入的数值或计算得到的结果大于计算器的表示范围时,计算器会在 LCDt提 示overflow ;当除数为0时,计算器会在LCDt提示error。扩展功能:加上括号的混合运算2.2总体设计思路本设计主要采用以下基本模块来实现:控制器模块,输入模块,输出模块和电源模块。通过对控制器进行编程。使其对输入模块的信号进行处理计算, 然后通过输 出模块反馈给使用者以计算结果。线路原理框图方案论证与比较控制部分的设计方案论证与选择根据设计要求,控制器主要用于红外信号的接收和辨认、控制步进电机的动作,控制显示步进电机的转速等。对于控制器的选择有以下三种方案。方案

5、一: 采用计算器专用芯片实现。用计算器专用芯片进行设计并编程实现。这种设计方案计算效率高、速度快、 而且成本也相对较低,是厂家做计算器的最佳方案。 但是本人对计算器专用芯片掌握的不够,还不足以实现设计计算器,所以这个方案不可去。方案二:采用FPGA(现场可编程门阵列)彳为系统的控制器。FPGA等所有器件集成到一块芯片上,体积小,节省空间,提高了稳定性;直接面向用户,具有极大的灵活性和通用性,使用方便,硬件测试和实现快捷,开发效率高,工作可靠性好。可以实现各种复杂的逻辑功能,规模大,密度高,采用并行的输入输出方式,系统处理速度高,适合作为大规模实时系统的控制核心。由 FPG秋部 编程实现计算器功

6、能,本设计对数据处理速度的要求不是很高, FPGA的高速处理的优势得不到充分的体现,由于其集成度高,使其成本偏高,同时由于芯片的引脚较多,实物电路板布线复杂,加重了电路设计和实际焊接的工作。并且 FPGA的价格相对较高,性价比太低。方案三、用单片机实现。由于单片机集成了运算器电路、控制电路、存储器、 中断系统、定时器 / 计数器以及输入/ 输出口电路等,所以用单片机设计控制电路省去了很多分立元器件。由于单片机是可编程芯片,并且它可以运用C语言 编写,对于一些复杂的计算功能,可以调用C语言库函数。使编写程序变得非常简单。 所以该课题用单片机实现,不仅功能易于实现,而且精确度高,稳定性好,抗干扰能

7、力强。并且由于其成本低、体积小、技术成熟和功耗小等优点,且技术比较成熟。性价比也相当高。更重要的是本人经过几年的学习,对单片机已有深刻的理解,并且可以灵活运用。综上所述,并通过各个方面综合比较为达到最佳效果。我们采用方案三利用单片机控制器。显示电路的设计方案论证与选择方案一: 数码管显示方案。数码管显示使用两个四位一体动态数码管显示方案,此设计电路如图所示。采用动态数码管显示,具有程序简单,对外界环境要求低, 易于维护,同时其精度比较高,精确可靠,操作简单。显示直观的特点。但只能显示数字和一些代码,不能显示汉字及一些常用的符号,且硬件设计比较复杂 。口口卜曲¥口1LCD160混示器所

8、谓1602是指显示的内容为16*2,即可以显示两行,每行16个字符。目前字符液 品绝大多数是基于 HD4478儆晶芯片的,控制原理是完全相同的,因此基于 HD447801的控制程序可以很方便地应用于大部分的字符型液晶。字符型LCD1602S常有14条引脚线或16条引脚线的LCD多出来的2条线是背光电 源线VCC(15却)和地线GND(16|1),其控制原理与14脚的LCDS全一样,引脚定义 如下表所小:弓1脚片引时在电平输入,珀比作用1电界地ZUcc电瓶*7»yUev期比典安电压4RS/I铺人5口八«/1得人-/L±(J与入担令 驻懿抠 ,-从irn溯取情*E-1

9、.1 4!导8人但ss健通,»!晦期憎息* G(下月墙才用亍指/7DOU0/1物人,特1出数据总最怅位JHOHlw/1帝人,怖山撤据总线上5。,9DK1?*/I褊入,褊比1 /DU3/I摘人/看出收厚的帔11口目由输入,输出触据总纹r*hM1313 Kl 丹植人,瑜出粗据总钱“g、DIIAtt/t就据,总线1UOIB7«/ 1i福入,箱出数据鼻玷;Ltm最当位15Am1件K瑞加 ek九电他由祗HD44780 内置了 DDRAM、CGROM 和 CGRAM。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共 80个字节, 其地址和屏幕的对应关系如下表:显示位置|123

10、567* ! I -I-4。地址第-T0DH92 H伽驰H85 H06H« » H- « I «27H第二行“0H42H43H岫H46 H67HHD44780的指令集1.清屏指令指令助前指令箸码即 /造RSR/WDB7DB6DB1IDB3-1DD2DD1DB0清屏C060fl11-54|功能:1清除液晶显示器,即将 DDRAM的内容全部填入"空白"的ASCII码 20H;2光标归位,即将光标撤回液晶显示屏的左上方 3将地址计数器(AC)的值设为002.光标归位指令揖令功能指令案用/nsI K/«987I .DB6DBSi1:

11、口岫 DBIDB?DB1080光标归位r i fl*°81 0口11.M功能:1把光标撤回到显示器的左上方;2把地址计数器(AC)的值设置为0;3保持DDRAM的内容不变3.进入模式设置指令I指令功靛指令编管ASiR/UDB70“DB2DR1进入模式设置0期°°011/0S40功能:设定每次定入1位数据后光标的移位方向,并且设定每次写入的一个字符 是否移动。参数设定的情况如下所示:位名I/DS设置0=写入新数据后光标左移1=写入新数据后光标右移0=写入新数据后显示屏不移动1=写入新数据后显示屏整体右移1个字4 .显示开关控制指令指令硼指令编用I® /1!

12、£RAJDR,OB 6MSDBUMlDHCI显示开美控制°*0g01.,一 DC U9功能:控制显示器开下:/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如位名设置D0=显示功能关1 =显示功能开C0=无光标1 =有光标B0=光标闪烁1 =光标/、闪烁5 .设定显示屏或光标移动方向指令指令编树RSR/WDH7DBDBS00DH2DB19000H 1 a1s/cR/LX1指-孑向能/115设定显示屏或功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下:S/C0011R/L0101设定情况光标左移1格,且AC值减1光标右移1格,且AC值加1显示器上字符全部左移一格,

13、但光标不动显示器上字符全部右移一格,但光标不动6 .功能设定指令J指令功能.)指令编翦1确同/US ;DB7DB4B5DB4帕30»2DB1功能设定9gH910LNfXX8功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下:位名设置DL0二数据总线为4位1=数据总线为8位N0二显示1行1=显示2行F0=57点阵/每字符 X1=5 10点阵/每守符7.设定CGRAM地址指令r1.指令功能一指令编翻1时得 /U5RSR/UDti/DB6DBSE>EJ4DH30B2即DR修设定配鼬忖 地址Q01|CGNRH的地址(曲j功能:设定下一个要存入数据的 CGRAM的地址8.设定D

14、DRAM地址指令1指令功能一指令编斛j嚅 加5RS岫5DBS 0B2帆 IMU设定 地址961HR白鄙)地址仃位)青用功能:设定下一个要存入数据的 CGRAM的地址。(注意这里我们送地址的时候应该是 0x80+Address ,这也是前面说到写地址命令 的时候要加上0x80的原因)9.读取忙信号或AC地址指令指令功能指令编码执行 时筒1内R/W岫6M50B3即港里忙碌信号 或眦地址FE起内容3位年1,功能:1读取忙碌信号BF的内容,BF=1表示液晶显示器忙,暂时无法接收 单片机送来的数据或指令;当BF=0时,液晶显示器可以接收单片机送来的数据或指令 2读取地址计数器(AC)的内容。10 .数据

15、写入DDRAM 或CGRAM 指令一览指令功能R$065即P82步H1DBS指令编刊箫/U5功能:1将字符码写入DDRAM ,以使液晶显示屏显示出相对应的字符 2将使用者自己设计的图形存入CGRAM o11 .从CGRAM或DDRAM读出数据的指令一览指令功能指令编码时向R5par口聃0B6D日4DB30B;PB1pan从观相阐臭出 数耨11要读出的数据uh功能:读取 DDRAM 或CGRAM中的内容。基本操作时序:读状态 输入:RS=L, RW=H , E=H输出:DB0DB7=状态字写指令 输入:RS=L, RW=L , E=下降沿脉冲,DB0DB7=指令码输出:无读数据 输入:RS=H

16、, RW=H , E=H输出:DB0DB7二数据写数据 输入:RS=H, RW=L , E=下降沿脉冲,DB0DB7=数据输出:无2.2.2.3、键盘设计方案与选择方案一:独立键盘。独立键盘为一端接地,另一端接I/O 口,并且要接上拉 电阻。这种键盘的硬件都很容易实现,但每一个按键就要用一个I/O 口,适合本 次设计。方案二:通过PS2协义,用键盘同单片机相接,从而实现单片机与键盘通信。其电路如图所示。现在PC机广泛采用的PS/2接口为miniDIN 6引脚的连接器。1数据线(DATA;一未用;3电源地(GND; 4电源(+5 V); 5一时钟(CLK; 6一未用。由此图可知,使用键盘硬件结构

17、比较简单,但键盘的体积太大,所以此系统不采用此方案。 方案三:自制编码键盘。 编码键盘的电路如图所示,这种键盘有编程简单,占用资源少,但其硬件比较复杂,要用很多的二极管,不是很理想O方案四:4*4矩阵式键盘。其电路图如图所示,这种键盘的硬件简单,使用 的I/O 口也不多,而且这种键盘的编程方法已很成熟。本次设计也可以采用这种 矩阵式键盘。其电路图如图主体设计部分:(1)、系统模块图:(2)、算术运算程序流程图:(3)、系统总流程图:NLCD显示叵厄 El(4)、硬件设计:(一)、总体硬件设计:本设计选用AT89C51单片机为主控单元; 显示部分:采用LCDe态显示;按键部分:采用4*4键盘;用

18、MM74C922 4*4键盘扫描IC,读取输入的键值。总体设计效果如下图:当VCC±电时,C充电,在10K电阻上出现电压,使得单片机复位;几个毫秒后,C充满,10K电阻上电流降为0,电压也为0,使得单片机进入工作状态工作期间,按下S, C放电。S松手,C又充电,在10K电阻上出现电压,使得单片机复位。几个毫秒后,单片机进入工作状态FtS (二)、单片机接口电路说明:1、手动上电复位电路:l-et iFT llaiik ' i2、内部时钟模式电路:XTALNXTAL1GMO当单片机工作于内部时钟模式的时候, 只需在XTAL*口 XTAL31脚连接一个晶体振荡器或者陶瓷振荡器,并

19、接两个电容后接地即可,在使用时对于电容的选择 有一定的要求:当外接晶体振荡器的时候,电容值一般选择 C1=C2=30+10pF 30-10pF;当外接陶瓷振荡器的时候,电容值一般选择 C1=C2=40+10pF 40-10pF;3、STC89C52r绍:STC89C52是一种低功耗、高性能 CMOS8位微控制器,具有8K在系统可编程Flash存储器。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash ,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。具有以下标准功能:8k字节Flash , 512 字节 RAM , 32 位 I/O 口线, 看门狗电路, 内置

20、4KB EEPROM ,MAX810复位电路,三个16位定时器/计数器, 一个6向量2级中断结构, 全双工串行口。另外STC89X52 可降至0Hz静态逻辑操作,支持 2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。 掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。运作频率35Mhz , 6T/12T可选。和atmel的对比STC89C52RC 单片机:8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间;可直接使用串口下载;AT89S52单片机:8K字节程序存储空

21、间;256字节数据存储空间;没有内带EEPROM存储空间;iT2叫匚匚.40 VCC(T2EX:iP1J C3g PC C tAEXhP1.2C3泊 PC MAP)P1/3 C437 P0 2 (AD2)P1.4D53c PC 3 «AD3i(MOSI)P1.5C63f PC4 (AC4i(MisojPtn734 PC ?(SCK)P17ES33 PC CRSTEQ32n PC 7 am(RXD) P3.0 Cr31 Ea.VPP(TXD) P3.1 匚3D 士三不3G(FITt) P3.2 Li22QJ旌八rNTT;P3,3C1328 P2.7 (A15)iTC) P3.4 匚14

22、27 P2C (A14)1520 F2 5(A13)年muP-IJ= PM CM3)P37 匚24 F2 3 (A11 :XTAL2C23 P2.2 (Al。)*:TAL* C P2.1 (M)GF JD 匚2D21 P2 C (AB:4、LCD160介绍:1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VDD接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对 比度最高(对比度过高时会 产生 鬼影”,使用时可以通过一个10K的电位器调 整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄 存器。第5脚:RW为

23、读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端。 第714脚:D0D7为8位双向数据 端。第1516脚:空脚或背灯电源。15脚背光正极,16脚背光负极602LCD的特性n+5V电压,对比度可调n内含复位电路n提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能n有80字节显示数据存储器DDRAM n内建有192个5X7点阵的字型的字符发生器 CGROM n8个 可由用户自定义的5X7的字符发生器CGRAM读的时候,先读左边那列,再读上 面那行,如:感叹号!的 ASCII为0x21 ,字母B的ASCII为0x42 (前

24、面加0x 表小十六进制)1602通过D0D7的8位数据端传输数据和指令。显示模式设置:(初始化)0011 0000 0x38设置16X2显示,5X7点阵,8位数据接口;显示开关及光标设置:(初始化)0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效)0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1),N=0(读或写一个字符后地址指针减1 &光标减1),S=1且N=1 (当写一个字符后,整屏显示左移)s=0当写一个字符后,整屏显示不移动数据指针设置:数据首地址为80H,所以数据地址为80H+地址码(0-27H , 40-67H)其他

25、设置:01H(显示清屏,数据指针=0,所有显示=0); 02H(显示回车,数据指针=0)。(三)、键盘接口电路:计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多 情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O线 作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一 个按键。这样键盘上按键的个数就为4X4个。这种行列式键盘结构能有效地提高 单片机系统中I/O 口的利用率。矩阵键盘的工作原理:计算器的键盘布局如图1所示:一般有16个键组成,在单片机中正好可以用 一个

26、P口实现16个按键功能,这种形式在单片机系统中也最常用。图1矩阵键盘布局图矩阵键盘内部电路图如图2所示:£, 1 ana(四)、LCD显示模块:本设计采用LCD液晶显示器来显示输出数据。通过 D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。 , LCD1 - LM)44L'': .MM-3同回-,Jl/;,.,. .* l.-ukjGj牌 一r-az1 Effl七=*_和多tnu*RO M尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能, 高 效率,以及高可靠性!因此我们采用单片机作为计算器的主要功能部件, 可以很 快地

27、实现运算功能。PC般计:1、实验现象、数据记录 数码显示及运算最多九位显示及运算当超出时溢出显示五、总结在实验中遇到了这样那样的问题,软件的编辑中使得c语言的应用更加熟练; 在硬件的实现中又出现了软件和硬件不统一的问题,本实验我做了两次,第 一次的时候 STC89C52单片机的P2 口的P2.0-P2.7分另对应连接至U LCD1602 的D7D0 口,这就使得在写程序的时候需要把所有读写的数据以及地址都按位 取反,改写程序比较复杂,最终调试失败,又改变了硬件电路。最终成功;本次设计不管在软件,或是在硬件方面都让我受益匪浅,让我所学的知识得 以应用到实践,经过这次创新性实验,也令我看到了很多的

28、不足,在实验中的一 些程序不能够及时编辑正确,需要很长时间的设计。硬件中我对单片机实验板上 的很多硬件不是很清楚,使得在下载程序后,又进行了很长时间的调整。六、主要程序代码Key.C#include<reg52.h>#define uchar unsigned char#define uint unsigned int#define KEYDATA P1uchar key;uchar dis_buff;void Delay1(uint x)uint i,j;for(i=0;i<x;i+)for(j=0;j<112;j+);uchar KeyScan(void) ucha

29、r temp=0;key=0;KEYDATA=0xf0;Delay1(1);temp=KEYDATA;temp=temp&0xf0;temp=(temp>>4)|0xf0);if(temp=1)key=0;else if(temp=2)key=1;else if(temp=4)key=2;else if(temp=8)key=3;else key=16;KEYDATA=0x0f;Delay1(1);temp=KEYDATA;temp=temp&0x0f;temp=(temp|0xf0);if(temp=1)key+=12;else if(temp=2)key+=8;

30、else if(temp=4)key+=4;else if(temp=8)key+=0;else key=16;if(key<16)dis_buff=key;return dis_buff;uchar KeyDown(void) uchar keyFlag;uchar temp;KEYDATA=0xf0;if(KEYDATA!=0xf0) temp=KEYDA TA;Delay1(200);if(temp=KEYDATA)keyFlag=1;elsekeyFlag=0; elsekeyFlag=0;return keyFlag; 1602.C#include<reg52.h>

31、#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit rs=P2A5;sbit rw=P2A6;sbit e=P2A7;sbit bf=P0A7;void delay1ms(void) uchar i,j;for(i=0;i<10;i+)for(j=0;j<33;j+);void delay(uchar n) uchar i;for(i=0;i<n;i+)delay1ms(); uchar BusyTest(void) bit result1;rs=0;rw=1;e=

32、1;_nop_();_nop_();_nop_();_nop_();result1=bf;e=0;return result1;void WriteCommand(uchar command) while(BusyTest()=1);rs=0;rw=0;e=0;_nop_();_nop_();P0=command;_nop_();e=1;_nop_();e=0;void WriteAddress(uchar addr) WriteCommand(addr|0x80); void WriteData(uchar d) while(BusyTest()=1);rs=1;rw=0;e=0;_nop_

33、();P0=d;e=1;_nop_();e=0;void LcdInit(void) delay(15);WriteCommand(0x38);delay(5);WriteCommand(0x38);delay(5);WriteCommand(0x38);delay(5);WriteCommand(0x06);delay(5);WriteCommand(0x01);delay(5);WriteCommand(0x0c);delay(5);WriteCommand(0x0e);delay(5);Main.c#include<reg52.h>#define uchar unsigned

34、 char#define uint unsigned intuchar position=0x00;uchar string30; /存放输入的表达式uchar code warn="ERROR"uchar code num='q','7','4','1','0','8','5','2','=','9','6','3','s','k','c

35、9;,'j'uchar Curtime7=50,15,13,7,5,1,8;uchar opr15; / 操作符int opt15;/操作数uchar iopt,iopr; / 记录操作数和操作符数组的下标bit flag=0;/标记是否输入“(”操作符 循环嵌套long result=0;uchar pp; /记录表达式的字符位置bit equal=0; /标记是否开始计算int op=0;/用来记录合成的数值bit normal=1;/ 用来记录是否正常,正常就进行运算,否则停止运算uchar operate;用来标记操作数和操作符的堆栈bit equalFlag=0;/用

36、来标记等号是否按下,按下之后为 1相当于清屏uchar shift=0; /shift 键sbit m1=P3A7;sbit m2=P3A6;sbit m3=P3A5; /用来标识shift 键是否按下,按下则灭uchar pzp=0;/用来保存修改状态下等号的位置uchar WriteAddress(uchar addr);uchar WriteData(uchar d);uchar WriteCommand(uchar command);void LcdInit();uchar KeyDown(void);uchar KeyScan(void);void Init(void) int i;

37、position=0x00;for(i=0;i<30;i+)stringi='a'flag=0;pp=0;equal=0;normal=1;shift=0;opr0=0;iopt=0;iopr=0;pzp=0;op=0;void DisplayNumble(long numble)/显示结果,把结果转换为字符串形式在输出 uchar numx8='a','a','a','a','a','a','a','a'uchar i=1,j=0x42;Lcd

38、Init();WriteCommand(0x0c);/ 关光标显示WriteAddress(0x40);WriteData('=');if(numble<0) WriteAddress(0x41);WriteData('-');numble=0-numble; if(numble=0)WriteAddress(0x42);WriteData(0+0x30); else while(numble>0) numxi=numble%10;i+;numble=numble/10; i=i-1;while(numxi!='a') WriteAd

39、dress(j+);WriteData(numxi+0x30);i-;void DisplayError(void)/显示错误uchar i;i=0;normal=0;while(warni!='0') WriteAddress(0x40+i);WriteData(warni);i+;void Calculate(void)/计算int m;switch(opriopr%10)case 0:flag=1;break;case 1:m=opt-iopt+opt-iopt;optiopt+=m; break;case 2:m=optiopt-2-optiopt-1;iopt=iop

40、t-2;optiopt+=m;break;case 3:m=opt-iopt*opt-iopt;optiopt+=m;break;case 4:m=optiopt-2/optiopt-1;if(optiopt-1=0)DisplayError();elseiopt=iopt-2;optiopt+=m;break;void InsertOpr(uchar operate)reentrantif(operate/10>opriopr/10|operate=10)opr+iopr=operate;else if(iopr!=0) Calculate(); if(operate=15)iopr-

41、;if(flag=0) InsertOpr(operate); elseflag=0;/用来使递归结束elseif(iopr=0)iopr+=1;opriopr=operate;uchar KeyChar(void)uchar ch;uchar n=KeyScan();if(shift!=2)switch(n)case 0:if(shift=0)ch='q'/q 表示清除else ch='w'break; /w 表示修改case 12:shift=(shift+1)%3;ch='m'break;case 13:if(shift=0)ch='

42、;('else ch=')'break;case 14:if(shift=0)ch='*'else ch='/'break;case 15:if(shift=0)ch='+'else ch='-'break;default:ch=numn;break;else ch='t'return ch;void WriteNum(uchar num,uchar add) /显示数字 WriteAddress(add);WriteData(num/10+0x30);WriteAddress(add+1)

43、;WriteData(num%10+0x30);void Display()WriteNum(Curtime6,0x00);WriteAddress(0x02);WriteData('-');WriteNum(Curtime4,0x03);WriteAddress(0x05);WriteData('-');WriteNum(Curtime3,0x06);WriteAddress(0x09);WriteData('D');WriteAddress(0x0a);WriteData('a');WriteAddress(0x0b);Wri

44、teData('y');WriteNum(Curtime5,0x0d);WriteNum(Curtime2,0x44);WriteAddress(0x46);WriteData(':');WriteNum(Curtime1,0x47);WriteAddress(0x49);WriteData(':');WriteNum(Curtime0,0x4a);void main(void)Init();LcdInit();while(1)switch(shift)case 0:m1=1;m2=0;m3=0;break;case 1:m1=0;m2=1;m3

45、=0;break;case 2:m1=0;m2=0;m3=1;break;if(shift!=2) if(KeyDown()=1)uchar ch;ch=KeyChar();if(ch!='t')if(ch!='=')/为按下键记录表达式 if(equalFlag=1)/进行过运算之后,再运算则初始化Init();LcdInit();equalFlag=0;if(ch!='m'&&ch!='q'&&ch!='w')/m 模式选择、q 清除键 ,w 修改键stringpp+=ch;if

46、(pp-pzp=1)pzp=pp;WriteAddress(position);position+=1;if(position=15)WriteCommand(0x07);WriteData(stringpp-1);else/实现清除功能if(ch='q')pp-;position-;WriteAddress(position);WriteData(0x20);WriteAddress(position);stringpp='a'pzp=pp;if(ch='w')/实现修改功能pp-;position-;WriteAddress(position);else stringpzp='='pp=0;while(stringpp!='a') if('0'<=stringpp&&stringpp<='9')op=op*1

温馨提示

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

最新文档

评论

0/150

提交评论