你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM8单片机按键检测电路设计

[复制链接]
y369369 发布时间:2021-4-16 14:01

2 O8 T6 W7 g& D( a6 e9 c: T
    硬件环境采用STM8SF103,电压为3.3V。电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。
    所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
1.1.jpg
    软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:
  1. //初始化只需要设置IO口模式即可。
    2 y  |, c7 o! _; V0 O# O( s
  2. GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉输入,不产生中断
    ) B+ V7 t8 _* {# _! J. ?; s/ O
  3. //按键检测部分4 ?  z8 Q: {. j! x
  4. /*
    9 A( H# N% m. O+ w
  5. #defineKEY10
    , |5 o( @) o5 ]: V
  6. #defineKEY1_PORT(GPIOD)
    : Z" V8 o/ C3 G! E8 C7 g, B
  7. #defineKEY1_PIN(GPIO_PIN_4)
    / f& i, _% J8 b( h) V) f
  8. #defineKEY21$ `" Q# j8 \, A1 U5 R3 y/ y2 W7 U
  9. #defineKEY2_PORT(GPIOC)% H* H1 o% U& H! I$ ?
  10. #defineKEY2_PIN(GPIO_PIN_1)" L+ S; v7 H/ H" Y$ N
  11. */
    ) {7 U, t0 N# n( _4 D6 ~5 c& F
  12. u8CheckKey(u8key)9 l5 j8 d3 |5 T3 L/ {& B- U
  13. {
    ) v8 G7 F% n) x% l) C6 ]* u; F
  14. if(key==KEY1)
    $ d1 n- D/ Q, L0 G2 C8 X
  15. {
    9 F: D: j7 j$ [; ?
  16. if(KEY1_PORT->IDR&KEY1_PIN)//检测到有按键了,IO口电压会被拉低
    5 R  _1 H3 l: S& D+ Z' T6 E
  17. {4 [: s! x$ c$ L& p
  18. delay_5ms();
    8 H  n1 `7 z- L+ P; f4 F  Q
  19. if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低电平+ U3 B6 }7 X/ N: l* n
  20. {: i# ^3 C* p1 E" i# G6 ]" r
  21. while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放开
    " `' `6 ?) n+ X8 ?8 A* O
  22. returnKEY1;
    7 A* i: M5 p' X- T! p
  23. }; g- ?4 i" O) }6 w4 ?
  24. }
    8 C* F" n" w; J- a
  25. return0;
    2 \1 Q& L; s7 n6 Y
  26. }elseif(key==KEY2)
    ! S) i% T' S5 s: M* i3 V
  27. {
    2 [8 S4 T; A" r1 z& f. G
  28. if(!(KEY2_PORT->IDR&KEY2_PIN))//检测到有按键了- c: i6 }, B: _# v
  29. {
    4 y% h) ~; ^" t9 E8 [1 A
  30. delay_5ms();
    8 S$ y) v& G; a' v# M; X/ n* s! O- H
  31. if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低电平
    ! z. }* o( j9 `/ I
  32. {  U0 b% r2 \7 m
  33. while(KEY2_PORT->IDR&KEY2_PIN);//等待放开2 K% [2 m) M% ?, B2 U) O
  34. returnKEY2;
    # P  b3 r  P$ _6 Q7 I& [) t) u: C
  35. }
    5 b) k& x9 w/ E" w8 m. S
  36. }
    # B* k# Q% E+ f8 _, L
  37. return0;% ]0 C- `5 g/ G1 J2 }+ n
  38. }
    8 z! C' G6 w7 U; x( r- y
  39. return0;
    2 T; m0 i2 z! [
  40. }
复制代码

1 V) R7 E8 c- W6 I% B) `( y5 Q
    总结一下,硬件电路将按键IO口的一端接地。软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
文章出处: STM32嵌入式开发

8 v, z( Z7 T; J0 i6 D: v! ^
收藏 评论0 发布时间:2021-4-16 14:01

举报

0个回答

所属标签

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版