51單片機(三十)—— 矩陣鍵盤計算器

        在《51單片機(二十九)—— 矩陣鍵盤輸入實驗》中,我們對矩陣鍵盤的原理及使用方法進行了介紹。在本文中,我們採用矩陣鍵盤設計一個計算器,實現簡單的計算器功能。

        這個實驗的代碼的主函數如下所示。

main()
{
	init_T0();
	for(;;)
	{
		keyma=KEYscan();
		keyvalue=Keychange(keyma);	
		if(keyvalue!=0xff)
		{
          if(mm==0)
              for(n=0;n<8;n++)
                  showdata[n]=0;  //清除數碼管顯示           

          if(('+'==keyvalue)|| (mm==8) || ('-'==keyvalue) || ('x'==keyvalue)|| ('/'==keyvalue) || ('='==keyvalue))//輸入數字最大值8,輸入符號表示輸入結束
          {
              mm=0;  //計數器復位

              if(flag==0)  //如果是輸入的第一個數據,賦值給a
              {
                  sscanf(temp,"%d",&a);  //從一個字符串輸入到變量
                  flag=1;
              }
              else  
                  sscanf(temp,"%d",&b);  //將第二個輸入的數據,賦值給b
             
              for(n=0;n<8;n++) //賦值完成後把緩衝區清零,防止下次輸入影響結果
                  temp[n]=0;

              if(keyvalue!='=')      //判斷當前符號位
                  sign=keyvalue;     //如果不是等號記下標誌位
              else
              {  
                  flag=0;         //檢測到輸入=號,判斷上次讀入的符合
                  switch(sign)
                  {
                      case '+':a=a+b;
                        break;
                      case '-':a=a-b;
                        break;
                      case 'x':a=a*b;
                        break;
                      case '/':a=a/b;
                        break;
                      default:
                        break;
                  }
                  sprintf(temp,"%d",a);  //打印十進制到臨時緩衝區
                  for(n=0;n<8;n++)       //打印的值是ASCII碼值
                  { 
                      if(temp[n]==0)      //數碼管上不顯示
                          showdata[n]=0;
                      else if(temp[n]=='-')  //負號
                          showdata[n]=0x40;
                      else 
                          showdata[n]=BJTY_DuanMa[temp[n]-'0'];//顯示斷碼		     
                  }
                  sign=0;
                  a=b=0;            //用完後所有數據清零
              }
          }
          else	if(mm<8)
          {
              temp[mm]=keyvalue+'0'; 
              showdata[mm]=BJTY_DuanMa[keyvalue];   //輸出數據
              mm++;                          //輸入數值累加
          }
		}
	}
}

         將程序代碼燒寫之後可以看到實驗現象,在這個實驗中,數碼管顯示的數值與S1~S16旁邊的數值相對應。按下按鍵可以進行計算。這個演示代碼只是一個簡單的計算器,只能進行整數的加減乘除運算,不能計算小數。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章