[quote][size=2][color=#999999]bzhou830 发表于 2024-4-13 13:17[/color][/size]
也是可以的,这样写的原因是直接接的小安派S1的排针接口上。
对调一下插口就程序就可以修改了 ...[/quote]
是这个代码中,按这代码布局,键盘读取的值和后面对应的注释不对
所以,矩阵键盘按的应该和实际不符
0x0001 应该是0行0列
0x0002 应该是0行1列
0x0004 应该是0行2列
0x0008 应该是0行3列 0行3列 不是4的位置,至此以后,数字就都偏移了
这是其一
其二
您0行对应的应该是 1 4 7 * 不是 1 2 3 4
// 矩阵键盘的行线和列线的定义
const uint8_t rows[] = { GPIO_PIN_33, GPIO_PIN_32, GPIO_PIN_31, GPIO_PIN_30};
const uint8_t cols[] = { GPIO_PIN_29, GPIO_PIN_27, GPIO_PIN_25};
void matrix_keys_task(void *params)
{
int key_val = 0;
matrix_keys_init();
while(1)
{
key_val = get_key_val();
if(key_val != 0)
{
printf("%x\r\n", key_val);
switch(key_val)
{
case 0x0001:
key_val = 0x1e; // 1
break;
case 0x0002:
key_val = 0x1f; // 2
break;
case 0x0004:
key_val = 0x20; // 3
break;
case 0x0008:
key_val = 0x21; // 4
break;
case 0x0010:
key_val = 0x22; // 5
break;
case 0x0020:
key_val = 0x23; // 6
break;
case 0x0040:
key_val = 0x24; // 7
break;
case 0x0080:
key_val = 0x25; // 8
break;
case 0x0100:
key_val = 0x26; // 9
break;
case 0x0200:
key_val = HID_KBD_USAGE_A; // A
break;
case 0x0400:
key_val = 0x27; //0
break;
case 0x0800:
key_val = HID_KBD_USAGE_A + 1; // B
break;
}
if (xQueueSend(xQueue, &key_val, portMAX_DELAY) != pdPASS)
{
}
}
bflb_mtimer_delay_ms(10);
}
}
|