嵌入式课程设计实验报告-计算器.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文档。上传文档
查看更多
华南师范大学嵌入式综设实验报告 选题:基于ARM和UCOS-II系统的小型计算器 指导老师: 王剑x 组员(学号):xx) xx) 一、实现功能 实现五位整数的加减乘除带括号的运算,由于实验箱的键盘数量有限,于是我们将键盘设置为虚拟的两层结构,其使用方法如下: (1)第一层键盘使用指南 1 2 3 ( 4 5 6 ) 7 8 9 第二层 0 . 第一层 = (2)第二层键盘使用指南 + % - * / 二、系统流程图 开 始两次扫描键盘,获取键码 开 始 两次扫描键盘,获取键码 输入的字符是否为数字 输入的字符是否为数字 Y Y num = (num*10)+(ch-0); num = (num*10)+(ch-0); N 字符是否为 字符是否为( 处理左括号Push(Sym,SymTop,(); 处理左括号Push(Sym,SymTop,(); Y 处理右括号Push(Sym,SymTop,)); 处理右括号Push(Sym,SymTop,)); 是否为) Y N 是否为+处理加号Push(Sym,SymTop,+); 是否为+ 处理加号Push(Sym,SymTop,+); 处理减号Push(Sym,SymTop,-); 处理减号Push(Sym,SymTop,-); 是否为- Y 是否为*处理乘号Push(Sym,SymTop, 是否为* 处理乘号Push(Sym,SymTop,*); Y N 是否为./处理除号Push(Sym,SymTop,/); 是否为./ 处理除号Push(Sym,SymTop,/); Y 计算器清零,使栈清空是否为清零 计算器清零,使栈清空 是否为清零 Y N 是否为=计算,调用 是否为= 计算,调用Calculate(int right,int left,int symbol); Y 显示当前数值或运算符 显示当前数值或运算符 计算原理 计算原理 定义一个操作数栈sym,一个操作符栈um 。 思想是:置操作数栈为空,操作符栈压入元素#(它具有最高优先级),依次读入表达式中的每个字符CH,如果CH是操作数,则CH压入操作数栈,如果CH是操作符,那么将CH和操作符栈顶元素进行优先级比较(如‘×’优先级高于‘+’)。 如果优先级大于当前栈顶元素,那么将其压栈, 如果其优先级小于当前栈顶元素,那么执行op=sym.pop();(取当前栈顶操作符),a=um.pop()(取当前栈顶操作数存入临时变量a);b=sym.pop()(取当前栈顶操作数存入临时变量b);c=计算(a op b); sym.push(c); 如果优先级相等,则当前操作符出栈。 重复上述操作直到表达式处理完毕。 最后操作数栈剩余的操作数就是计算的最终结果。 三、程序 #include Includes.h /* uC/OS interface */ #include option.h #include 2410lib.h #include uhal.h /* 任务栈 */ OS_STK StackLED[STACKSIZE]= {0, }; // 任务LED任务栈 OS_STK StackSEG[STACKSIZE]= {0, }; // 任务SEG任务栈 /* 任务ID */ char IdLED = 1; // 任务LED ID char IdSEG = 2; // 任务SEG ID /* 任务处理函数 */ void TaskLED(void *Id); // 任务LED任务处理函数 void TaskSEG(void *Id); // 任务SEG任务处理函数 void TmrFunc1(INT8U arg); /* 定时器1*/ OS_TMR *Tmr1; char ch,ch2; char print_1[1]; char print_2 [6]; /*用于串口输出*/ int Page=0; /* 键盘的页面标志 */ /*栈定义*/ #ifndef STACK_SIZE #define STACK_SIZE 64 #endif int Num[STACK_SIZE];/*数字栈 */ int NumTop=0; int Sym[STACK_SIZE];/*字符栈,用来储存操作符 */ int SymTop=0; void Push_(int * stack,int * top,int val); int Pop_(

文档评论(0)

celkhn5460 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档