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

[复制链接]
2200|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 | 显示全部楼层
好东西,赞一个
午夜粪车 发表于 2021-8-14 18:51 | 显示全部楼层
比较有参考价值
jiajs 发表于 2021-8-14 18:54 | 显示全部楼层
六个IO做六个按键?
yszong 发表于 2021-8-14 18:55 | 显示全部楼层
不错的资料 感谢分享 就是io口用的有点多了
dingy 发表于 2021-8-14 18:59 | 显示全部楼层
亲 有材料单吗 来一份
wuhany 发表于 2021-8-14 19:00 | 显示全部楼层
如果少的话还好点 如果多的话就有点浪费了
shimx 发表于 2021-8-14 19:02 | 显示全部楼层
还可以啊  不是很费io口啊
 楼主| chuxh 发表于 2021-8-14 19:06 | 显示全部楼层
不是,是3个IO口做6个按键
andygirl 发表于 2021-8-26 16:54 | 显示全部楼层
这个原理图,有点意思,
不错
我想看大海 发表于 2021-8-28 16:48 | 显示全部楼层
虽然还是有点费IO,但是有一定参考意义

观海 发表于 2021-9-9 10:03 | 显示全部楼层
这样扫描会提高效率的吗
guanjiaer 发表于 2021-9-9 10:06 | 显示全部楼层
扫描一个来回耗时多久呢
heimaojingzhang 发表于 2021-9-9 10:08 | 显示全部楼层
扫描原理更改了吗
keaibukelian 发表于 2021-9-9 10:13 | 显示全部楼层
可以参考用一下
labasi 发表于 2021-9-9 10:17 | 显示全部楼层
真的很消耗引脚啊
match007 发表于 2021-9-9 11:24 | 显示全部楼层
这种原理设计,提供了一种思路
您需要登录后才可以回帖 登录 | 注册

本版积分规则

936

主题

11296

帖子

2

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