微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 按键应用

按键应用

时间:10-02 整理:3721RD 点击:

开发板上有多个按键,但是,其共分为两类,一类是软触开关,一类的电容按键。

软触开关就是我们平时最常用的那种有弹片的按键。

其使用就是按下时会检测到电平变化。

如核心板上的唤醒按键




底板上的按键,本来是四个引脚的,但是原理图上只画了两个。




可以看到,有的按键是接地,有的按键是接VCC,这里其实都是大同小异的。只是测一下电平布局。

在配置连接到这些按键上的引脚时,只要配置成输入模式,正确使用上拉下拉,速度可以选高速或是低速。

如下例程:


  1. GPIO_Initure.Pin=GPIO_PIN_0;            
  2.     GPIO_Initure.Mode=GPIO_MODE_INPUT;      
  3.     GPIO_Initure.Pull=GPIO_PULLDOWN;      
  4.     GPIO_Initure.Speed=GPIO_SPEED_HIGH;     
  5.     HAL_GPIO_Init(GPIOA,&GPIO_Initure);
  6.    
  7.     GPIO_Initure.Pin=GPIO_PIN_13;           
  8.     GPIO_Initure.Mode=GPIO_MODE_INPUT;      
  9.     GPIO_Initure.Pull=GPIO_PULLUP;         
  10.     GPIO_Initure.Speed=GPIO_SPEED_HIGH;     
  11.     HAL_GPIO_Init(GPIOC,&GPIO_Initure);

复制代码


之后使用HAL_GPIO_ReadPin函数读取引脚的电平就可以了。

如下是在例程中使用的宏定义。

  1. #define KEY0        HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_3)  //KEY0
  2. #define KEY1        HAL_GPIO_ReadPin(GPIOH,GPIO_PIN_2)  //KEY1
  3. #define KEY2        HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_13) //KEY2
  4. #define WK_UP       HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)

复制代码


还有一种是电容触摸按键。

其原理图如下:




其原理就是测量电容放电的时间。

如下是原子手册上的原理讲解的图片。



时间的测量使用的是定时2,具体的实现方法可以参考手册,通俗宜懂。

这种方法虽然看上去很高端,但是在代码实现上比较麻烦,不如轻触开关简单,另外在工业应用上似乎也是很少应用的。


就以电容按键来进行测试,将程序下载的开发板后,可以通过电容按键来控制DS0的状态,每按一次,DS0变化一次。




Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top