STM32
直播中

carey123

10年用户 1557经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

如何完美实现按键key实现控制led灯?

如何完美实现按键key实现控制led灯?

回帖(1)

熊洁

2021-11-18 10:53:22
1.软件及工程环境搭建

  

  2.按键key实现控制led灯

  


  • 首先添加一下库函数

      


  • 看一下开发板原理图

      

      


      

      


      

      

    得到对应的按键对应KEY1->PA0,KEY2->PD2,KEY3->PC12;
    点击KEY1是为高电平,KEY2,KEY3分别是低电平。
  • 说这么多有用?快快上代码吧!
  • 先LED初始化,就不写了,第一天的有,不会的可以去看看,那就KEYInit初始化

  
#include "key.h"
/*******************************************************
*函数名:KEYInit
*功  能:按键初始化
*参  数:无
*返  回:无
*备  注:脚PA0,PD2,PC12
********************************************************/
void KEYInit(void)
{
           //KEY1
           GPIO_InitTypeDef GPIO;//自定义       
           RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//外部时钟A使能
           GPIO.GPIO_Pin = GPIO_Pin_0;//选择引脚
           GPIO.GPIO_Mode = GPIO_Mode_IN;//选择模式
           GPIO.GPIO_PuPd = GPIO_PuPd_DOWN;//选择上下拉
           GPIO_Init(GPIOA,&GPIO);//写入寄存器
           //KEY2
           RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);//外部时钟D使能
           GPIO.GPIO_Pin = GPIO_Pin_2;//选择引脚
           GPIO.GPIO_Mode = GPIO_Mode_IN;//选择模式
           GPIO.GPIO_PuPd = GPIO_PuPd_DOWN;//选择上下拉
           GPIO_Init(GPIOD,&GPIO);//写入寄存器
           //KEY3
           RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//外部时钟C使能
           GPIO.GPIO_Pin = GPIO_Pin_12;//选择引脚
           GPIO.GPIO_Mode = GPIO_Mode_IN;//选择模式
           GPIO.GPIO_PuPd = GPIO_PuPd_DOWN;//选择上下拉
           GPIO_Init(GPIOC,&GPIO);//写入寄存器
}


给一个自定义的延迟函数(这延迟函数好烦,早晚不要他)
void dalyg(int n)
{
           int i;
           for(i=0;i }


(主要的来了来了,他来了)按键点击控制led1灯开和关
/*******************************************************
*函数名:flag_key1
*功  能:实现key1按键一点击控制led1灯开和关
*参  数:无       
*返  回:无
*备  注:
********************************************************/
void flag_key1(void)
{
           static int k=1,i;
           if(KEY1==1  &&  k==1)
           {
                           i++;
                           k=0;
                           dalyg(50);
           }               
           else if(KEY1==0)
           {
                           k=1;
                           dalyg(50);
           }
           if(i%2)
           GPIO_SetBits(GPIOC,GPIO_Pin_11);
           else
           GPIO_ResetBits(GPIOC,GPIO_Pin_11);
}


/*******************************************************
*函数名:flag_key2
*功  能:实现key2按键一点击控制led2灯开和关
*参  数:无       
*返  回:无
*备  注:
********************************************************/


void flag_key2(void)
{
           static int k=1,i;
           if(KEY2==0 &&  k==1)
           {
                           i++;
                           k=0;
                           dalyg(50);
           }               
           else if(KEY2==1)
           {
                           k=1;
                           dalyg(50);
           }
           if(i%2)
           GPIO_SetBits(GPIOC,GPIO_Pin_10);
           else
           GPIO_ResetBits(GPIOC,GPIO_Pin_10);
}
/*******************************************************
*函数名:flag_key3
*功  能:实现key3按键一点击控制led3灯开和关
*参  数:无       
*返  回:无
*备  注:
********************************************************/


void flag_key3(void)
{
           static int k=1,i;
           if(KEY3==0 &&  k==1)
           {
                           i++;
                           k=0;
                           dalyg(50);
           }               
           else if(KEY3==1)
           {
                           k=1;
                           dalyg(50);
           }
           if(i%2)
           GPIO_SetBits(GPIOC,GPIO_Pin_13);
           else
           GPIO_ResetBits(GPIOC,GPIO_Pin_13);
}


.h需要引用这个三句
//宏定义KEY1,KEY2,KEY3的输出状态
#define KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)
#define KEY2 GPIO_ReadInputDataBit(GPIOD,GPIO_Pin_2)
#define KEY3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)


主函数调用相关的函数
LEDInit();//LED初始化
KEYInit();//按键初始化
while(1)
{
        flag_key1();
        flag_key2();
        flag_key3();
}





  • 到此完美实现按键key实现控制led灯,最后感谢大家阅读,如果需要其他相关资料请联系我。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分