查看: 836|回复: 1

[经验] STM32F1系列部分程序汇总-----------按键

[复制链接]
  • TA的每日心情
    无聊
    2018-11-16 10:48
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2020-1-2 09:37:18 | 显示全部楼层 |阅读模式
    分享到:
    按键

    PA0  下拉 按键按下检测为低电平
    PE2、PE3、PE4 上拉 按键按下检测为高电平
    功能:按下KEY_UP红LED灭、按下KEY2红led亮
              按下KEY1绿led灭、按下KEY0绿led亮
    key.h
    • #IFndef  _KEY_H_
    • #define  _KEY_H_
    • #define KEY_UP PAin(0)
    • #define KEY0   PEin(2)
    • #define KEY1   PEin(3)
    • #define KEY2   PEin(4)
    • #include "STM32f10x.h"
    • #include "sys.h"
    • //按键初始化
    • void         key_init(void);

    [color=rgb(51, 102, 153) !important]复制代码

    key.c
    • #include "key.h"
    • #include "delay.h"
    • #include "led.h"
    • void key_init(void)
    • {
    •         GPIO_InitTypeDef GPIO_INIT_KEY;
    • RCC_APB2PeriphclockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);
    •         GPIO_INIT_KEY.GPIO_Mode  =  GPIO_Mode_IPD;
    •         GPIO_INIT_KEY.GPIO_Pin   =  GPIO_Pin_0;
    •         GPIO_INIT_KEY.GPIO_Speed =  GPIO_Speed_50MHz;
    •         GPIO_Init(GPIOA,&GPIO_INIT_KEY);
    •         GPIO_INIT_KEY.GPIO_Mode  =  GPIO_Mode_IPU;
    •         GPIO_INIT_KEY.GPIO_Pin   =  GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;
    •         GPIO_INIT_KEY.GPIO_Speed =  GPIO_Speed_50MHz;
    •         GPIO_Init(GPIOE,&GPIO_INIT_KEY);
    • }
    • unsigned int key_scan(void)
    • {
    •    unsigned int key_value = 0;
    •    if(KEY_UP == 1)
    •    {
    •       key_value = 1;
    •    }
    •    else if(KEY0 == 0)
    •    {
    •      key_value = 2;
    •    }
    •    else if(KEY1 == 0)
    •    {
    •      key_value = 3;
    •    }
    •    else if(KEY2 == 0)
    •   {
    •     key_value = 4;
    •   }
    •   else
    •     key_value = 0;
    • return key_value;
    • }
    • void key_debounce(unsigned int key_value)
    • {
    •    if(key_value)
    •    {
    •        delay_ms(100);
    •        if(key_value)
    •        {
    •            switch(key_value)
    •            {
    •               case 1:         red_led = 1;
    •                  break;
    •               case 2:  red_led = 0;
    •                  break;
    •               case 3:  green_led = 1;
    •                  break;
    •               case 4:  green_led = 0;
    •                  break;
    •               default: red_led   = red_led;
    •                            green_led = green_led;
    •                  break;
    •             }
    •          }
    •      }
    • }

    [color=rgb(51, 102, 153) !important]复制代码


    main.c
    • #include "stm32f10x.h"
    • #include "led.h"
    • #include "beep.h"
    • #include "delay.h"
    • #include "key.h"
    • int main()
    • {
    •         unsigned int key_value;
    •         led_init();
    •         //beep_init();
    •         delay_init();
    •         key_init();
    •   while(1)
    •   {
    •   key_value = key_scan();
    •   key_debounce(key_value);
    •   }
    • }


    [color=rgb(51, 102, 153) !important]复制代码





    回复

    使用道具 举报

    该用户从未签到

    发表于 2020-12-11 09:10:56 | 显示全部楼层
    51单片机通用的delay.h文件是楼主有吗
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-23 19:53 , Processed in 0.130644 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.