1024手机基地看电影,午夜福利视频导航,国产精品福利在线一区,亚洲欧美日韩另类成人,在线观看午夜日本理论片,成年超爽免费网站,国产精品成人免费,精品动作一级毛片,成人免费观看网站,97精品伊人久久大香蕉

標題: 51單片機關于矩形按鍵中斷掃描的問題 [打印本頁]

作者: 瓦沃德s    時間: 2024-1-17 20:52
標題: 51單片機關于矩形按鍵中斷掃描的問題
void InterruptTimer0() interrupt 1
{
unsigned char i;
static unsigned char keyout = 0; //矩陣按鍵掃描輸出索引
static unsigned char keybuf[4][4] = { //矩陣按鍵掃描緩沖區
{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF},
{0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}
};
TH0 = 0xFC; //重新加載初值
TL0 = 0x67;
//將一行的 4 個按鍵值移入緩沖區
keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN_1;
keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN_2;
keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN_3;
keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN_4;
//消抖后更新按鍵狀態
for (i=0; i<4; i++) //每行 4 個按鍵,所以循環 4 次
{
if ((keybuf[keyout][i ] & 0x0F) == 0x00)
[i ]{ //連續 4 次掃描值為 0,即 4*4ms 內都是按下狀態時,可認為按鍵已穩定的按下
[i ]KeySta[keyout][i ] = 0;
}
else if ((keybuf[keyout][i ] & 0x0F) == 0x0F)
{ //連續 4 次掃描值為 1,即 4*4ms 內都是彈起狀態時,可認為按鍵已穩定的彈起
KeySta[keyout][i ] = 1;
}
}
//執行下一次的掃描輸出
keyout++; //輸出索引遞增
keyout = keyout & 0x03; //索引值加到 4 即歸零
switch (keyout) //根據索引,釋放當前輸出引腳,拉低下次的輸出引腳
{
case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break;
case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break;
case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break;
case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break;
default: break;
}
}請問比如我按了第4行第2個鍵,就是output4為0,keyln2為0,在代碼中是怎么體現的我按的這個鍵?

2024.1.13.1.png (127.46 KB, 下載次數: 34)

2024.1.13.1.png

2024.1.13.2.png (75.38 KB, 下載次數: 35)

2024.1.13.2.png

作者: lkc8210    時間: 2024-1-17 22:20
這里是不是都缺了?



作者: wulin    時間: 2024-1-18 08:34
矩陣按鍵不需要寫這么繁瑣,只要對行列各掃描一次就行了。
作者: sgql    時間: 2024-1-18 10:07
金沙灘的教程,視頻里講得很清楚,不懂多看幾遍
作者: cocolala    時間: 2024-1-18 10:37
    1、矩陣按鍵的檢測確實比較成熟,原理有多種,下介紹的是比較常用的一種方式。


    2、提供下STC8A8K64D4的例子,基于下圖艾克姆的IK-64D4開發板。應該也是很方便你移植程序的。




matrix_keyboard_4x4.rar

22.67 KB, 下載次數: 2






歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1