簡體   English   中英

如何將二進制 0001,0010,0100,1000 轉換為 0,1,2,3 以索引 4x4 二維數組?

[英]How do you convert binary 0001,0010,0100,1000 to 0,1,2,3 to index a 4x4 2D array?

我正在從連接到微控制器的 4x4 鍵盤讀取按鍵,但由於鍵盤分為行和列,它只能讀取 0001 或 1000 等來指定行和列。

我的主要鍵盤中有一個字符查找表,例如:

char keys[4][4]={
        //       c3  c2  c1  c0
                {'1','2','3','A'},  //row4 PortA4 1000 

                {'4','5','6','B'},  //row3 PortA3 0100

                {'7','8','9','C'},  //row2 PortA2 0010

                {'*','0','#','D'}   //row1 PortA1 0001

                };

我希望從鍵盤讀取的輸入能夠直接索引該表並打印出所述字符,但自然地,任何高於 3 的數字都超出范圍。 我希望能夠使用類似的東西

printf("Key Pressed: %c",keys[indexrow][indexcolumn]);

但現在我將其硬編碼如下:

...

while(1)
    {
        //begin polling
        row_data=0x01;//bottom row
        bus.IOWrite(PortA,row_data);
        column_data=b&bus.IORead(PortB);
        if((column_data & b)!=0)
        {
            //printf("Keypress detected @row %0b @column %0b",row_data,column_data);
            switch(column_data)
            {
                case 0x01:printf("Key Pressed: D");break;
                case 0x02:printf("Key Pressed: #");break;
                case 0x04:printf("Key Pressed: 0");break;
                case 0x08:printf("Key Pressed: *");break;
                default: break;
            }

        }
.
.
.

我想創建一個 8x8 的表可能會更簡單,里面有很多空白,但這看起來不那么令人愉快。

您的switch語句可以幫助您將索引導出到二維數組中,如下所示:

            switch(column_data)
            {
                case 0x01:column_index=0;break;
                case 0x02:column_index=1;break;
                case 0x04:column_index=2;break;
                case 0x08:column_index=3;break;
                default: /* probably needs handling here */ break;
            }

...但是,當按下多個按鈕時會發生什么。

您可以編寫代碼來轉換數字格式

# include <stdio.h>

int main()
{
  int numberToBeConverted = 0x08;
  int i,j;
  for(i=numberToBeConverted, j=1; i!=0;i/=2,j++)
  {
    if(i&1==1)
    {
      printf("%d\n",j);
      //Whatever you want to do with the key thats pressed
    }

  }
  return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM