5D摇杆模块(HAL)

5D摇杆模块(HAL)

基本配置

5D摇杆模块具有8个引脚,一个COM公共端,可以接GND或者VCC,剩下7个引脚分别为UP,DWN,LFT,RHT,MID,SET,RST,在对应按键按下后相应引脚会输出COM端所接电平。

代码

本代码引用正点原子按键例程代码。
首先是头文件

#ifndef __KEY_H
#define __KEY_H
#include "sys.h"
//下面的方式是通过直接操作 HAL 库函数方式读取 IO
#define UP  HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_9) //UP 按键 PG9
#define DWN HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_10) //DWN 按键 PG10
#define LFT HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_11) //LFT 按键 PG11
#define RHT HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_12) //RHT 按键 PG12
#define MID HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_13) //MID 按键 PG13
#define SET HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_14) //SET 按键 PG14
#define RST HAL_GPIO_ReadPin(GPIOG,GPIO_PIN_15) //RST 按键 PG15
#define UP_PRES  1
#define DWN_PRES 2
#define LFT_PRES 3
#define RHT_PRES 4
#define MID_PRES 5
#define SET_PRES 6
#define RST_PRES 7
void KEY_Init(void); //IO 初始化
u8 KEY_Scan(u8); //按键扫描函数
#endif

之后是源文件
引脚采用上拉输入,COM接GND,检测引脚低电平

#include "5d_key.h"
#include "delay.h"
//按键初始化函数
void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  
  __HAL_RCC_GPIOG_CLK_ENABLE();

  /*Configure GPIO pins : PG9 PG10 PG11 PG12
                           PG13 PG14 PG15 */
  GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10|GPIO_PIN_11|GPIO_PIN_12
                          |GPIO_PIN_13|GPIO_PIN_14|GPIO_PIN_15;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(GPIOG, &GPIO_InitStruct);
}
//按键处理函数
//返回按键值
//mode:0,不支持连续按;1,支持连续按;
//0,没有任何按键按下
//1,WKUP 按下 WK_UP
//注意此函数有响应优先级,RST>DWN>LFT>RHT>MID>SET>UP
u8 KEY_Scan(u8 mode)
{
 static u8 key_up=1; //按键松开标志
 if(mode==1)key_up=1; //支持连按
 if(key_up==1&&(UP==0||DWN==0||LFT==0||RHT==0||MID==0||SET==0||RST==0))
 {
 delay_ms(10);
 key_up=0;
      if(RST==0) return RST_PRES;
 else if(DWN==0) return DWN_PRES;
 else if(LFT==0) return LFT_PRES;
 else if(RHT==0) return RHT_PRES; 
 else if(MID==0) return MID_PRES;
 else if(SET==0) return SET_PRES;
 else if(UP==0)  return UP_PRES;
 }
 else if(UP==1&&DWN==1&&LFT==1&&RHT==1&&MID==1&&SET==1&&RST==1)key_up=1;
 return 0; //无按键按下
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值