stm32 按键

简介: //°´¼ü³õʼ»¯º¯Êý void KEY_Init(void) //IO³õʼ»¯ { GPIO_InitTypeDef GPIO_InitStructure; //³õʼ»¯KEY0-->GPIOA.
                                    
//°´¼ü³õʼ»¯º¯Êý
void KEY_Init(void) //IO³õʼ»¯
{ 
     GPIO_InitTypeDef GPIO_InitStructure;
    //³õʼ»¯KEY0-->GPIOA.13,KEY1-->GPIOA.15  ÉÏÀ­ÊäÈë IPU
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOE,ENABLE);//ʹÄÜPORTA,PORTEʱÖÓ

    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;//PE2~4
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖóÉÉÏÀ­ÊäÈë
     GPIO_Init(GPIOE, &GPIO_InitStructure);//³õʼ»¯GPIOE2,3,4

    //³õʼ»¯ WK_UP-->GPIOA.0      ÏÂÀ­ÊäÈë  IPD
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;  //PA0ÉèÖóÉÊäÈ룬ĬÈÏÏÂÀ­      
    GPIO_Init(GPIOA, &GPIO_InitStructure);         //³õʼ»¯GPIOA.0

}
u8 KEY_Scan(u8 mode)
{     
    static u8 key_up=1;//°´¼ü°´ËÉ¿ª±êÖ¾
    if(mode)key_up=1;  //Ö§³ÖÁ¬°´          
    if(key_up&&(KEY0==0||KEY1==0||KEY2==0||KEY3==1))  //°´ÏÂÈ¥µÄ״̬key
    {
        delay_ms(10);//È¥¶¶¶¯
        key_up = 0;
             if(KEY0==0)return KEY_RIGHT;
        else if(KEY1==0)return KEY_DOWN;
        else if(KEY2==0)return KEY_LEFT;
        else if(KEY3==1)return KEY_UP;
    } else if(KEY0==1&&KEY1==1&&KEY2==1&&KEY3==0)key_up=1;         
       return 0;  // ÎÞ°´¼ü°´ÏÂ
}
    while(1)
    {
         t=KEY_Scan(0);        
           if(t)
        {                           
            switch(t)
            {                 
                case KEY_UP:    //µÆÈ«Ã𣬷äÃùÆ÷Ïì2Éù          PA.0¿ØÖÆPB.8
                    LED0=1;
            LED1=1;
                
                 BEEP = 1;
           delay_ms(100);
           BEEP = 0;
           delay_ms(200);
         BEEP = 1;
         delay_ms(100);
           BEEP = 0;
           delay_ms(200);
                    break;
                  case KEY_LEFT:    //LED0ÉÁÒ»´Î  PE.3¿ØÖÆPE.5
                    LED0=0;
                  delay_ms(200);
                  LED0=1;
                    break;
                  case KEY_DOWN:    //¿ØÖÆLED1·­×ª    PE.2¿ØÖÆPB.5
                    LED1=!LED1;
                    break;
                  case KEY_RIGHT:    //ͬʱ¿ØÖÆLED0,LED1·­×ª PE.4
                    LED0=0;
                  delay_ms(200);
                  LED0=1;
                    break;
            }
        }else delay_ms(10); 
    }     
 }

 

目录
相关文章
|
7月前
|
芯片
最详细STM32,cubeMX 按键点亮 led
最详细STM32,cubeMX 按键点亮 led
121 0
|
7月前
STM32速成笔记(三)—按键检测
本文介绍了如何利用STM32进行按键检测,先介绍了原理,后面给出了配置步骤和应用例程。此外,本文还叙述了如何利用一个按键单独控制一个LED亮灭,以及如何检测按键长短按。
248 0
STM32速成笔记(三)—按键检测
|
8天前
|
数据安全/隐私保护 芯片
【STM32基础 CubeMX】按键的检测
【STM32基础 CubeMX】按键的检测
|
C语言
STM32矩阵按键
STM32矩阵按键
|
芯片
STM32CubeMX按键模块化 点灯
我们继续讲解 stm32 f103,这篇文章将详细 为大家讲解 如何 使用 按键点亮 RGB 灯。
127 0
蓝桥杯 stm32 按键点灯 CubeMX
从图中我们可以看到有 4个按键,B1 , B2 , B3 , B4。 对应的 GPIO 端口是 PB0 , PB1, PB2 ,PA0。 当按键按下,IO 口读到低电平;按键弹起,IO 口读到高电平。 LED 的原理图,CubeMX 配置,以及代码讲解都在我的上篇文章 里详细讲解了,这 篇文章主要为大家讲解 按键 的使用。 蓝桥杯嵌入式之 LED 闪烁
105 0
STM32 使用外部中断实现按键模块化
STM32 使用外部中断实现按键模块化
97 0
STM32学习笔记(2) 使用外部中断控制按键
NVIC_IRQChannel ​​​​:对于RCT6来说,它的中断源如上图所示,在stm32f103.h中已经配置好寄存器,直接调用即可,下图中,RCT6主要用的是STM32F103X_HD的中断源
173 0
|
传感器
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)
577 0
STM32小项目总结1(部分基础知识+LED+蜂鸣器+按键控制LED+OLED显示屏+光敏传感器控制蜂鸣器)