发 帖  
原厂入驻New

【雨的笔记】STM32F1系列部分程序汇总-----------按键

2019-12-25 20:42:05  813 STM32 LED
分享
0
本帖最后由 拾光333 于 2019-12-26 13:52 编辑

按键
SHUK_K%DLHCF9]2VXZWWI3L.png
PA0  下拉 按键按下检测为低电平
PE2、PE3、PE4 上拉 按键按下检测为高电平
功能:按下KEY_UP红LED灭、按下KEY2红led亮
          按下KEY1绿led灭、按下KEY0绿led亮
key.h
  1. #IFndef  _KEY_H_
  2. #define  _KEY_H_

  3. #define KEY_UP PAin(0)
  4. #define KEY0   PEin(2)
  5. #define KEY1   PEin(3)
  6. #define KEY2   PEin(4)

  7. #include "STM32f10x.h"
  8. #include "sys.h"

  9. //按键初始化
  10. void         key_init(void);
复制代码
key.c
  1. #include "key.h"
  2. #include "delay.h"
  3. #include "led.h"

  4. void key_init(void)
  5. {
  6.         GPIO_InitTypeDef GPIO_INIT_KEY;
  7.         
  8. RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
  9.         
  10.         GPIO_INIT_KEY.GPIO_Mode  =  GPIO_Mode_IPD;
  11.         GPIO_INIT_KEY.GPIO_Pin   =  GPIO_Pin_0;
  12.         GPIO_INIT_KEY.GPIO_Speed =  GPIO_Speed_50MHz;
  13.         GPIO_Init(GPIOA,&GPIO_INIT_KEY);
  14.         
  15.         GPIO_INIT_KEY.GPIO_Mode  =  GPIO_Mode_IPU;
  16.         GPIO_INIT_KEY.GPIO_Pin   =  GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
  17.         GPIO_INIT_KEY.GPIO_Speed =  GPIO_Speed_50MHz;
  18.         GPIO_Init(GPIOE,&GPIO_INIT_KEY);
  19.         
  20. }

  21. unsigned int key_scan(void)
  22. {
  23.    unsigned int key_value = 0;
  24.    if(KEY_UP == 1)
  25.    {
  26.       key_value = 1;
  27.    }
  28.    else if(KEY0 == 0)
  29.    {
  30.      key_value = 2;
  31.    }
  32.    else if(KEY1 == 0)
  33.    {
  34.      key_value = 3;
  35.    }
  36.    else if(KEY2 == 0)
  37.   {
  38.     key_value = 4;
  39.   }
  40.   else
  41.     key_value = 0;
  42. return key_value;
  43. }

  44. void key_debounce(unsigned int key_value)
  45. {
  46.    if(key_value)
  47.    {
  48.        delay_ms(100);
  49.        if(key_value)
  50.        {
  51.            switch(key_value)
  52.            {
  53.               case 1:         red_led = 1;
  54.                  break;
  55.               case 2:  red_led = 0;
  56.                  break;
  57.               case 3:  green_led = 1;
  58.                  break;
  59.               case 4:  green_led = 0;
  60.                  break;
  61.               default: red_led   = red_led;
  62.                            green_led = green_led;
  63.                  break;
  64.             }
  65.          }
  66.      }
  67. }
复制代码

main.c
  1. #include "stm32f10x.h"
  2. #include "led.h"
  3. #include "beep.h"
  4. #include "delay.h"
  5. #include "key.h"


  6. int main()
  7. {
  8.         unsigned int key_value;
  9.         led_init();
  10.         //beep_init();
  11.         delay_init();
  12.         key_init();
  13.   while(1)
  14.   {
  15.   key_value = key_scan();
  16.   key_debounce(key_value);

  17.   }
  18. }

复制代码


相关经验

拾光333 2019-12-25 20:43:38
PA0下拉,PE2、PE3、PE4上拉,打错了。
回复

举报

评论

高级模式
您需要登录后才可以回帖 登录 | 注册

发经验
关闭

站长推荐 上一条 /6 下一条

快速回复 返回顶部 返回列表