發(fā)一個(gè)用51單片機(jī)做的簡(jiǎn)單計(jì)算器的程序.
/**********************按鍵處理*******************/
void KeyDeal(unsigned char Key)
{ //unsigned char n,p;
if(Key!=0) //判斷 有無(wú)按鍵按下。
{
switch(Key)
{ //以下定義0~9的數(shù)字鍵。
case 0x11: K=0; break;
case 0x21: K=1; break;
case 0x41: K=2; break;
case 0x81: K=3; break;
case 0x12: K=4; break;
case 0x22: K=5; break;
case 0x42: K=6; break;
case 0x82: K=7; break;
case 0x14: K=8; break;
case 0x24: K=9; break;
//以下+。-,*,/ 鍵
case 0x44: K=10; break; //加
case 0x84: K=11; break; //減
case 0x18: K=12; break; //乘
case 0x28: K=13; break; //除
case 0x48: K=14; break; //等于
case 0x88: K=15; break; //清除
default: break;
}
if(K<10) //數(shù)字鍵
{
d[2]=d[1];
d[1]=d[0];
d[0]=K;
c[2]=c[1];
c[1]=c[0];
c[0]=b[K];
//以上數(shù)組數(shù)據(jù)賦值是保證數(shù)字按鍵入順序移位。
}
if(K==10) //加
{ m=d[2]*100+d[1]*10+d[0],d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;p=1;
c[0]=0xc0, c[1]=0xc0, c[2]=0xc0, c[3]=0xc0, c[4]=0xc0; }
if(K==11)//減
{ m=d[2]*100+d[1]*10+d[0],d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;p=2;
c[0]=0xc0, c[1]=0xc0, c[2]=0xc0, c[3]=0xc0, c[4]=0xc0;}
if(K==12)//乘
{ m=d[2]*100+d[1]*10+d[0],d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;p=3;
c[0]=0xc0, c[1]=0xc0, c[2]=0xc0, c[3]=0xc0, c[4]=0xc0;}
if(K==13)//除
{ m=d[2]*100+d[1]*10+d[0],d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;p=4;
c[0]=0xc0, c[1]=0xc0, c[2]=0xc0, c[3]=0xc0, c[4]=0xc0;}
if(K==14) //此處是按 =鍵
{ n=d[2]*100+d[1]*10+d[0];
if (p==1) shu=m+n;
if (p==2) shu=m-n;
if (p==3) shu=m*n;
if (p==4) shu=m/n;
c[4]=b[shu/10000];
c[3]=b[shu%10000/1000];
c[2]=b[shu%1000/100];
c[1]=b[shu%100/10];
c[0]=b[shu%10]; //C[]存的是 計(jì)算結(jié)果 。
}
if(K==15) // 此處是按 清除鍵
{d[0]=0,d[1]=0,d[2]=0,d[3]=0,d[4]=0;
shu=0;
c[4]=b[shu/10000];
c[3]=b[shu%10000/1000];
c[2]=b[shu%1000/100];
c[1]=b[shu%100/10];
c[0]=b[shu%10]; }
}
}
void main()
{
while(1)
{
Key = Keycan();//鍵盤(pán)掃描獲取一次按鍵的編碼0x11-0x88
KeyDeal(Key); //對(duì)掃描到的鍵盤(pán)編碼進(jìn)行轉(zhuǎn)換處理,變成數(shù)據(jù)鍵盤(pán)0-
display();
}