4X4矩陣鍵盤掃瞄程式

2021-09-07 10:41:27 字數 3122 閱讀 7096

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...