|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
51单片机学习:基于状态机的按键对时程序(短按,长按,连发)
( e) Q( l! x/ c1 w. {# I) O: X1 B1 Q* t* R6 k+ F
/ y2 _6 }' V) K& O) H: E. j
' n! V" w, g' H2 y2 r k8 Q& b( o5 t, ~" V1 N$ ]4 K9 u6 }
之前的电子钟程序中,用的按键消抖处理方法是10ms的延时,这种方法效率比较低
" u& U" ~7 |. z. s所以现在利用状态机原理重写一下,效率很高啊
0 u9 S7 {$ X: E, r/ f* j' |2 i- N8 e2 Z1 _. K: i
4个独立按键中用到3个,
) T1 z' t% d5 R% x y3 F1 H- Hkeys5用于切换对时分秒等状态,keys2是减小数值,keys3是增加数值
7 B! @) o) g" S; @ u# o
* a! j3 ]1 z9 n. p4 L) E _同时可以判断按键的"短按,长按,连发"等功能7 G8 Y* P6 q' X U6 E2 A5 c9 a
小于2秒视为短按,* s% t z) e+ D& v' K4 }& j9 @& O
大于2秒视为长按,& J8 [: E5 i9 }1 }
在长按状态下每0.2秒自动连发一次, 这样对时的时候就不用按N次了
9 x! H. b a2 P) a% E. i4 H: J" z5 ~ X0 Z' N5 I2 h( V' j
1 c- u5 c+ ~5 D2 ]! E4 ~
程序分很多个文件 ,Keil uVision4 打包! B! q3 L9 O2 y' m) x
0 y. ^, l& W8 i4 i* d& F
$ H% {0 o2 G# m& A3 L, h7 e
![]()
: f( t5 b$ t$ k U2 Y$ Q9 K2 w. V3 j3 x/ z, K) Z
, m% ]1 W% n0 X3 V; i6 i
/ o- @1 I* Z5 {% C1 u
|
|