嵌入式--计算器--实验报告.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
计算器设计实验报告 实验设计主要分工文斌:算法设计,LCD显示。 04** 张希:界面(按钮控件)设计,文件内容读取。 共同调试、完善设计。 程序设计实现功能效果 (1)支持整数、小数基本加减乘除运算; (2)有优先级的判别计算。优先级由高到低一次为括号运算、乘除运算、加减运算。 (3)支持键盘输入和触摸屏输入; (4)能读取指定目录下文本内容(内容为计算表达式)并计算得出结果,将内容和结果显示在LCD上。 程序任务开始后,等待键盘或触摸屏的输入。输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter=键、‘.’小数点键。 每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD屏幕上显示相应字符。当输入del键时,屏幕显示去掉最后一位字符。当输入=号后,得出计算结果,结果显示于表达式的下一行。若是除零错误,则结果显示为“/0ERROR!”。若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“Syntax Error!!”。若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。当输入clear键时,情况显示区域。当输入read键时,从指定目录文本文件中读取表达式并计算。将表达式内容和计算结果显示在LCD上。 LCD显示界面如下: 输入显示: 结果输出: del 1 2 3 + clear 4 5 6 - read 7 8 9 * enter ( 0 ) / 程序算法实现 1、计算算法 首先将输入的0~9数字、+-*/()运算符的内容存储于一个全局变量cal[number]中,表达为中缀表达式。用void str2repol()函数,将输入字符串cal[number]转换成逆波兰表达式并存于全局数组char repol[maxs]中。str2repol()函数中缀表达式转成逆波兰后缀表达式算法如下: (1)首先构造一个运算符栈stack[maxs],此运算符在栈内遵循越往栈顶优先级越高的原则。   (2)读入一个中缀表示算术表达式str[maxs](注:str[i]=cal[i])。 (3)从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出到repol[maxs]中。   (4)如果不是数字,该字符则是运算符,此时需比较优先关系。   步骤如下: 若为左括号‘(’则压入运算符栈顶; 若为其他运算符,则将该字符与运算符栈顶的运算符的优先关系相比较。 若该字符优先关系高于此时运算符栈顶的运算符,则将该运算符入栈。 若该字符优先关系不高于此时运算符栈顶的运算符,则将栈顶的运算符从栈中弹出到repol[maxs],直到栈顶运算符的优先级低于当前运算符,将该字符入栈。 若为有括号‘(’,则弹出运算符栈顶的运算符至到repol[maxs],直到遇到左括号‘(’。弹出并作废此开括号。 重复上述操作。 中缀表达式转成逆波兰后缀表达式后,calculate()函数计算后缀表达式的值算法如下: 用局部数组stack[top]存放运算结果,top初值为0. 依次读入后缀表达式repol[maxs]的字符ch,循环判断ch。 若ch为运算符,则stack[top-1]与stack[top]做相应运算。若运算只需单操 作数则stack[top]做相应运算。运算结果存于stack[top-1]。然后top- -。 否则ch为数字或小数点‘.’,为数字则 d=10.0*d+ch-0; (d初始值为0,用 于存放连续数字字符的数学值)。遇小数点,d保持原值。小数点后的数字符与 小数点前的数字符一样处理,i记录小数点后的数字符个数。最后d=d/(10^i), top++;stack[top]=d。 注:若str2repol()函数遇非法字符时,LCD输出相应提示,不调用calculate()。若calculate()函数遇除零,则不做运算,LCD输出“/0ERROR!”。 按键控件 LCD输出显示 将字符串转为Unicode编码,在指定坐标处用文本模式显示字符串。 实现函数如下: void lcddisplay(char *str,int xx,int yy) { PDC pdc;//创建绘图设备上下文结构 U16 chx[100]; pdc=CreateDC();//创建绘图设备上下文 strChar2Unicode(chx, st

文档评论(0)

138****8091 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档