4x4矩陣鍵盤掃瞄:
1. 4根行線的gio均設為output,根列線的gio均設為input;
2. 4根行線的gio分別置為0111、1011、1101、1110,讀逐一讀取列線gio的值,可確定是哪乙個按鍵。
電路圖例如以下:
注意:1. 圖中用作輸入的gio,一定要有乙個上拉電阻。
2. 晶元中的每個引腳是否用作了gpio口來用。需配置晶元的暫存器,使引腳當作gpio口來使用,才會有效。
測試**例如以下:
#define key_gio_row_1 37
#define key_gio_row_2 33
#define key_gio_row_3 32
#define key_gio_row_4 35
#define key_gio_col_1 22
#define key_gio_col_2 23
#define key_gio_col_3 24
#define key_gio_col_4 36
int scankey()
}break;
case 0x0d:
}break;
case 0x0b:
}break;
case 0x07:
}break;
default:
break;
} dm365setgpio(key_gio_row_1, 1);
dm365setgpio(key_gio_row_2, 0);
dm365setgpio(key_gio_row_3, 1);
dm365setgpio(key_gio_row_4, 1);
col1value = dm365getgpio(key_gio_col_1);
col2value = dm365getgpio(key_gio_col_2);
col3value = dm365getgpio(key_gio_col_3);
col4value = dm365getgpio(key_gio_col_4);
keyvalue = col1value | (col2value << 1) | (col3value << 2) | (col4value << 3);
// printf("=2==keyvalue = %x\n",keyvalue);
switch(keyvalue)
}break;
case 0x0d:
}break;
case 0x0b:
}break;
case 0x07:
}break;
default:
break;
} dm365setgpio(key_gio_row_1, 1);
dm365setgpio(key_gio_row_2, 1);
dm365setgpio(key_gio_row_3, 0);
dm365setgpio(key_gio_row_4, 1);
col1value = dm365getgpio(key_gio_col_1);
col2value = dm365getgpio(key_gio_col_2);
col3value = dm365getgpio(key_gio_col_3);
col4value = dm365getgpio(key_gio_col_4);
keyvalue = col1value | (col2value << 1) | (col3value << 2) | (col4value << 3);
// printf("=3==keyvalue = %x\n",keyvalue);
switch(keyvalue)
}break;
case 0x0d:
}break;
case 0x0b:
}break;
case 0x07:
}break;
default:
break;
} dm365setgpio(key_gio_row_1, 1);
dm365setgpio(key_gio_row_2, 1);
dm365setgpio(key_gio_row_3, 1);
dm365setgpio(key_gio_row_4, 0);
col1value = dm365getgpio(key_gio_col_1);
col2value = dm365getgpio(key_gio_col_2);
col3value = dm365getgpio(key_gio_col_3);
col4value = dm365getgpio(key_gio_col_4);
keyvalue = col1value | (col2value << 1) | (col3value << 2) | (col4value << 3);
// printf("=4==keyvalue = %x\n",keyvalue);
switch(keyvalue)
}break;
case 0x0d:
}break;
case 0x0b:
}break;
case 0x07:
}break;
default:
break;
} return keyvalue;
}void *keymngthread()
else if(1 == resetvalue)
if(resetcout == 30)
alarminvalue = dm365getgpio(gio_alarm_in);
if(0 == alarminvalue)
else if(1 == alarminvalue)
scankey();
usleep(100000);
}}
**中dm365setgpio( )裡將gpio預設設定為output,
dm365getgpio( )中將gpio預設設定為input,
通過字元裝置驅動實現應用層操作底層gpio。
4X4矩陣鍵盤掃瞄程式
4x4矩陣鍵盤掃瞄 1.4根行線的gio均設為output,根列線的gio均設為input 2.4根行線的gio分別置為0111 1011 1101 1110,讀逐一讀取列線gio的值,可確定是哪乙個按鍵 電路圖如下 注意 1.圖中用作輸入的gio,一定要有乙個上拉電阻。2.晶元中的每乙個引腳是否用...
4x4矩陣求逆
最近學習自定義光柵化渲染器,在學習矩陣變換的時候,求矩陣的逆矩陣的時候遇到的一些問題,特記錄在此。typedef struct matrix3x3 type 3 3矩陣 matrix3x3,matrix3x3 ptr typedef struct matrix4x4 type 4 4矩陣 matri...
Unity 中的4X4矩陣
1 為什麼模型的變換是4x4而不是3x3的矩陣變換?我們知道,在空間裡的點的座標是vector3型別的,即是三維的,那為什麼要用4維矩陣才能進行旋轉平移和縮放呢?要解決這個問題就要從變換的本質來談起。我們知道,在變換裡分為線性變換和非線性變換,比如 我們対模型進行縮放,那麼縮放後的點座標是 pn a...