门户网站建设公司流程,网站建设合同是谁开的,做汽车的网站编辑,沧州海外网站建设一.查看电路图 按键是使用的PB0,PB1,PB2,PA0四个引脚#xff0c;然后使用CubeMX配置引脚#xff0c;4个脚都配置为输入模式和上拉。 程序生成之后把不用的删掉#xff0c;需要的留下#xff0c;这里我把函数名改了。 然后写按键扫描读取程序#xff0c;这里参考的正点原子…
一.查看电路图 按键是使用的PB0,PB1,PB2,PA0四个引脚然后使用CubeMX配置引脚4个脚都配置为输入模式和上拉。 程序生成之后把不用的删掉需要的留下这里我把函数名改了。 然后写按键扫描读取程序这里参考的正点原子的按键输入程序感谢原子哥感谢左神。
这是点C程序
#include key.hvoid Key_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct {0};__HAL_RCC_GPIOA_CLK_ENABLE();__HAL_RCC_GPIOB_CLK_ENABLE();/*Configure GPIO pin : PA0 */GPIO_InitStruct.Pin GPIO_PIN_0;GPIO_InitStruct.Mode GPIO_MODE_INPUT;GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOA, GPIO_InitStruct);/*Configure GPIO pins : PB0 PB1 PB2 */GPIO_InitStruct.Pin GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;GPIO_InitStruct.Mode GPIO_MODE_INPUT;GPIO_InitStruct.Pull GPIO_PULLUP;HAL_GPIO_Init(GPIOB, GPIO_InitStruct);
}/*输入1|0 模式 1为连续按0为不连续按*/unsigned char Key_Scan(unsigned char mode)
{static unsigned int key_mode;if(mode 1)key_mode 1;if(key_mode 1(KEY0 0||KEY1 0||KEY2 0||KEY3 0)){HAL_Delay(10);key_mode 0;if(KEY0 0){return KEY0_FLG;}else if(KEY1 0){return KEY1_FLG;}else if(KEY2 0){return KEY2_FLG;}else if(KEY3 0){return KEY3_FLG;}}else if(KEY0 1||KEY1 1||KEY2 1||KEY3 1) key_mode 1;return 0;
}
这是点H程序
#ifndef __KEY_H
#define __KEY_H
#include main.h#define KEY0 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_0)
#define KEY1 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_1)
#define KEY2 HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_2)
#define KEY3 HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)#define KEY0_FLG 1
#define KEY1_FLG 2
#define KEY2_FLG 3
#define KEY3_FLG 4void Key_Init(void);
unsigned char Key_Scan(unsigned char mode);
#endif这是主程序滴答定时器10ms扫描一次按键1按下的话LED显示0x55按键2按下的话LED显示0xAA;Led_Disp程序是我自己写的,新手朋友注意。
unsigned char key;
int main(void)
{HAL_Init();SystemClock_Config();MX_GPIO_Init();LCD_Init();LED_Init();Key_Init();while (1){if(uwTick % 10 0){keyKey_Scan(0);}if(key 1){Led_Disp(0x55);}if(key 2){Led_Disp(0xaa);}}}
接下来看效果 按键演示