矩阵按键初始化

#include"drv_key.h"
#include"drv_systick.h"
#define  KEY1 GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_15)
#define  KEY2 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)
#define  KEY3 GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_11)
#define  KEYA GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_12)
void KEY_Config(void)
{    
      GPIO_InitTypeDef  GPIO_InitStruct; 
       // 1,´ò¿ªÊ±ÖÓ GPIOA,GPIOB GPIOC,GPIODºÍAFIO

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB ,ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); 
      // 2,Ó³ÉäPA15,PB3 PB4
      GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGdisable,ENABLE);
    

  // 3,³õʼ»¯ GPIOA GPIOB GPIOC GPIOD (GPIOAºÍGPIOCÅäÖóÉÉÏÀ­ÊäÈë)
   
    GPIO_InitStruct.GPIO_Mode              =GPIO_Mode_IPU;//ÉÏÀ­ÊäÈë
    GPIO_InitStruct.GPIO_Pin               =GPIO_Pin_15;  //ÅäÖÃ15Òý½Å
    GPIO_InitStruct.GPIO_Speed             =GPIO_Speed_2MHz;// ÅäÖóÉËÙÂÊ10
    GPIO_Init(GPIOA,&GPIO_InitStruct);
    
    GPIO_InitStruct.GPIO_Mode              =GPIO_Mode_IPU; //ÉÏÀ­ÊäÈë
    GPIO_InitStruct.GPIO_Pin               =GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12;
    GPIO_InitStruct.GPIO_Speed             =GPIO_Speed_2MHz;
    GPIO_Init(GPIOC,&GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Mode              =GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
    GPIO_InitStruct.GPIO_Pin               =GPIO_Pin_5|GPIO_Pin_4|GPIO_Pin_3;
    GPIO_InitStruct.GPIO_Speed             =GPIO_Speed_2MHz;
    GPIO_Init(GPIOB,&GPIO_InitStruct);

    GPIO_InitStruct.GPIO_Mode              =GPIO_Mode_Out_PP;//ÍÆÍìÊä³ö
    GPIO_InitStruct.GPIO_Pin               =GPIO_Pin_2;
    GPIO_InitStruct.GPIO_Speed             =GPIO_Speed_10MHz;
    GPIO_Init(GPIOD,&GPIO_InitStruct);


   // 4,½«GPIOBºÍGPIODµÄ2£¬3£¬4£¬5ÅäÖÃ³É¸ßµçÆ½1

    GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
    GPIO_SetBits(GPIOD,GPIO_Pin_2);
    GPIO_SetBits(GPIOA,GPIO_Pin_15);
    GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
}
char KEY_data(void)
{
    GPIO_SetBits(GPIOB,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
    GPIO_SetBits(GPIOD,GPIO_Pin_2);
      GPIO_SetBits(GPIOA,GPIO_Pin_15);
    GPIO_SetBits(GPIOC,GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12);
     // ɨÃèµÚÒ»ÐÐ
     // ¸øGPIODÖÐPD2ÖÃ0
       GPIO_ResetBits(GPIOB,GPIO_Pin_5);
       if(KEY1==0 |KEY2==0|KEY3==0| KEYA==0){

       Systicks_DelayNms(30);//Ïû¶¶
       if(KEYA==0){
            
       return '1';
      }
       if(KEY3==0){
       return '2';
       }
     }
       if(KEY2==0){
       return '3';
       }
       if(KEY1==0){
       return 'A';
       }
       GPIO_ResetBits(GPIOB,GPIO_Pin_4);
      
       if(KEY1==0 |KEY2==0 |KEY3==0  |KEYA==0){
       Systicks_DelayNms(30);//Ïû¶¶ 
       if(KEY1==0){
       return 'B';
         }
      }  
       if(KEY2==0){
       return '6';
     } 
       if(KEY3==0){
       return '5';
       }
       if(KEYA==0){
       return '4';
       }
       GPIO_ResetBits(GPIOB,GPIO_Pin_3);
       if(KEY1==0 |KEY2==0 |KEY3==0  |KEYA==0){
       Systicks_DelayNms(30);//Ïû¶¶ 
       if(KEY1==0){
       return 'C';
       }
       if(KEY2==0){
       return '9';
       }
       if(KEY3==0){
       return '8';
       }
       if(KEYA==0){
       return '7';
       }
       }
       GPIO_ResetBits(GPIOD,GPIO_Pin_2);
       if(KEY1==0 |KEY2==0 |KEY3==0  |KEYA==0){
       Systicks_DelayNms(30);//Ïû¶¶ 
       if(KEY1==0){
       return 'D';
       }
       if(KEY2==0){
       return '#';
       }
       if(KEY3==0){
       return '0';
       }
       if(KEYA==0){
       return '*';
       }
       }
       return 0;
}
 

 

相关文章

显卡天梯图2024最新版,显卡是电脑进行图形处理的重要设备,...
初始化电脑时出现问题怎么办,可以使用win系统的安装介质,连...
todesk远程开机怎么设置,两台电脑要在同一局域网内,然后需...
油猴谷歌插件怎么安装,可以通过谷歌应用商店进行安装,需要...
虚拟内存这个名词想必很多人都听说过,我们在使用电脑的时候...