




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...wd......wd......wd...微机原理课程设计设计课题基于51单片机的计算器设计学院姓名学号专业班级指导教师设计时间南华大学【摘要】当今社会,随着人们物质生活的不断提高,电子产品已经走进了家家户户,无论是生活或学习,还是娱乐和消遣几乎样样都离不开电子产品,大型复杂的计算能力是人脑所不能胜任的,而且人脑比拟容易出错。计算器作为一种快速通用的计算工具方便了用户的使用。计算器可谓是我们最亲密的电子伙伴之一。本设计着重在于分析计算器设计开发过程中的环节和步骤,并从实践经历出发对计算器设计做了详细的分析和研究。本设计是以STC89C52单片机为核心的计算器模拟系统设计,输入采用4×4矩阵键盘再加上4个独立按键,可以进展加、减、乘、除7位带符号数字运算,同时支持括号的嵌套使用级浮点数的运算,并在LCD1602上显示操作过程。本次设计注重设计方法及流程,首先根据原理设计电路,利用keil编程,借助实验开发平台进展仿真实验,进而利用altiumdesigner制作PCB,最后到焊接元器件,直至调试成功。在设计的同时,特别注重keil软件和altiumdesigner软件的使用方法和技巧以及常用的LCD显示器和矩阵键盘的设计和使用方法。【关键词】计算器,STC89C52,矩阵键盘,1602液晶目录1系统方案设计-5-1.1设计目的及要求-5-1.1.1设计目的-5-1.1.2设计要求-5-1.2方案论证及选择-5-1.2.1方案一采用FPGA控制-6-1.2.2方案二采用STC89C52-6-1.2.3方案比拟及选择-6-2单元电路设计-7-2.1工作原理-7-2.2硬件电路设计-8-2.2.1单片机电路设计-8-2.2.2键盘模块电路-9-2.2.3蜂鸣器提示电路-9-2.2.4液晶显示电路-10-2.3软件设计-11-2.3.1键盘扫描-11-2.3.2表达式的处理-11-2.4altiumdesigner原理图设计及PCB制作-13-2.4.1原理图设计-13-2.4.2PCB制作-14-2.4.3设计结果-15-3系统测试-15-3.1整数运算-15-3.2浮点数运算-16-3.3输入出错的情况-17-4结论与心得体会-17-5参考文献-18-附录1元器件清单-18-附录2程序清单-19-1系统方案设计1.1设计目的及要求1.1.1设计目的通过本次课题设计,应用《单片机应用根基》、《数据构造》等所学相关知识及查阅资料,完成实用计算器的设计,以到达理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。通过本次设计的训练,可以使我在根本思路和根本方法上对基于MCS-51单片机的嵌入式系统设计有一个比拟感性的认识,并具备一定程度的设计能力。1.1.2设计要求在本次课程设计中,主要完成如下方面的设计要求:1、掌握MCS-51系列某种产品〔例如8051〕的最小电路及外围扩展电路的设计方法;2、计算器能实现根本的加、减、乘、除四则运算;3、支持浮点数运算;4、支持括号运算,允许括号的多层正确嵌套;5、较为友好的界面显示,对输入实时显示,对计算结果输出显示;6、能够具备比拟完善的报错系统1.2方案论证及选择基于设计要求,笨设计考虑了两种设计方案,他们均可以实现计算器的功能,但基于设计目的及微控制器的广泛运用,比拟两种方案的优劣,最终选择基于51单片机的计算器设计。1.2.1方案一采用FPGA控制FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。但是而基于SRAM编程的FPGA,其编程信息需存放在外部存储器上,需外部存储器芯片,且使用方法复杂,保密性差,而其对于一个简单的计算器而言,实用FPGA有点大材小用,本钱太高。1.2.2方案二采用STC89C52单片机是单片微型机的简称,故又称为微控制器MCU〔MicroControlUnit〕。通常由单块集成电路芯片组成,内部包含有计算机的根本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格廉价等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。1.2.3方案比拟及选择通过以上两种方案论证和比拟,从设计的实用性,方便性和本钱出发,选择了以STC89C52单片机作为中央处理单元进展计算器的设计,这样设计能够实现对六位浮点数的加减和三位浮点数的乘除运算。2单元电路设计2.1工作原理利用矩阵键盘进展按键的输入,通过对矩阵键盘的扫描,获取用户的输入,并实时的显示在1602液晶上,每次获取到输入时,根据软件设计的相应方法对输入进展处理、运算,输入完毕后〔以“=“为标志〕,将最终的运算结果输出的液晶上。系统组成及整体框图如图2.1所示。LCD液晶显示屏模块LCD液晶显示屏模块STC89C52主控制模块〔处理、运算〕键盘模块键盘模块电源电源图2.1系统组成及总体框图2.2硬件电路设计2.2.1单片机电路设计为使单片机正常工作,除电源供电局部外,还需提供晶振电路和复位电路。具体电路如下:图2.2单片机工作电路由图2.2可知,9脚外接的是按键复位电路,18,19脚外接的是晶振电路,这样,就构成了单片机正常工作的必备电路。同时,为使P0口正常工作,并增加其带负载能力,P0口需接了上拉电阻。图中EA为外部访问允许,欲使CPU仅访问外部程序存储器〔地址为0000H-FFFFH〕,EA端必须保持低电平〔接地〕。在这里,STC89C52单片机8k的程序存储器已经够本设计使用,无需外部程序储存器,故EA直接接高电平。2.2.2键盘模块电路图2.3是键盘电路,共20个按键,用来实现人机交互和运算表达式的输入,S0~S3、S5~S8、S10~S13、S15~S18共16个按键组成一组4*4的矩阵键盘,行线第一行到第四行分别接在P3.0~P3.3口,列线第一列到第四列分别接在P3.4~P3.7口,这样P3口就完成了对4*4的矩阵键盘的接线。同时,注意到按键数量还达不到要求,故增加了四个独立按键S4,S9,S14,S19。他们依次接在P20~P23口。可见,矩阵键盘相对来讲更节省I/O口,但本着学习的目的,加之本设计并不需要太多的I/O口,故为充分学习和利用资源,在这里也设计了4个这样的独立按键。图2.3键盘模块电路2.2.3蜂鸣器提示电路蜂鸣器主要用于按键时发出声音,提示当前的按键操作,电路如图2.5所示,三极管主要用于驱动蜂鸣器,因为单片机I/O的驱动能力有限。同时单片机I/O口还在这里还起到开关作用,为‘0’时翻开蜂鸣器通道,使蜂鸣器发声。图2.4蜂鸣器提示电路2.2.4液晶显示电路LCD也是本次设计的重要组成局部之一,主要用于显示输入和输出。电路如图2.5所示,LCD数据端与单片机P0口相连,控制端与P24~P26连接,电位器用于调节比照度。图2.5LCD显示电路至此,整个电容测量仪的硬件设计局部就根本设计完成,接下来,需要的就是与之相匹配的软件支持了。2.3软件设计软件编程平台选择最常用的keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的C语言编程。在编程中,将该程序分为四个模块:延时模块、1602显示模块、用于处理计算表达式的对战模块及主函数模块。采用模块化设计,方便调试与理解。具体程序见附录二。在这里重点介绍软件核心的表达式处理程序算法。2.3.1键盘扫描独立键盘很好实现,只需不停的检测即可,出现低电平即出现按键,在经过一定的延时消抖,再确认判断即可。矩阵键盘扫描程序,首先读出P3的低四位,然后读出P3口的高四位。然后确定键值并显示缓存,最终将按键的值通过一个预先定义好的数组转换为相应的ASCII码值送给LCD显示和与表达式相应的堆栈进展处理,读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进展两次读键。第一次所有行线均输出高电平,从P3口的值读入键盘信息〔行信息〕;第二次所有列线均输出高电平,从P3口的值读入键盘信息〔列信息〕。2.3.2表达式的处理表达式包含加、减、乘、除、括号等,必须按照相应的优先级运算,才可能得出正确的结果。在这儿采用栈构造,可以有效的进展表达式的处理。栈构造具有“后进先出〞的固有属性,借助这个属性我们可以随时对刚输入的元素进展操作,从而实现边输入边计算。为了实现算符优先算法。可以使用两个工作栈。一个称为OPTR,用以存放运算符,另一个称做OPND,用以存放操作数或运算结果。1.首先置操作数栈为空栈,表达式起始符〞#〞为运算符栈的栈底元素;2.依次读入表达式,假设是操作符即进OPND栈,假设是运算符则和OPTR栈的栈顶运算符比拟优先权后作相应的操作,直至整个表达式求值完毕〔即OPTR栈的栈顶元素和当前读入的字符均为〞#〞〕。在这里,相应的处理指的是,如果当前符号的优先级比栈顶优先级低,则将该符号继续压入堆栈,不做其它操作;如果当前符号的优先级比栈顶优先级高,则依次取出操作数栈的栈顶两个数据和符号栈的栈顶符号进展这两个数的运算,运算结果数据再压入操作数栈中。假设优先级相等,则弹出符号栈栈顶符号。算符间的优先关系如下〔‘#‘表示开场和完毕〕:+-*/()#+><<<<>>->><<<>>*>>>><>>/>>>><>>(<<<<<=)>>>>>>#<<<<<=表2.1运算符优先级表2.4altiumdesigner原理图设计及PCB制作2.4.1原理图设计图2.6原理图设计〔1〕——单片机局部图2.7原理图设计(2)——键盘、蜂鸣器局部PCB制作图2.8PCB设计〔1〕——单片机局部图2.9原理图设计〔2〕——键盘、蜂鸣器局部注:在此并没有布双层板,红色的线仅仅只是为了标志出跳线或者本质上实物已经连接上了。设计结果图2.10设计结果实物图如以下图,各个按键功能如图中文字说明,电源为5V直流电源。3系统测试测试主要测试其运算是否正确,及检错能力。3.1整数运算在此以整数运算为例,介绍计算器的使用方法即流程。首先翻开电源,看到LCD翻开显示,说明运行正常,接着,输入表达式:12*〔56+23〕*2,其结果本身应为1896。输入完毕后,点“=〞按键,即可在第二行显示出运算结果,由图可见运算完全正确。在使用时,可以通过声音开关按钮控制按键音的翻开和关闭,在LCD上也有显示,如果再第二行第一个位置没有显示,则没有翻开声音,可以通过按钮翻开。假设有显示,则声音已经翻开,可以通过按钮关闭声音。如图3.1所示,此时已经翻开声音。图3.1整数运算3.2浮点数运算图3.2浮点数运算由图可以看出,可以进展浮点数运算,还可以从第二行第一个字符,蜂鸣器处于关闭状态。3.3输入出错的情况输入一个错误的表达式,如图3.3所示。图3.3输入错误的情况下再按“=〞号,将会出现出错画面。如图3.4所示。图3.4输入错误的显示由以上测试可知,整个设计运行正常,能够正确的进展运算和出错提示。由此可得,整个设计是成功的。4结论与心得体会总之,通过一系列仿真和设计,基于单片机的计算器设计还是比拟成功的做出来了。一路下来还是比拟坎坷,从原理到实物,从调试到调试成功,遇到了很多问题,特别是在软件编程时,开场以为既然单片机具有数据处理与运算的能力,那么用它来做一个计算器应该很简单了,可是,后面实际操作才知道,当计算表达式时,优先级问题非常重要,一开场用了很多if语句来实现,程序繁琐复杂,且效果不是很好,很容易出错,最后通过查阅相关资料,了解到利用数据构造中栈的思想来解决这一问题就很方便。但在实际写程序时也遇到了很多问题,但最终还是抑制难关,将整个软件比拟完善的实现了。在硬件的原理图及PCB设计中,也遇到了很多问题,先做模块后做主板,导致我后面的布线就很麻烦,这也教会了我一些经历,在PCB分模块设计中,模块与模块之间的连接也是必须考虑到的,从左端连接还是从右端连接,都直接影响到整个PCB板的设计。总之,通过这次设计也收获了很多,知识层面上,学得了很多新知识,解决问题的新方法,思考问题的新方向。实践方面,提高了动手能力,提高了解决实际问题的能力等等。在思想上,更加明白的坚持不懈的重要性,学习探索的重要性,实践动手的重要性。5参考文献【1】《单片机根基》第三版李广弟朱月秀冷祖祁编著北京航天大学出版社,2007【2】《数据构造》严蔚敏编著清华大学出版社附录1元器件清单〔1〕晶振12M一个〔2〕stc89c52芯片一片〔3〕30pf2个;10uf1个;〔4〕40脚活动底座一个〔5〕LCD液晶一个〔6〕按键21个〔7〕发光二极管1个〔8〕9引脚排阻1个〔9〕680Ω1个;10k2个;1k1个;10k滑动变阻器1个;10Ω1个;〔10〕开关1个〔11〕5V有源蜂鸣器1个〔12〕三极管S8550一个〔13〕排针假设干,杜邦线假设干附录2程序清单分9个文件:delay.h,delay.c,1602.c,1602.h,stack.h,stack.c,keyboard.h,keyboard.c,main.c(a)delay.h程序清单:#ifndef__delay_h__#define__delay_h__voiddelay_us(uintcnt);voiddelay_ms(uintcnt);#endif(b)delay.c程序清单:#include"delay.h"voiddelay_us(unsignedintcnt){while(--cnt);}voiddelay_ms(unsignedintcnt){unsignedinti,j;for(i=0;i<cnt;i++){for(j=0;j<65;j++){delay_us(1);}}}(c)1602.h程序清单:#ifndef__LCD1602_H#define__LCD1602_HvoidLCD_write_com(unsignedcharcom);voidLCD_write_Data(unsignedcharData);voidLCD_clear(void);voidLCD_init(void);voidLCD_write_char(unsignedcharx,unsignedchary,unsignedcharData);voidLCD_write_str(unsignedcharx,unsignedchary,unsignedchar*s);#endif(d)1602.c程序清单:#include"includes.h"sbitRS=P2^4;//定义端口数据命令选择H/LsbitRW=P2^5; //读写H/LsbitEN=P2^6; //使能externunsignedcharsk;#defineRS_CLRRS=0#defineRS_SETRS=1#defineRW_CLRRW=0#defineRW_SETRW=1#defineEN_CLREN=0#defineEN_SETEN=1/******************************************************************//*写入命令函数*//******************************************************************/voidLCD_write_com(unsignedcharcom){ RS_CLR; RW_CLR; EN_SET; P0=com; delay_us(5); EN_CLR;}/******************************************************************//*写入数据函数*//******************************************************************/voidLCD_write_Data(unsignedcharData){ RS_SET; RW_CLR; EN_SET; P0=Data; delay_us(5); EN_CLR;}/******************************************************************//*清屏函数*//******************************************************************/voidLCD_clear(void){ LCD_write_com(0x01); delay_ms(5); if(sk==1) { LCD_write_char(0,1,0xde); LCD_write_com(0x80); } else { LCD_write_char(0,1,0x20); LCD_write_com(0x80); }}/******************************************************************//*写入字符串函数*//******************************************************************/voidLCD_write_str(unsignedcharx,unsignedchary,unsignedchar*s){ unsignedchari,j; if(y==0) { LCD_write_com(0x80+x); } else { LCD_write_com(0xC0+x); } for(i=4;i>0;i--) { if(s[14]=='0'||s[14]=='.') { for(j=14;j>1;j--) { s[j]=s[j-1]; } } elsebreak; } while(*s) { LCD_write_Data(*s); s++; }}/******************************************************************//*写入字节函数*//******************************************************************/voidLCD_write_char(unsignedcharx,unsignedchary,unsignedcharData){ if(y==0) { LCD_write_com(0x80+x); } else { LCD_write_com(0xC0+x); } LCD_write_Data(Data);}/******************************************************************//*初始化函数*//******************************************************************/voidLCD_init(void){ LCD_write_com(0x38);/*显示模式设置*/ delay_ms(5); LCD_write_com(0x38); delay_ms(5); LCD_write_com(0x38); delay_ms(5); LCD_write_com(0x38); LCD_write_com(0x08);/*显示关闭*/ LCD_write_com(0x01);/*显示清屏*/ LCD_write_com(0x06);/*显示光标移动设置*/ delay_ms(5); LCD_write_com(0x0C);/*显示开及光标设置*/}(e)按键keyboard.h程序清单:#ifndef__KEYBOARD_H#define__KEYBOARD_HunsignedcharKeyProcess(void);//读按键函数unsignedcharkeyscan(void);//键盘扫描函数#endif(f)按键keyboard.c程序清单:#include"includes.h"externunsignedcharsk;sbitkey0=P2^0;sbitkey1=P2^1; sbitkey2=P2^2;sbitkey3=P2^3;sbitspeak=P2^7;unsignedcharKeyProcess(void){unsignedcharkey; unsignedcharkeyvalue=16; key=keyscan(); //调用键盘扫描 switch(key){ case0xee:keyvalue=0;break;//0按下相应的键显示相对应的码值case0xde:keyvalue=1;break;//1按下相应的键显示相对应的码值case0xbe:keyvalue=2;break;//2case0x7e:keyvalue=3;break;//3case0xed:keyvalue=5;break;//4case0xdd:keyvalue=6;break;//5case0xbd:keyvalue=7;break;//6case0x7d:keyvalue=8;break;//7case0xeb:keyvalue=10;break;//8case0xdb:keyvalue=11;break;//9case0xbb:keyvalue=12;break;//10case0x7b:keyvalue=13;break;//11case0xe7:keyvalue=15;break;//12case0xd7:keyvalue=16;break;//13case0xb7:keyvalue=17;break;//14case0x77:keyvalue=18;break;//15case0x00:keyvalue=4;break;//key0case0x01:keyvalue=9;break;//key1case0x02:keyvalue=14;break;//key2case0x03:keyvalue=19;break;//key3case0xff:keyvalue=20;break;default:keyvalue=20;break; } returnkeyvalue;}unsignedcharkeyscan(void)//键盘扫描函数,使用行列反转扫描法{ unsignedcharcord_h,cord_l;//行列值中间变量 P3=0x0f;//行线输出全为1,列线输出全为0 cord_h=P3&0x0f;//读入行线值 if(cord_h!=0x0f)//先检测有无按键按下 { delay_us(100);//去抖 if(cord_h!=0x0f) { cord_h=P3&0x0f;//读入行线值 P3=cord_h|0xf0;//输出当前行线值 cord_l=P3&0xf0;//读入列线值 while(P3!=0x0f) { P3=0x0f; speak=!sk; } speak=1; delay_ms(20); return(cord_h+cord_l);//键盘最后组合码值 } } if(key0==0) { delay_us(100); if(key0==0) { while(key0==0) { speak=!sk; } speak=1; delay_ms(3); return0x00; } } if(key1==0) { delay_us(100); if(key1==0) { while(key1==0) { speak=!sk; } speak=1; delay_ms(3); return0x01; } } if(key2==0) { delay_us(100); if(key2==0) { while(key2==0) { speak=!sk; } speak=1; delay_ms(3); return0x02; } } if(key3==0) { delay_us(100); if(key3==0) { while(key3==0) { speak=!sk; } speak=1; delay_ms(3); return0x03;} }return(0xff);//返回该值}(g)堆栈stack.h程序清单:#ifndef__STACK_H#define__STACK_Htypedefstruct{ char*rbase; char*rtop;}OPTR;//符号栈typedefstruct{ double*dbase; double*dtop;}OPND;//数据栈voidInit_OPTR(OPTR*s,char*TR1);voidPUSH_OPTR(OPTR*s,charelem);charPOP_OPTR(OPTR*s);voidInit_OPND(OPND*s,double*ND1);voidPUSH_OPND(OPND*s,doubleelem);doublePOP_OPND(OPND*s);charPrecede(chara,charb);doubleOperate(doublenum1,chartheta,doublenum2);voidPushnum(OPND*sq,doublec);voidPushdp(OPND*sq,charflag,doublec);#endif(h)堆栈stack.c程序清单:#include"includes.h"unsignedcharcodeyxj[7][7]={ //+-*/()#2,2,0,0,0,2,2,//+2,2,0,0,0,2,2,//-2,2,2,2,0,2,2,//* 2,2,2,2,0,2,2,///0,0,0,0,0,1,3,//(2,2,2,2,3,2,2,//)0,0,0,0,0,3,1,//#};voidInit_OPTR(OPTR*s,char*TR1){s->rbase=TR1; s->rtop=s->rbase;}voidPUSH_OPTR(OPTR*s,charelem){ *(s->rtop)=elem;s->rtop++;}charPOP_OPTR(OPTR*s){ chartemp; s->rtop--; temp=*(s->rtop);returntemp;}voidInit_OPND(OPND*s,double*ND1){s->dbase=ND1; s->dtop=s->dbase;}voidPUSH_OPND(OPND*s,doubleelem){ *(s->dtop)=elem;s->dtop++;}doublePOP_OPND(OPND*s){ doubletemp; s->dtop--; temp=*(s->dtop); returntemp;}charPrecede(chara,charb){ chari,j; switch(a) {case'+':i=0;break;case'-':i=1;break;case'*':i=2;break;case'/':i=3;break;case'(':i=4;break;case')':i=5;break;case'#':i=6;break;default:i=0;break; }switch(b) {case'+':j=0;break;case'-':j=1;break;case'*':j=2;break;case'/':j=3;break;case'(':j=4;break;case')':j=5;break;case'#':j=6;break;default:j=0;break; } returnyxj[i][j];}doubleOperate(doublenum1,chartheta,doublenum2){doublenum3;switch(theta) {case'+':num3=num1+num2;break;case'-':num3=num1-num2;break;case'*':num3=num1*num2;break;case'/':num3=num1/num2;break; } returnnum3;}voidPushnum(OPND*sq,doublec){doubletemp1,temp2;temp1=POP_OPND(sq);temp2=temp1*10+c; PUSH_OPND(sq,temp2);}voidPushdp(OPND*sq,charflag,doublec){doubletemp3,temp4;chari;doublej=1;for(i=0;i<flag;i++) {j=j*0.1; }temp3=POP_OPND(sq);temp4=temp3+c*j; PUSH_OPND(sq,temp4);}includes.h程序清单:#ifndef__INCLUDES_H#define__INCLUDES_H#include<reg52.h>#include"lcd1602.h"#include"keyboard.h"#include"delay.h"#include"stack.h"#include"stdio.h"#include"math.h"sfrISP_CONTR=0xe7;#endif(j)main.c程序清单:#include"includes.h"unsignedcharcodeuckey[20]={0x37,0x38,0x39,0x28,0x29,0x34,0x35,0x36,0x2b,0x2d,0x31,0x32,0x33,0x2a,0x2f,0x30,0x2e,0x64,0xde,0x3d};charidataTR[20];doubleidataND[20];voiddispdouble(doublevalue);doubleAccProcess(char*s);chargetonechar(void);unsignedcharkeycount=0;unsignedcharsk=0;voidErrorProcess(void);voidmain(void){ doublevalue; unsignedcharkeyvalue; unsignedcharipos=0; chars[32]; P2=0xff; delay_ms(100); LCD_init(); LCD_clear(); while(1){ while(1) { keyvalue=getonechar(); if(uckey[keyvalue]=='=') { s[ipos++]='#'; break; } else { if(uckey[keyvalue]=='d')//表示按下退格键 { s[--ipos]='0'; } elseif(uckey[keyvalue]==0xde)//表示按下声音控制键 { sk=!sk; keycount--; if(sk==1) { LCD_write_char(0,1,0xde); LCD_write_com(0x80+keycount); } else { LCD_write_char(0,1,0x20); LCD_write_com(0x80+keycount); } } else { s[ipos++]=uckey[keyvalue]; } } } while(keycount>=16) { LCD_write_com(0x1c); delay_ms(5); keycount--; } s[ipos]='\0'; ipos=0; keycount=0; value=AccProcess(s); dispdouble(value); }}voiddispdouble(doublevalue){ chartext[15]; sprintf(text,"%15.3f",value);LCD_write_str(1,1,text);}doubleAccProcess(char*s){ OPTRstr;//符号栈 OPNDsnd;//数据栈charflagnum=0; charflagdp=0;chari=0; charc,theta; doublenum1,num2,num; Init_OPND(&snd,&ND[0]); Init_OPTR(&str,&TR[0]); PUSH_OPTR(&str,'#'); flagnum=0;c=*(s++);while(c!='#'||(*(str.rtop-1)!='#')) { if(c>='0'&&c<='9'){ c=c-0x30; if(flagdp==0) { if(flagnum==0) { PUSH_OPND(&snd,(double)c); flagnum++; }else { Push
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 14896.1-2025特种加工机床术语第1部分:基本术语
- 酒水购销标准合同文本格式
- 个人借款合同:公司与个人间的借贷协议
- 跨境冷链仓储设施建设合作合同
- 度技术引进合同
- 财产遗赠与扶养合同书
- 12《玩也有学问》 教学设计-2024-2025学年道德与法治一年级上册统编版
- 2023-2024学年清华版(2012)信息技术三年级上册 第二单元《6课 金鱼乐悠悠-“铅笔”、“橡皮”工具和移动》教学设计
- 设备供应合同(参考模板)
- 度房屋装修合同管理与监督协议
- 2024-2025年中国锂电池隔膜行业未来发展趋势分析及投资规划建议研究报告
- 软件系统项目实施方案(共3篇)
- 2025年山东药品食品职业学院高职单招职业技能测试近5年常考版参考题库含答案解析
- 2025年恩施市福牛物业有限公司招聘笔试参考题库含答案解析
- 《滚动轴承-》课件
- 2025年中国CAR-T免疫细胞治疗行业市场发展前景研究报告-智研咨询发布
- 妊娠期用药安全课件
- GB/T 44958-2024化工设备安全管理规范
- 《化妆品包装材料相容性试验评估指南》
- 2025年轧钢原料工技能考试题库
- 大学生考研规划
评论
0/150
提交评论