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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
#include "reg52.h"             : q3 {; U: P! Q; ]
- `/ s1 J- h5 F* e5 {
typedef unsigned int u16;      ) a$ s* N, @( S, o
typedef unsigned char u8;
; Q% ]" |/ I6 @  ksbit ROTARY_MUTE=P3^1;       //按键
- J5 @) s2 I+ n' p( U& [4 V' C4 {& D, w9 t. w. f

, q$ z7 i$ i2 c( w! _/ l+ ]void keypros()
* v/ C" }# D: q2 u{! x0 {; ~! i6 K( O" E
    static bit key_down=0;  //按键按下标志位8 T$ O% t' \7 @$ H
    static  key_down_num=0;
' Z/ }! J$ ~9 ]6 s8 e- F3 t    static u8 count1=0;# I# ^* ^3 l, u
    static u16 count2=0;
$ P$ J4 z+ x+ ~$ Y    if(key_down==1)              
! j4 B. Z! V* z% [- ?4 u. o    {
3 k9 {0 X/ G: j5 G        count2++;                  3 d, ?8 H3 Q* ?* Y7 q" q; |* C
        if(count2>20000)           3 D3 H/ X/ B5 \/ X' v. N
        {3 J, ~" ]. O* x/ S3 j: n
            count2=0;                           2 w! l' m# b5 x0 h+ B
            if(key_down_num==1)             , v1 [' q" I( R- q. v
            {9 z' I' \# \5 X1 D% i
                 key_down_num=0;  p6 t; t: d1 Z0 r7 y* S% S6 q/ Q
                 P2=0X01;
3 F# F# y% @/ [3 Y- [9 w                 key_down=0;
+ j! h: m- U/ L; C/ [8 @            }0 c" B1 i% z# Z
            if(key_down_num==2). [+ N& ~: J1 e$ h/ a
            {+ a# h" _: P. T; s: e- U# H/ e
                key_down_num=0;, g" I$ H, `2 P, n
                P2=0x00;
! \+ T8 u) d" W4 v9 s                key_down=0;) K  B% ]5 e& y( A$ M: U
            }& K: T) o  `! R* p
        }1 t3 z8 q/ R/ l4 d
                if(ROTARY_MUTE==1)        
" R* E7 r) o" f& a4 S# U% b                {
" h, |1 j0 v9 v2 C, D; p- V7 |6 F2 K2 P                         if(ROTARY_MUTE==0)              
0 N! r- Q8 C, q7 t                        {        + k& q8 K8 N. t- |+ V" S. \8 E
                         key_down_num++;                    * l  ]% g1 H+ Y1 J8 b) I
                        }
7 E, j8 V  _8 K$ j2 @  ~4 B8 q                }
0 _& q8 p8 P0 i' ?  n: _8 K$ H7 u4 }        }
4 u9 `) i' z9 G+ L- p9 X* m! G8 P% T+ I8 j1 H3 P/ K  N7 j
    else                       
* O0 X' V: U5 V6 [    {
  c/ n: G; E3 d: b        if(ROTARY_MUTE==0)              ' l% ~2 ?% ^4 T& g
        {
, A% ]9 s/ j: V            count1++;                     
  [5 I+ O3 z* O' j) }8 H. V* M: \            if(count1>100)                " t# A% G# U: Q( p+ m
            {
8 f! m" u% P4 c7 v8 X                count1=0;                  
) d1 F. f$ @% L& G; ^: f                if(ROTARY_MUTE==0)         $ G6 h5 w  |0 R- Z% _
                {0 k3 k8 J8 r, O4 F1 Z  Y
                    key_down=1;* o& p4 e6 o9 b3 x" p
          key_down_num++;                    ! r2 _' W7 j3 s$ j
                }
  ^4 t( [+ D: e            }
% ^1 f7 U* E- ?" c& K. `! B. {        }5 u# O( N) }# D: s
        else) E5 u7 w  B5 U
        {
2 i) N& t4 g4 Y6 K) r; D' h* e            count1=0;                     
! S; G* Y+ I& D7 S1 j        }; T+ T9 \- J0 U$ @* b2 ^5 D
    }
- H6 N* Q+ ]: b! q& D5 t7 A/ s5 e7 r4 {
$ o8 [$ x; @, d; e; J
}. Y; X$ M0 n$ ?" R' i

9 Z# C& U1 G( l1 q. u0 e7 Q3 V# u; K7 q5 Z. q1 i; l
void main()' e3 `! X  N4 H. y& V6 Q
{   
& W  R, E( c/ b- U    while(1)1 m+ Y' n( a; n* {5 P+ W
    {    - k0 c1 E; K7 \
        keypros();  //按键处理函数    . x) D) n* T+ K( ~
    }        
5 q- I0 Q  y1 ]3 i1 s9 M& ^2 A. }5 v. s}+ F+ ]3 U) `2 \. w- t
# L" u, |/ P3 v- K) v

该用户从未签到

2#
发表于 2022-1-4 13:30 | 只看该作者
以#include "reg52.h"为第1行
9 c2 _* X( l$ g) C: e由第33到35行的时间太短(几个us)
$ {" y: B! d$ I: ]. T不足以检测到按键按下

该用户从未签到

3#
发表于 2022-1-4 14:23 | 只看该作者
6 N  g* n7 ?  |0 q+ u$ k; \
你可以改成一定时间内计时是否按下第二次,比如300ms,不要死循环在那里等。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 11:18 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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