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

[复制链接]
1527|9
 楼主| 紫气东升 发表于 2019-5-28 16:41 | 显示全部楼层 |阅读模式
本帖最后由 紫气东升 于 2019-5-30 08:49 编辑

这个按键扫描程序经过试验是可以直接使用的,分享给大家,有需要的可以拿来参考。
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;
}
11MCU.png
11KEY.png
mmuuss586 发表于 2019-6-7 17:02 | 显示全部楼层
感谢分享
qiang7260 发表于 2019-6-7 21:23 | 显示全部楼层

好东西,赞一个
比较有参考价值
戈卫东 发表于 2019-6-8 12:27 | 显示全部楼层
六个IO做六个按键?
观海 发表于 2019-6-18 09:27 | 显示全部楼层
非常感谢楼主分享
guanjiaer 发表于 2019-6-18 09:35 | 显示全部楼层
不错的资料 感谢分享 就是io口用的有点多了
heimaojingzhang 发表于 2019-6-18 09:39 | 显示全部楼层
亲 有材料单吗 来一份
keaibukelian 发表于 2019-6-18 10:00 | 显示全部楼层
如果少的话还好点 如果多的话就有点浪费了
磨砂 发表于 2019-6-18 11:28 | 显示全部楼层
还可以啊  不是很费io口啊
 楼主| 紫气东升 发表于 2019-9-27 11:19 | 显示全部楼层
戈卫东 发表于 2019-6-8 12:27
六个IO做六个按键?

不是,是3个IO口做6个按键
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

97

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部