打印
[STM8]

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

[复制链接]
1634|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chuxh|  楼主 | 2021-8-14 18:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
这个按键扫描程序经过试验是可以直接使用的,分享给大家,有需要的可以拿来参考。
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;
}

使用特权

评论回复
沙发
pengf| | 2021-8-14 18:46 | 只看该作者

使用特权

评论回复
板凳
jiahy| | 2021-8-14 18:47 | 只看该作者

使用特权

评论回复
地板
songqian17| | 2021-8-14 18:50 | 只看该作者
好东西,赞一个

使用特权

评论回复
5
午夜粪车| | 2021-8-14 18:51 | 只看该作者
比较有参考价值

使用特权

评论回复
6
jiajs| | 2021-8-14 18:54 | 只看该作者
六个IO做六个按键?

使用特权

评论回复
7
yszong| | 2021-8-14 18:55 | 只看该作者
不错的资料 感谢分享 就是io口用的有点多了

使用特权

评论回复
8
dingy| | 2021-8-14 18:59 | 只看该作者
亲 有材料单吗 来一份

使用特权

评论回复
9
wuhany| | 2021-8-14 19:00 | 只看该作者
如果少的话还好点 如果多的话就有点浪费了

使用特权

评论回复
10
shimx| | 2021-8-14 19:02 | 只看该作者
还可以啊  不是很费io口啊

使用特权

评论回复
11
chuxh|  楼主 | 2021-8-14 19:06 | 只看该作者
不是,是3个IO口做6个按键

使用特权

评论回复
12
andygirl| | 2021-8-26 16:54 | 只看该作者
这个原理图,有点意思,
不错

使用特权

评论回复
13
我想看大海| | 2021-8-28 16:48 | 只看该作者
虽然还是有点费IO,但是有一定参考意义

使用特权

评论回复
14
观海| | 2021-9-9 10:03 | 只看该作者
这样扫描会提高效率的吗

使用特权

评论回复
15
guanjiaer| | 2021-9-9 10:06 | 只看该作者
扫描一个来回耗时多久呢

使用特权

评论回复
16
heimaojingzhang| | 2021-9-9 10:08 | 只看该作者
扫描原理更改了吗

使用特权

评论回复
17
keaibukelian| | 2021-9-9 10:13 | 只看该作者
可以参考用一下

使用特权

评论回复
18
labasi| | 2021-9-9 10:17 | 只看该作者
真的很消耗引脚啊

使用特权

评论回复
19
match007| | 2021-9-9 11:24 | 只看该作者
这种原理设计,提供了一种思路

使用特权

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

本版积分规则

936

主题

11296

帖子

2

粉丝