计算器设计实验报告一、 实验设计主要分工04009320文斌:算法设计,LCD显示。04**张希:界而(按钮控件)设计,文件内容读取。共同调试、完善设计。二、 程序设计实现功能效果(1) 支持整数、小数基本加减乘除运算;(2) 有优先级的判别讣算。优先级由高到低一次为括号运算、乘除运算、加减运算。(3) 支持键盘输入和触摸屏输入;(4) 能读取指左目录下文本内容(内容为汁算表达式)并计算得出结果,将内容和结果显示在LCD上。程序任务开始后,等待键盘或触摸屏的输入。输入键有0~9数字键、+-*/()运算符、del退格键、clear清屏键、read读指定目录文本内容并计算键、enter*=键、'小数点键。每当有字符输入时,触摸屏相应键显示“AAA”,100ms后恢复原相应按键符号,同时LCD屏幕上显示相应字符。当输入'del'键时,屏幕显示去掉最后一位字符。当输入'二'号后,得出计算结果,结果显示于表达式的下一行。若是除零错误,则结果显示为"/0ERR0R!”。若有非法字符(触摸点不能识别为设计按键符则视为非法字符),则结果输出为“SyntaxError!!”。若表达式有运算符连续输入,则忽略前面的运算符,只取最后一位运算符计算,正常显示数字结果。当输入*clear键时,情况显示区域。当输入'read'键时,从指龙目录文本文件中读取表达式并计算。将表达式内容和汁算结果显示在LCD上。LCD显示界而如下:输入显示:结果输岀:del123+clear456—read789♦enter(0)/三、程序算法实现1、计算算法首先将输入的0为数字、+-*/()运算符的内容存储于一个全局变Mcal[number]中,表达为中缀表达式。用voidstr2repol()函数,将输入字符串cal[number]转换成逆波兰表达式并存于全局数组charrepol[maxs]中。str2repol()函数中缀表达式转成逆波兰后缀表达式算法如下:(1)首先构造一个运算符栈stack[maxs],此运算符在栈内遵循越往栈顶优先级越高的原则。读入一个中缀表示算术表达式str[maxs](注:str[i]=cal[i])<>从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则分析到该数字串的结束并将该数字串直接输出到repol[maxs]中。如果不是数字,该字符则是运算符,此时需比较优先关系。步骤如下:若为左括号'(‘则压入运算符栈顶:若为其他运算符,则将该字符与运算符栈顶的运算符的优先关系相比较。若该字符优先关系高于此时运算符栈顶的运算符,则将该运算符入栈。若该字符优先关系不高于此时运算符栈顶的运算符,则将栈顶的运算符从栈中弹岀到repol[maxs],直到栈顶运算符的优先级低于当前运算符,将该字符入栈。若为有括号'(',则弹出运算符栈顶的运算符至到repol[maxs],直到遇到左括号惮出并作废此开括号。重复上述操作。中缀表达式转成逆波兰后缀表达式后,calculate()函数计算后缀表达式的值算法如下:用局部数组stackEtop]存放运算结果,]的字符ch,循环判断ch。若ch为运算符,则stack[top-1]与stack[top]做相应运算。若运算只需单操作数则stack[top]做相应运算。运算结果存F
嵌入式--计算器--实验报告 来自淘豆网m.daumloan.com转载请标明出处.