打印
[STM8]

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

[复制链接]
1312|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 紫气东升 于 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;
}

11KEY.png (68.3 KB )

11KEY.png

11MCU.png (73.69 KB )

11MCU.png

使用特权

评论回复
沙发
mmuuss586| | 2019-6-7 17:02 | 只看该作者
感谢分享

使用特权

评论回复
板凳
qiang7260| | 2019-6-7 21:23 | 只看该作者

好东西,赞一个
比较有参考价值

使用特权

评论回复
地板
戈卫东| | 2019-6-8 12:27 | 只看该作者
六个IO做六个按键?

使用特权

评论回复
5
观海| | 2019-6-18 09:27 | 只看该作者
非常感谢楼主分享

使用特权

评论回复
6
guanjiaer| | 2019-6-18 09:35 | 只看该作者
不错的资料 感谢分享 就是io口用的有点多了

使用特权

评论回复
7
heimaojingzhang| | 2019-6-18 09:39 | 只看该作者
亲 有材料单吗 来一份

使用特权

评论回复
8
keaibukelian| | 2019-6-18 10:00 | 只看该作者
如果少的话还好点 如果多的话就有点浪费了

使用特权

评论回复
9
磨砂| | 2019-6-18 11:28 | 只看该作者
还可以啊  不是很费io口啊

使用特权

评论回复
10
紫气东升|  楼主 | 2019-9-27 11:19 | 只看该作者
戈卫东 发表于 2019-6-8 12:27
六个IO做六个按键?

不是,是3个IO口做6个按键

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

97

帖子

0

粉丝