📄 calculate1.1.c
字号:
#include "2410addr.h"
#include "7279.h"
Main(void)
{
unsigned char number=0;
unsigned char temp1=0;
unsigned char temp2=0;
unsigned char temp3=0;
unsigned char temp4=0;
unsigned char temp5=0;
unsigned char sign,mark=0;
int i,k,k1=1,k2;
Init7279();
while(1) //无限循环
{
while(1)
{
while(1) //轮询等待键盘输入
{
if(key==1)
{
number=read7279(CMD_READ);
break; //当有键输入时跳出循环
}
}
switch(number)
{
case 0x03: number= 0; break;
case 0x0b: number= 1; break;
case 0x13: number= 2; break;
case 0x1b: number= 3; break;
case 0x04: number= 4; break;
case 0x0c: number= 5; break;
case 0x14: number= 6; break;
case 0x1c: number= 7; break;
case 0x05: number= 8; break;
case 0x0d: number= 9; break;
case 0x15: number= 10; break;
case 0x1d: number= 11; break;
case 0x06: number= 12; break;
case 0x0e: number= 13; break;
case 0x16: number= 14; break;
case 0x1e: number= 15; break;
default: number= 0xff; break;
}
if(number==10) //键A作加号
{
sign=0; //标记加号
mark=1; //表示曾经按过运算符号键+ - * /
temp2=temp4; //将第一次输入数据如 被加数 被减数等保存到temp2
continue; //重新开始循环等待输入加数,减数等
}
if(number==11)
{
sign=1;
mark=1;
temp2=temp4;
continue;
}
if(number==12)
{
sign=2;
mark=1;
temp2=temp4;
continue;
}
if(number==13)
{
sign=3;
mark=1;
temp2=temp4;
continue;
}
if(number<10) //当有输入数据时
{
if(mark=1) //如果此前输入过运算符
{
temp1=0;
temp4=0;
write7279(UNDECODE,0x00);
write7279(RTL_UNCYL,1); //将先前LED显示的被加数,被减数等清零
k2=k1; //将被加数,被减数等的位数存入k2
k1=1;
mark=0; //恢复没有输入过运算符的状态
}
if(temp4!=0) //如果输入的数据超过一位
{
write7279(RTL_UNCYL,1); //将先前输入的一位数向高位移动
k1++; //记录输入数据的位数
}
temp1=number; //将当前输入的一位数据暂存入temp1
temp4=temp4*10+temp1; //将到目前为止输入的几位数据暂存入temp4
break;
}
else break;
}
if(number==14) //键E作等号
{
mark=1;
switch(sign)
{
case 0:
{
temp1=temp2+temp4; //结果保存到temp1
temp5=temp1;
k=((k2>=k1)?(k2+1),(k1+1)); //根据加数和被加数的位数判断结果可能的位数
while(k>1) //只要结果的位数超过一位就进入循环
{
for(i=9;i>=0;i--) //判断结果的最高位数据
{
if(temp1>=e((k-1)*ln10)*i) //e((k-1)*ln10)即10的k-1次方
{
temp3=i; //记录结果最高位数字
write7279(DECODE0+(k-1),temp3); //显示最高位
temp1=temp1-e((k-1)*ln10)*i;
k--;
break; //跳出FOR循环,重新进入WHILE循环准备判断次高位
}
}
}
}
break;
case 1:
{
temp1=temp2-temp4;
temp5=temp1;
k=k2;
while(k>1)
{
for(i=9;i>=0;i--)
{
if(temp1>=e((k-1)*ln10)*i)
{
temp3=i;
write7279(DECODE0+(k-1),temp3);
temp1=temp1-e((k-1)*ln10)*i;
k--;
break;
}
}
}
}
break;
case 2:
{
temp1=temp2*temp4;
temp5=temp1;
k=k1+k2;
while(k>1)
{
for(i=9;i>=0;i--)
{
if(temp1>=e((k-1)*ln10)*i)
{
temp3=i;
write7279(DECODE0+(k-1),temp3);
temp1=temp1-e((k-1)*ln10)*i;
k--;
break;
}
}
}
}
break;
case 3:
{
temp1=temp2/temp4;
temp5=temp1;
k=k2-k1;
while(k>1)
{
for(i=9;i>=0;i--)
{
if(temp1>=e((k-1)*ln10)*i)
{
temp3=i;
write7279(DECODE0+(k-1),temp3);
temp1=temp1-e((k-1)*ln10)*i;
k--;
break;
}
}
}
}
break;
default:break;
}
temp4=temp5; //为下面继续输入数据或运算符保存此时的计算结果
k1=k;
temp2=0;
sign=0;
k=0; //按过等号后,相关数据清零
}
if(number==15) //键F清零
{
write7279(UNDECODE,0x00);
write7279(RTL_UNCYL,1);
temp1=temp2=temp3=temp4=0;
k1=1;
}
write7279(DECODE0,temp1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -