void Show_num(void) { unsigned int len=0,j,k=0; if(num<10) { Num[i]=num; OLED_ShowNum(1,i,num,1); } if(num==10) { OLED_ShowChar(1,i,'='); for(j=n+1;j<i;j++) { p[j]=i-j-1; //次方 e=e+Num[j]*pow(10,p[j]); } n=i; Run_num(); // end=b-e; // OLED_ShowNum(3,1,end,length(end)); } if(num==13) { Num[i]=10; OLED_ShowChar(1,i,'+'); for(j=n+1;j<i;j++) { p[j]=i-j-1; //次方 a=a+Num[j]*pow(10,p[j]); } n=i; // OLED_ShowNum(2,1,a,length(a)); } if(num==14) { Num[i]=11; OLED_ShowChar(1,i,'-'); for(j=n+1;j<i;j++) { p[j]=i-j-1; //次方 b=b+Num[j]*pow(10,p[j]); } n=i; // OLED_ShowNum(3,1,b,length(b)); } if(num==15) { Num[i]=12; OLED_ShowChar(1,i,'*'); for(j=n+1;j<i;j++) { p[j]=i-j-1; //次方 c=c+Num[j]*pow(10,p[j]); } n=i; // OLED_ShowNum(4,1,c,length(c)); } if(num==12) { Num[i]=13; OLED_ShowChar(1,i,'/'); for(j=n+1;j<i;j++) { p[j]=i-j-1; //次方 d=d+Num[j]*pow(10,p[j]); } n=i; // OLED_ShowNum(4,5,d,length(d)); } if(i>16) { OLED_ShowNum(2,i-16,num,1); } if(num==11) { OLED_Clear(); sum=0; i=0; n=0; a=b=c=d=e=0; note[0]=note[1]=note[2]=note[3]=0; } }根据上述代码,帮我写加减乘除都能运算的计算器
时间: 2024-03-10 22:47:53 浏览: 102
LCD.rar_Unsigned_tms320f2812 lcd_void wr_lcd
好的,基于上述代码,我来帮你实现加减乘除都能运算的计算器。具体的实现步骤如下:
1. 首先需要在代码中定义一些全局变量,用于保存表达式中的数字和运算符:
```
unsigned int Num[17]; // 保存表达式中的数字
unsigned int p[17]; // 每个数字代表的位数
unsigned int n = 0; // 上一个运算符的位置
unsigned int a = 0; // 加法操作的第一个数
unsigned int b = 0; // 减法操作的第一个数
unsigned int c = 0; // 乘法操作的第一个数
unsigned int d = 0; // 除法操作的第一个数
unsigned int e = 0; // 等号操作的第一个数
unsigned int sum = 0; // 计算结果
unsigned int note[4]; // 备注
```
2. 接下来需要修改 `Show_num` 函数,用于处理加减乘除运算。代码如下:
```
void Show_num(void) {
if(num < 10) {
// 数字
Num[i] = num;
OLED_ShowNum(1, i, num, 1);
} else if(num == 10) {
// 等号
OLED_ShowChar(1, i, '=');
for(unsigned int j = n + 1; j < i; j++) {
p[j] = i - j - 1;
e += Num[j] * pow(10, p[j]);
}
n = i;
switch(note[note[0]]) {
case 1: sum = a + e; break;
case 2: sum = b - e; break;
case 3: sum = c * e; break;
case 4: sum = d / e; break;
default: sum = e; break;
}
OLED_ShowNum(2, 1, sum, length(sum));
i = 0;
n = 0;
a = b = c = d = e = 0;
note[0] = note[1] = note[2] = note[3] = 0;
} else if(num == 11) {
// 清空
OLED_Clear();
sum = 0;
i = 0;
n = 0;
a = b = c = d = e = 0;
note[0] = note[1] = note[2] = note[3] = 0;
} else {
// 运算符
Num[i] = num - 10;
switch(Num[i]) {
case 1: note[++note[0]] = 1; break;
case 2: note[++note[0]] = 2; break;
case 3: note[++note[0]] = 3; break;
case 4: note[++note[0]] = 4; break;
}
switch(note[note[0]]) {
case 1:
for(unsigned int j = n + 1; j < i; j++) {
p[j] = i - j - 1;
a += Num[j] * pow(10, p[j]);
}
n = i;
OLED_ShowChar(1, i, '+');
break;
case 2:
for(unsigned int j = n + 1; j < i; j++) {
p[j] = i - j - 1;
b += Num[j] * pow(10, p[j]);
}
n = i;
OLED_ShowChar(1, i, '-');
break;
case 3:
for(unsigned int j = n + 1; j < i; j++) {
p[j] = i - j - 1;
c += Num[j] * pow(10, p[j]);
}
n = i;
OLED_ShowChar(1, i, '*');
break;
case 4:
for(unsigned int j = n + 1; j < i; j++) {
p[j] = i - j - 1;
d += Num[j] * pow(10, p[j]);
}
n = i;
OLED_ShowChar(1, i, '/');
break;
}
}
i++;
if(i > 16) {
OLED_ShowNum(2, i - 16, num, 1);
}
}
```
注意,在上述代码中,我们在 `note` 数组中保存了当前表达式中的所有运算符,以便在等号操作时根据不同的运算符进行不同的操作。同时,我们也在 `a`、`b`、`c`、`d`、`e` 变量中保存了每个运算符操作的第一个数,以便在等号操作时进行计算。
希望这个回答能够帮助你实现加减乘除都能运算的计算器。
阅读全文