?? 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 + -