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

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

[复制链接]
y369369 发布时间:2021-4-16 14:01
5 @! U+ R3 M4 [- n8 k" Y. [
    硬件环境采用STM8SF103,电压为3.3V。电路需要注意的是STM8SF103这系列的IO作为输入口时只能是上拉输入和悬浮输入,虽然是弱上拉,在VCC为3.3V电压时,仍然能够被拉升至3.0V左右。
    所以按键检测电路IO口一端需要接地,而不是外接上拉。悬浮方式下IO仍然会有0.89V左右电压,读取对应的IO寄存器IDR,仍然处于逻辑高电平状态。
1.1.jpg
    软件代码相对很简单,只需要将IO口设置成上拉输入即可。采用轮询代码如下:
  1. //初始化只需要设置IO口模式即可。
    - k: z! W/ _' Q, W/ R, q' l( V2 O
  2. GPIO_Init(KEY2_PORT,KEY2_PIN,GPIO_MODE_IN_PU_NO_IT);//上拉输入,不产生中断8 ]5 ?7 Q, s+ @
  3. //按键检测部分
    ( k6 [- I+ k. R
  4. /*% L/ G9 d0 S, H$ ?
  5. #defineKEY10
    , o6 ^% A' ]; N9 T7 w
  6. #defineKEY1_PORT(GPIOD)
    ( t  K- E/ m: i
  7. #defineKEY1_PIN(GPIO_PIN_4). `2 D. t# G; z
  8. #defineKEY219 @: _1 f" |1 r% ?
  9. #defineKEY2_PORT(GPIOC)
    # s0 a: ?. V. q, R: Y; A
  10. #defineKEY2_PIN(GPIO_PIN_1)0 K1 r* Z6 |9 l8 ]- `% U
  11. */
    3 W0 t2 p$ R! E% |/ M4 y
  12. u8CheckKey(u8key)) ^6 k- B, J% J* J! g2 }8 X% n0 u
  13. {9 ]$ R& r. i1 s; ?
  14. if(key==KEY1)% c' G$ r8 f5 A+ |2 e
  15. {
    6 s" n( c" I* p. L% A
  16. if(KEY1_PORT->IDR&KEY1_PIN)//检测到有按键了,IO口电压会被拉低
    # o+ V- y4 S3 A7 e. J
  17. {
    ' M. s6 w) y; r& j$ T, S
  18. delay_5ms();
    % Z5 t9 T1 L' m# ~8 D2 C" W
  19. if(KEY1_PORT->IDR&KEY1_PIN)//仍然存在低电平
    - T% F& j9 r+ n7 X
  20. {
    ! J( x, h0 @" I5 o1 t# O
  21. while(!(KEY1_PORT->IDR&KEY1_PIN));//等待放开
    9 w0 }! ^4 [; Q# O7 S* S) @7 Z1 |
  22. returnKEY1;
    3 w+ q7 Y: G! U$ D* v
  23. }+ \: J& h& a! l( [/ T8 f1 j: G3 G
  24. }7 R: @4 y' s, ]( E2 U/ o
  25. return0;
    3 I. U1 x9 ?/ y4 ]) ^  A+ Z
  26. }elseif(key==KEY2)
    # v  I' S/ s; r: k
  27. {* i5 T0 d1 Y* W; S% e( N2 P5 W
  28. if(!(KEY2_PORT->IDR&KEY2_PIN))//检测到有按键了, Z4 y0 h5 m9 W( b7 M
  29. {
    4 w( `  ^0 g' T1 g: `
  30. delay_5ms();1 |  q. \" v  A+ `5 q
  31. if(!(KEY2_PORT->IDR&KEY2_PIN))//仍然存在低电平2 L( A& r( ~' q8 H
  32. {7 K& d& K0 {! y" a
  33. while(KEY2_PORT->IDR&KEY2_PIN);//等待放开
    % F# n* u& Y/ M8 F2 V$ Z) q
  34. returnKEY2;& q0 I0 A# h: r+ g' e9 l0 W3 j) H
  35. }
    - j1 @* r  k& a; B; N
  36. }
    5 \- V5 E5 x5 p
  37. return0;7 `) L9 o# f7 \( N
  38. }
    $ [' v/ J* }5 n8 ]
  39. return0;7 X. m% G2 _/ i+ ]! W0 u
  40. }
复制代码

( p& Q' [- P" A+ s/ u
    总结一下,硬件电路将按键IO口的一端接地。软件配置不能使用悬浮输入方式,这种方式电压可能会不稳定。
文章出处: STM32嵌入式开发

. M9 v! w/ ~: ]% d( o2 a
收藏 评论0 发布时间:2021-4-16 14:01

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版