專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

用單片機(jī)制作簡單計(jì)算器的源程序

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2010年06月18日   【字體:
發(fā)一個(gè)用51單片機(jī)做的簡單計(jì)算器的程序.

/**********************按鍵處理*******************/

void KeyDeal(unsigned char Key)

{  //unsigned char n,p;

   if(Key!=0)     //判斷 有無按鍵按下。

 {

   

                      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();//鍵盤掃描獲取一次按鍵的編碼0x11-0x88

     KeyDeal(Key);  //對掃描到的鍵盤編碼進(jìn)行轉(zhuǎn)換處理,變成數(shù)據(jù)鍵盤0-

          display();

   }

關(guān)閉窗口

相關(guān)文章