[英]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.