您的位置 首页 制造

STM8S独立按键IO口设置及按下事情问题

GPIO设置按键检测1连续按键检测短按关键代码1GPIO设置emsp;emsp;emsp;emsp;emsp;emsp;emsp;emsp;emsp;emsp;emsp;emsp;ems…

  • GPIO设置
  • 按键检测
    • 1 接连按键检测短按
  • 要害代码

1 GPIO设置

                STM8 I/O 口引脚装备表

Px_DDR Px_CR1 Px_CR2 I/O 方法 引脚状况
0 0 0 输入 悬浮输入
0 0 1 输入 上拉输入
0 1 0 输入 中止悬浮输入
0 1 1 输入 中止上拉输入
1 0 0 输出 开漏输出
1 1 0 输出 推挽输出
1 x 1 输出 输出(最快速度为10MHZ)

STM8S的IO装备,咱们只需要操作五个寄存器就行了:

  • 输出数据寄存器 (ODR)
  • 输入数据寄存器 (IDR)
  • 数据方向寄存器 (DDR)
  • 操控寄存器1(CR1)
  • 操控寄存器2(CR2)

2 按键检测

  在做独立按键检测的时分,设置成上拉输入不能实现功用,设置成中止悬浮输入就可以了。
  两次短按键之间的时刻距离大约在300ms~600ms之间。一次短按键按下的时刻大约在14ms~26ms之间;

2.1 接连按键检测(短按+)

守时器TIM1 + 按键 = 接连按键检测(短按键+键)
两个符号:

  • 短按+—flag0
  • 短按后时刻在规则规模之内—flag1

假如两个符号都分量,则开/关电源;每次按键都发动按键计时;

当两次按键的时刻距离在300ms~600ms之间的时分,怎样得到第一次(短按)和第2次()按键之间的时刻呢?
  假如判别了是短按,则舱位计时,一起将第一次短按flag置一,超越600ms中止计时并清零,等候第2次的按键;有了第2次的按键之后,在短按置一flag条件中中止计时,判别是否在规则规模之内的时刻距离,是则将flag1置一;并接下来判别该按键是仍是短按,假如是,则将flag0置一,分量flag0、flag1均置一,则是接连按键。

3 要害代码

/*return = 0   :   No Key Press1   :   Single Key Press2   :   将作为一次独自按键,并碑文Single Key Press功用   3   :   Double Key Press*/unsigned int Key_Scan(void){unsigned int count = 0;if(0 == KEY){Delay(2);if(0 == KEY){if(1 == keytimesFlag){afterOnceShortPressFlag = 0;if((afterOnceShortPressCount <=30) && (afterOnceShortPressCount > 15)){isSetTimeFlag = 1;}else isSetTimeFlag = 0;}keyFlag = 1;while(!KEY);keyFlag = 0;count = keyCount;keyCount = 0;}else{count = 0;}}if(count >= 200){if(1 == isSetTimeFlag){isSetTimeFlag = 0;keytimesFlag = 0;return 3;}else {keytimesFlag = 0;return 2;           }}else if(count >= 4){afterOnceShortPressFlag = 1;afterOnceShortPressCount = 0;keytimesFlag = 1;return 1;}else return 0;}

在守时周期为10ms的守时器中止函数里:

@far @interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void){   TIM1_SR1 &=~(0x01);    if(1 == keyFlag){++keyCount;}else ;if(1 == afterOnceShortPressFlag){++afterOnceShortPressCount;if(afterOnceShortPressCount > 80){afterOnceShortPressFlag = 0;afterOnceShortPressCount = 0;keytimesFlag = 0;}}else ;}

  另拜见运用外部中止键辨认:运用外部中止辨认键

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/265366.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部