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

单片机按键左右移位功能问题

[复制链接]
  • TA的每日心情
    开心
    2021-12-1 15:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2021-10-27 09:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

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

    x
    /*按键控制LED左右移位*/
      s% G" g1 b5 e/ d2 ]' S9 A  k  J. _3 m0 {
    #include <REGX52.H>                                                        //头文件
    ! W: D/ y4 {+ c6 A( `8 j. R( \
    5 B  r" n9 J: Qunsigned char LEDNum;                                                //定义全局变量
    . }1 S& f* n. J- ]. n
    ) H5 e, t- k! j, `3 v  Nvoid Delay(unsigned int xms)                ! }( ^& r: d) |1 Q* E% y) U" j& ]! r
    {
    2 Z' h' ^* s; M        while(xms--)5 c/ U  N2 [: Y  \5 p
            {
    * A+ r5 T( C- X* U, u& Z: }                unsigned char i, j;0 w$ T7 m6 z4 o; u, p

    9 J2 A* H$ Y" H8 ^+ |                i = 2;6 X: J. W/ A6 m- t2 e
                    j = 239;8 ]$ B+ x8 f$ D8 a0 a. U
                    do3 `% y: h  {. L
                    {
    & M4 ]8 W) S5 B+ a6 ]0 J/ J3 h                        while (--j);
    4 S/ l/ ^$ l$ L% F                } while (--i);  K, j2 u+ C) L2 T/ _
            }" ]1 w  t6 S; q, z$ p1 j0 f7 H! m
                           
    5 F; s9 q) x3 ~+ q9 e}                                                                                                                                        //延时函数
    % C! w4 J% ~) h4 j+ ~- a! M6 o1 f3 d9 {1 s

    2 I. K8 d. o' A* a" Cvoid main()% q0 N! A$ [5 ]  w/ [- Y: ]% p
    {
    7 x# g4 u; W1 O2 H% g$ ~5 k, b) C7 L        P2=~0x01;
    ! I+ p, `( C; q6 J        while(1)0 s- Q# |- }: U* V4 y! i$ O7 V
            {
    / k/ J, j8 p$ e: Y0 s5 ?% x                if(P3_1==0)
    ' L( u" a5 [2 n* F                {
    % f( `1 Y; f4 l: ^% h                        Delay(20);
    . p, B6 [( @+ ^  f4 C' ]                        while(P3_1==0);0 b* a) B1 }$ q' I8 k
                            Delay(20);                                                                                //检测按键是否被按下
    * A4 q( ~& e4 U                        ; j4 p% P- i; [, G3 x
                            LEDNum++;: Q/ L4 k$ m9 m# r) D2 g: i& X
                           
      Y; K2 h; s' h                        if(LEDNum>=8)
    1 v0 Z3 ?' c- `( s/ E* ?  f                        {6 @3 z4 l5 k; A, W, c7 u
                                    LEDNum=0;6 w/ b) t0 k* O
                            }
    * W6 ~3 ~2 }1 A/ R  \, k6 E                        P2=~(0x01<<LEDNum);                                                //按键左移 功能完成
    & H% y1 e* Y4 S" D) m                }% b& D+ m9 f  R( A
                    if(P3_0==0)
    7 u) \% E3 W8 ?! |# M                {
    % Y. `  T. P  T+ L8 V; p                        Delay(20);
    , H) V  j: e5 U  U                        while(P3_0==0);
    , `' B! W( S; ^/ [- L  ]                        Delay(20);                                                                                //检测按键是否被按下 . p* z2 a4 J5 u" P1 E" |
                           
    9 j, r4 D1 X" v& |                        LEDNum--;
    5 H/ n  J6 @# g5 w. H  Z- D                       
    : W( O8 i) Q( m+ ~1 t5 [+ S                        if(LEDNum==0)
    7 U& ^7 v2 y% F/ w                                LEDNum=8;        * }0 ]8 j" t: B  F$ M( ~! p7 U5 }
                            else
    7 }& [7 ~0 r9 s- f0 c                                LEDNum--;
    8 J+ W- ?: c& M& _4 f                         " G, w. f3 k/ D/ b% ~5 o
                            P2=~(0x01<<LEDNum);                                        //按键右移  按键右移烧录后LED灯隔一个亮一个
    * _4 D, N8 w# l                }0 L% C" _) ?2 e  k* S% j4 @
            }
    8 C8 u1 P  h. o6 S}3 U; E* z$ C, u

    4 R' I; {% h  b- C5 `3 S3 w1 I! S) Y) V1 {7 T9 O
    代码如上,请大家提供一下解决办法,谢谢大家了!
    , z1 o7 F2 @1 F) }3 \
    6 F" Q( v6 |: o4 Z* u1 ]& V# n

    该用户从未签到

    2#
    发表于 2021-10-27 13:37 | 只看该作者
    if(LEDNum==0)
    " I3 I" T; A0 l: f7 A3 |         LEDNum=8;      
    * b+ v1 E: v8 m9 n  G, M               else3 R' o1 j; [5 {+ V5 k+ O
                      LEDNum--;
    7 q1 F( F$ ]) _2 [( Q                        
    ! D; U) t/ F: s& `3 E0 ~  q* e' \        P2=~(0x01<<LEDNum);  / W" Z' t2 j% M  [. b
    这里应该有问题,LEDnum没被按下的时候值是多少呢?

    点评

    值是不定的,比如说我一开始左移按键按到了第三个灯,那现在我按右移按键那么初始值就不是0或者1了,可能是2或5。  详情 回复 发表于 2021-10-27 14:10
  • TA的每日心情
    开心
    2021-12-1 15:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    3#
     楼主| 发表于 2021-10-27 14:10 | 只看该作者
    showmaker 发表于 2021-10-27 13:37
    + q$ E& Q$ W3 F* W9 Z5 x& ~if(LEDNum==0)$ y( `6 f: A6 ^
             LEDNum=8;      
    4 y: \! @: ~* _. n               else

    7 _! a/ [8 j6 j+ M& z8 D, f# z值是不定的,比如说我一开始左移按键按到了第三个灯,那现在我按右移按键那么初始值就不是0或者1了,可能是2或5。
    ) P. U1 X5 [# c$ w
  • TA的每日心情
    开心
    2021-12-1 15:16
  • 签到天数: 2 天

    [LV.1]初来乍到

    4#
     楼主| 发表于 2021-10-27 20:32 | 只看该作者
    目前问题已解决,代码重复敲了一行,LEDNum--;按键右移代码多敲了一行LEDNum--;
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-8-16 06:54 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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