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

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

[复制链接]
y369369 发布时间:2021-4-16 14:01
3 I( j$ V+ V: g* Y$ L
    硬件环境采用STM8SF103,电压为3.3V。电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。
    所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
1.1.jpg
    软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:
  1. //初始化只需要设置IO口模式即可。
    4 z4 d9 p! k$ X: M8 R# L
  2. GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉输入,不产生中断. y% W1 ~: h% {' Y
  3. //按键检测部分
    % m! v4 Y2 o3 A) H$ T
  4. /*
    " u' j; C) _7 n0 S+ w3 B
  5. #defineKEY10
    5 H5 K* Z$ ~; D8 E0 i2 D: _
  6. #defineKEY1_PORT(GPIOD)
    ; Y) `8 {4 t) Z; v0 P8 ^
  7. #defineKEY1_PIN(GPIO_PIN_4)+ t9 O' O0 J2 V. `0 Z6 t! x
  8. #defineKEY21
    # f7 d& X7 H2 u# U
  9. #defineKEY2_PORT(GPIOC)
    ; q0 U' J  b0 u7 S1 n5 n) z4 ]' `
  10. #defineKEY2_PIN(GPIO_PIN_1)
    " Q% x; G: r0 [* g+ u- w& y
  11. */
    2 W' j9 e/ u/ u
  12. u8CheckKey(u8key)0 Q3 M3 \: v& Z
  13. {
    ' x& V+ D* }. ~
  14. if(key==KEY1). w# }8 m* i6 i
  15. {3 Q# z, U% u3 L9 ]3 M' f2 j
  16. if(KEY1_PORT->IDR&KEY1_PIN)//检测到有按键了,IO口电压会被拉低  T# i' Y- C, @6 |5 H$ k
  17. {% I; r' b9 n3 K4 l
  18. delay_5ms();
    6 ]/ j4 N, E7 n. u6 v9 o$ l
  19. if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低电平, R. B* z! m: }1 W) I0 H
  20. {- e* r1 Z+ j% V
  21. while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放开* D! M( K7 |2 L6 c% W/ G
  22. returnKEY1;- ]8 k( `) X( Q0 |+ q2 X
  23. }
    2 x! K; r: y& ~: m4 B, I% ?" s
  24. }! {2 ^. ^3 |: N7 H5 y/ s2 T/ S
  25. return0;
    7 D  \) r" {$ u: I
  26. }elseif(key==KEY2)& r' w4 \. z5 U8 z
  27. {
    7 g4 m' R" u. G0 J' O& C
  28. if(!(KEY2_PORT->IDR&KEY2_PIN))//检测到有按键了/ J* @+ U1 i1 j, Z- q) `
  29. {& K9 D6 }. r4 u
  30. delay_5ms();+ v! u" r+ h# R. E# b# }& _" c
  31. if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低电平
    ( O+ e+ U1 w# ]' U
  32. {
    8 T5 F, X4 T2 K* {: u
  33. while(KEY2_PORT->IDR&KEY2_PIN);//等待放开
    5 M/ H5 C* j8 |) c$ n
  34. returnKEY2;5 ^$ t" Y% L5 Y9 i2 m1 I
  35. }
    % p( j3 x  B- V, A* H
  36. }! p# o* `6 d) {6 L$ v+ ~6 q
  37. return0;6 o$ j+ e5 A- t7 m8 `
  38. }
    ' F0 m) O9 y5 p$ h
  39. return0;) ]7 @/ H6 L1 r9 `/ ?, B7 c* U. a
  40. }
复制代码
  q7 D& ~. i$ `+ o
    总结一下,硬件电路将按键IO口的一端接地。软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
文章出处: STM32嵌入式开发

+ Q7 J! J/ \, b0 a% x7 J/ ^0 e5 V
收藏 评论0 发布时间:2021-4-16 14:01

举报

0个回答

所属标签

相似技术帖

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