求设计程序。实现如下功能:1.4位led显示器2.要有0-9个数字输入键,实现“+”“-”“*”“/”“=”“CLR”“RET”,能够实现带负的算术运算和带浮点(小数)的运算。3.就是能够实现小学买的计算机上的功能大虾们,给段参考程序就OK啦!谢谢啦~1L,表挖苦啦。。。 发我邮箱吧,yu13115721952@126.com最好附带程序注解满意的话,追加分数
************************************************** 满意要加分哦! **************************************************要实现算术符号的识别,这里是有学问的,没看过《数据结构》难度还是比较大的,这里要用的算法叫做逆波兰算法,可以看看我的博客里的"c语言/数据结构" 一栏里的相关文章:如《51单片机通过串口进行基于逆波兰算法的逻辑运算》《双数组逆波兰表达式法:计算器源程(c语言) 转载》《RPN——逆波兰算法简介(huiyujian翻译) 转载》认真读完,不用注释,你能看懂了!************************************************** 满意要加分哦! **************************************************这里也贴一段程序:#include "stdio.h"#include "REG52.h"#define m0 15void init(){SCON=0x50; //串口方式1,允许接收TMOD=0x20; //定时器1定时方式2TCON=0x40; //设定时器1开始计数TH1=0xE8; //11.0592MHz 1200波特率TL1=0xE8;TI=1;TR1=1; //启动定时器}void caculate(){ idata char str[m0]={"!(1+0)#"}; idata char exp[m0]; idata char stack[10]; idata char stack1[10],d; char ch,c; int i,j,t,top=0; i=0;/* do { i++; scanf("%c",&str[i]); }while (str[i]!='#'&&i!=m0);*/t=1;i=0;ch=str[i];i++;while(ch!='#'){if(ch=='0'||ch=='1') { exp[t]=ch; t++; } else if(ch=='(') { top++; stack[top]=ch; } else if(ch==')') { while(stack[top]!='(') { exp[t]=stack[top]; top--; t++; } top--; } else if (ch=='+') { while(top!=0&&stack[top]!='(') { exp[t]=stack[top]; top--; t++; } top++; stack[top]=ch; } else if(ch=='*') { while(stack[top]=='*') { exp[t]=stack[top]; top--; t++; } top++; stack[top]=ch; } else if(ch=='!') { while(stack[top]=='!') { exp[t]=stack[top]; top--; t++; } top++; stack[top]=ch; } ch=str[i]; i++;} while(top!=0) { exp[t]=stack[top]; t++; top--; } exp[t]='#'; for(j=1;j<=t;j++)printf("%c",exp[j]); printf("\n"); exp[t+1]='\0'; t=1; top=0; c=exp[t]; t++;while(c!='#') {if(c=='0'||c=='1') {d=c-'0'; top++; stack1[top]=d; } else { switch (c) { case '+':stack1[top-1]=stack1[top-1]|stack1[top];break; case '*':stack1[top-1]=stack1[top-1]&stack1[top];break; case '!':stack1[top-1]=!stack1[top];break; default:break; } top--; } c=exp[t]; t++; }printf("The mark is %d",stack1[top]);}main(){ init();caculate();while(1);}