找回密码
 注册
关于网站域名变更的通知
查看: 212|回复: 2
打印 上一主题 下一主题

请问这个51单片机按键单双击程序怎么不成功?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-1-4 12:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
#include "reg52.h"             # Z3 v( U4 |  n2 H  d7 d
6 g5 f& y+ l# m- q8 x3 v# _* ^
typedef unsigned int u16;        z6 i; [1 j: x  q3 ~7 Z0 G
typedef unsigned char u8;7 d2 p- A. P% o' ]3 G2 T" O* S
sbit ROTARY_MUTE=P3^1;       //按键! @% C  Q' S7 P5 O6 [

% r8 m: y  P  n+ B) z  w8 S* U+ }: g; Q% ]
void keypros()
5 `; W) L& h) N/ K( O{
2 s" _7 m8 X3 e3 c, L0 q- x+ F' m6 Q% X    static bit key_down=0;  //按键按下标志位
) G+ I4 r) t$ q    static  key_down_num=0;- k( O. [$ @. h3 m6 q% M
    static u8 count1=0;
" T$ p8 k% t3 _$ i; S7 B% |    static u16 count2=0;3 ]: c0 M3 z6 y- o: G3 j* Q) V
    if(key_down==1)              * t& @  |4 h+ }/ f. w+ ?: e
    {
1 q# \" E* p4 S9 j        count2++;                  
4 X& u5 e: p9 x% M; g" a- _$ q        if(count2>20000)           
3 F' u. ]8 E- R" g. [& V        {) N9 I9 k* b' F: ?+ A' f+ D
            count2=0;                           3 X; q: M% T/ V: y7 O8 g7 a
            if(key_down_num==1)            
) w: \' e+ r0 v8 V6 d  w% Z            {
: [2 p) l: R0 P& \% t                 key_down_num=0;3 i3 Z; f) Q1 S# d9 x$ S
                 P2=0X01;# }/ x& p+ `' V4 y# _: s
                 key_down=0;
  z( T  K3 Q) \0 H9 o& w6 O            }2 w/ z  n: q4 T% ^6 B3 i
            if(key_down_num==2): z3 i- k1 t6 f: W" |5 `( ^4 q
            {1 E3 d: V% a  J
                key_down_num=0;  h4 x0 u0 s  `+ E7 A
                P2=0x00;9 P$ T. V: z* m  ^
                key_down=0;# b' [1 m; g% H2 l# D4 l  o
            }
, T& W& b, \7 K. ?5 ~4 w8 L        }
9 Y; M& \) l* k                if(ROTARY_MUTE==1)        
5 A" w1 m6 A' {1 F- o                {% X% ?( \! j  c2 B6 O7 ^
                         if(ROTARY_MUTE==0)              6 l# @8 s9 {5 p' e
                        {        
, a4 P0 L$ X" M. N  S) v; `                         key_down_num++;                    
$ {! u, c7 c1 K0 b                        }3 b$ C5 |- H5 h: }4 l# h) ?
                }
0 d$ K/ h9 L4 {: \        }
, x2 e# X: `0 `5 b2 D
9 X% z: W$ Z6 ?6 k    else                       
; D, J3 L/ N" n0 |6 z# ~: U1 H    {
  H4 U3 |1 X9 x/ U5 K- X        if(ROTARY_MUTE==0)              
* B; K7 t2 C9 x- N  J/ H7 x6 n        {! ~6 a8 u% Z  M6 i- P; B; [" {, j
            count1++;                     
+ f, W3 f7 v7 w+ x# |. S' h            if(count1>100)                - H- }. d$ Z0 m- ?
            {8 \  g! c& v- o
                count1=0;                  
" E8 o' X0 R; J$ x1 J* P                if(ROTARY_MUTE==0)         " C, D2 p# z& i
                {3 j/ `# o# x+ R# |( P( ]
                    key_down=1;
" t5 Y2 K- g( E; g          key_down_num++;                    
! ?9 r. \7 q* f' M$ @$ Y                }9 R+ x! F, _4 E( a( ?* N4 h- K
            }! A0 W9 o  H& M: d
        }
4 {6 h5 p" b8 E* l0 n        else0 |! X  G  v  G  X) R" d7 j
        {. }  p: k! z2 w4 l& z' f" |8 q
            count1=0;                     
3 F8 I1 z, F/ B7 ~        }; C" ^, u- ?! r. Q6 `" q
    }8 q$ c, X1 M: p, L8 f) d  Z9 q7 b

$ s$ E0 w1 d% w/ @% U
% d+ I+ S4 ?2 m5 a; x/ l1 n. {* {}: E: n$ M/ e! Y1 e5 Y0 ]: e

1 Z1 i  V! ?2 G0 y6 ^' d# Z. o2 t, Y) T7 n- R% B
void main()
1 }2 a8 t0 Y4 e6 _0 i{    9 F, U( f4 x9 N. r! D: \4 N
    while(1); M. {  V/ q5 u: g
    {   
( N) d' O" a3 j" y. `) G! I. p+ {        keypros();  //按键处理函数    + ^. p3 K! C$ T7 @
    }        0 V# K0 R3 }8 b+ r% w2 o
}
! S3 v9 Q$ b% D0 S2 j/ _: Z. z# k2 m, w  w% Z

该用户从未签到

2#
发表于 2022-1-4 13:30 | 只看该作者
以#include "reg52.h"为第1行$ v- F3 ?! q# j! _+ W: m0 j  N
由第33到35行的时间太短(几个us). k0 e( L" K+ e3 K1 Z- P8 c6 w
不足以检测到按键按下

该用户从未签到

3#
发表于 2022-1-4 14:23 | 只看该作者

; B* O. z2 z7 y" x& f你可以改成一定时间内计时是否按下第二次,比如300ms,不要死循环在那里等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-9 09:06 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表