可以自己做漫画的网站,韩国网站购物,短视频代运营方案模板,北京国贸网站建设公司功能描述#xff1a;
实现矩阵按键验证#xff0c;将矩阵按键的按键值#xff0c;通过串口显示#xff0c;便于后面使用。
实物图 原理图#xff1a; 编程原理#xff1a; 原理很简单#xff0c;就是通过循环设置引脚为低电平#xff0c;另外引脚扫描读取电平值…功能描述
实现矩阵按键验证将矩阵按键的按键值通过串口显示便于后面使用。
实物图 原理图 编程原理 原理很简单就是通过循环设置引脚为低电平另外引脚扫描读取电平值如果是低电平则表示按键按下就是一个矩阵关系这里直接将扫描代码分享给大家使用最简单的思路实现。
接线表 矩阵按键 STM32 模式 R4 PB12 上拉输入模式 R3 PB13 上拉输入模式 R2 PB14 上拉输入模式 R1 PB15 上拉输入模式 C1 PA8 推挽输出模式 C2 PA9 推挽输出模式 C3 PA10 推挽输出模式 C4 PA11 推挽输出模式 - PA2 USART2_TX - PA3 USART2_RX
cubeMX配置 代码如下
uint16_t keyScan(void)
{HAL_GPIO_WritePin(GPIOA, COL1_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, COL2_Pin|COL3_Pin|COL4_Pin, GPIO_PIN_SET);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 4\r\n, 8, 0XFFFF);return 4;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 8\r\n, 8, 0XFFFF);return 8;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 12\r\n, 9, 0XFFFF);return 12;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 16\r\n, 9, 0XFFFF);return 16;}HAL_GPIO_WritePin(GPIOA, COL2_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, COL1_Pin|COL3_Pin|COL4_Pin, GPIO_PIN_SET);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 3\r\n, 9, 0XFFFF);return 3;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 7\r\n, 9, 0XFFFF);return 7;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 11\r\n, 9, 0XFFFF);return 11;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 15\r\n, 9, 0XFFFF);return 15;}HAL_GPIO_WritePin(GPIOA, COL3_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, COL1_Pin|COL2_Pin|COL4_Pin, GPIO_PIN_SET);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 2\r\n, 9, 0XFFFF);return 2;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 6\r\n, 9, 0XFFFF);return 6;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 10\r\n, 9, 0XFFFF);return 10;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 14\r\n, 9, 0XFFFF);return 14;}HAL_GPIO_WritePin(GPIOA, COL4_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(GPIOA, COL1_Pin|COL2_Pin|COL3_Pin, GPIO_PIN_SET);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW4_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 1\r\n, 9, 0XFFFF);return 1;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW3_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 5\r\n, 9, 0XFFFF);return 5;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW2_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 9\r\n, 9, 0XFFFF);return 9;}if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_Delay(20);if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin)){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);}while(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOB, ROW1_Pin));//HAL_UART_Transmit(huart2, (uint8_t *)key: 13\r\n, 9, 0XFFFF);return 13;}return 0;
}
实现效果
如下 源码链接
STM32CubeMXHAL库实现矩阵按键资源-CSDN文库吾心电子