#定義uchar無符號字符
龍首,尾;//定義全局變量
無效延遲(整數)/* * *延遲程序* *//
{int i,j;
for(I = 0;我& ltn;i++)
{ for(j = 0;j & lt50;j++)
;}
}
長加法(長x,長y)/* * *加法程序* *//
{龍z;
z = x+y;
返回(z);
}
Long sub (long x,long y)/* * *減法程序* *//
{龍z;
if(x & gt;=y)
z = x-y;
其他
{ z = y-x;
z = z+10e 6;}/* * *負數的最高有效位是1 * * *//
返回(z);
}
Long Mul (Long X,Long Y)/* * *乘數* *//
{龍z;
z = x * y;
返回(z);
}
Long div (long x,long y)/* * *除法程序* *//
{龍z;
z = x/y;
返回(z);
}
Uchar kbscan (void)/* * *鍵盤掃描儀* * *//
{
uchar sccode
p 1 = 0xf 0;
if((p 1 & amp;0xf0)!=0xf0) //發送所有0行掃描碼,帶列行輸入。
{ delay(222);//延遲去抖
if((p 1 & amp;0xf0)!=0xf0)
{ sccode = 0xfe//逐行掃描初始值
while((sc code & amp;0x10)!=0)
{ p 1 = sc code;//輸出行掃描代碼
if((p 1 & amp;0xf0)!=0xf0)
{
return(p 1);}//如果檢測到按鍵,則返回鍵值。
其他
sc code =(sc code & lt;& lt1)| 0x 01;//行掃描碼左移壹位。
}
}
}
return(0);//沒有按鍵,返回值為0。
}
Void顯示(void)/* * *顯示程序* * *//
{ int I;
uchar code rel[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0x Fe };//數碼管門控
uchar碼led[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b };//定義0-9
uchar數據編號[8];
num[0]= First/10000000;//壹千萬位
num[1]= First/100000% 10;//百萬位
num[2]= First/100000% 10;//十萬
num[3]= First/10000% 10;//壹萬位
num[4]= First/1000% 10;//千
num[5]= First/100% 10;//數百
num[6]= First/10% 10;//十個人
num[7]=第壹個% 10;//位
for(I = 7;我& gt=0;我-)
{ P3 = rel[I];//位選擇輸出
P2 = led[num[I]];//數據輸出
延遲(2);//這個延遲有必要嗎?
}
}
Void main (void)/* * *主程序* * *//
{ int k,n;
uchar f,g,key,gn 1;
n = 0;
f = 0;
P0 = 0;//指示燈壹開始就滅了。
而(1) //不斷查詢是否有按鍵動作。
{ key = kbs can();//獲取返回的鍵值
如果(關鍵!=0)
{
Switch(key) //解碼,將對應鍵的返回值轉換為對應的數值。
{
案例0x ee:k = 0;打破;//0
case 0x de:k = 1;打破;//1
案例0x be:k = 2;打破;//2
案例0x7e:k = 3;打破;//3
案例0x ed:k = 4;打破;//4
案例0x DD:k = 5;打破;//5
案例0x BD:k = 6;打破;//6
案例0x7d:k = 7;打破;//7
案例0xeb:k = 8;打破;//8
案例0x db:k = 9;打破;//9
案例0x bb:k = 10;first = 0;end = 0;f = 0;打破;//清除
案例0x7b:k = 11;打破;//等於
案例0xe 7:k = 12;f = 1;打破;//添加
案例0xd 7:k = 13;f = 2;打破;//減號
案例0xb 7:k = 14;f = 3;打破;//相乘
案例0x 77:k = 15;f = 4;打破;//除法
}
P0 = 1;
延遲(280);//有鍵時指示燈顯示時間。
P0 = 0;//鍵表示關閉。
if(k & lt;10) //當它是數字鍵(0-9)時
{
如果(f!=0) //當它是數字鍵時,如果按下了功能鍵。
{
n++;//記錄數字鍵被按下的次數。
gn 1 = 0;//清除標誌,再次為功能鍵時操作。
g = f;//保存操作標誌
If(n==1) //當輸入是位數時,直接賦值。
first = k;
else if(n & gt;1) //當輸入為多位數時,轉換為10系統中的多位數。
First = First * 10+k;
}
否則//如果沒有按下功能鍵,
{
n++;
gn 1 = 1;//定義標誌,下次是功能鍵時停止數據輸入。
如果(n==1)
first = k;
else if(n & gt;1)
First = First * 10+k;
End = First//保存第壹個號碼。
}
}
else if(k & gt;當11) //是功能鍵(+-*/)
{
If(gn1==1) //當前壹個數字鍵後面跟著壹個功能鍵時,
{
n = 0;//清除計數標誌
}
Else //如果再次輸入功能鍵,將執行該操作。
{ n = 0;//清除計數標誌
開關(g)
{case 1: First=add(End,First);打破;
情況二:First=sub(End,First);打破;
案例三:First=mul(End,First);打破;
案例四:First=div(End,First);打破;}
}
End = First//保存這個結果。
}
Else if(k==11) //等於符號(=)
{ n = 0;
gn 1 = 1;//作為功能鍵輸入就可以繼續操作。
開關(g)
{case 1: First=add(End,First);打破;
情況二:First=sub(End,First);打破;
案例三:First=mul(End,First);打破;
案例四:First=div(End,First);打破;
}
End = First//保存最終的操作結果。
f = 0;//清除操作標誌
}
}
顯示();//調用顯示程序
}
}