STM8S105K4不太一样的按键扫描程序

2019-07-18 20:25发布

本帖最后由 紫气东升 于 2019-5-30 08:47 编辑

这个按键扫描程序经过试验是可以直接使用的,分享给大家,有需要的可以拿来参考。
u8 kbScan(void)
{
  static u8 k = 0;
  while(1)
  {
        GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_PU_NO_IT);             //输入上拉,没有外部中断
        GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST);  //输出推挽,高电平,10MHz
        GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);  //输出推挽,高电平,10MHz
        
        GPIO_WriteHigh(GPIOD, GPIO_PIN_2);
        GPIO_WriteLow(GPIOD, GPIO_PIN_3);
        if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_4))
        {
              k = KEY_SPK_MUTE; //喇叭静音(根据个人需要修改)
              break;
        }

        GPIO_WriteHigh(GPIOD, GPIO_PIN_3);
        GPIO_WriteLow(GPIOD, GPIO_PIN_2);
        if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_4))
        {
              k = KEY_FUN_DOWN;  // 音量-(根据个人需要修改)
              break;
        }

        GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_PU_NO_IT);            //输入上拉,没有外部中断
        GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST);   //输出推挽,高电平,10MHz
        GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST);   //输出推挽,高电平,10MHz

        GPIO_WriteHigh(GPIOD, GPIO_PIN_2);
        GPIO_WriteLow(GPIOD, GPIO_PIN_4);                                
        if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_3))
        {
              k = KEY_OFF;  // 蓝牙(根据个人需要修改)
              break;
        }

        GPIO_WriteHigh(GPIOD, GPIO_PIN_4);                                
        GPIO_WriteLow(GPIOD, GPIO_PIN_2);                                
        if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_3))
        {
              k = KEY_FUN_UP;  // 音量+(根据个人需要修改)
              break;
        }

        GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_IN_PU_NO_IT);      //输入上拉,没有外部中断
        GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
        GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz           

        GPIO_WriteHigh(GPIOD, GPIO_PIN_3);
        GPIO_WriteLow(GPIOD, GPIO_PIN_4);                                 
        if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_2))
        {
              k = KEY_ON;  // 摘机挂机(根据个人需要修改)
              break;
        }

        GPIO_WriteHigh(GPIOD, GPIO_PIN_4);                                    
        GPIO_WriteLow(GPIOD, GPIO_PIN_3);                                    
        if(RESET == GPIO_ReadInputPin(GPIOD, GPIO_PIN_2))
        {
              k = KEY_MIC_MUTE;  // 麦克风静音(根据个人需要修改)
              break;
        }

        GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
        GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz
        GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_HIGH_FAST); //输出推挽,高电平,10MHz

        k = 0;
        break;
      }
  return k;
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。