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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /*按键控制LED左右移位*/2 E- V- B' q& k0 w

    5 z; S- g, @0 w" H1 p( E' K1 i#include <REGX52.H>                                                        //头文件6 Y  L( N3 {1 N% `5 z4 T

    ' B/ Y# T9 _0 o' _: bunsigned char LEDNum;                                                //定义全局变量
    ' N6 K7 n( l+ ]7 e1 ?" p7 }* F7 w1 N% p( M( C+ X, ?& k
    void Delay(unsigned int xms)               
    8 S1 Z( C/ j+ G: q{
    0 Q- ]8 m4 Q0 `# a+ K% a# e" @        while(xms--)
    ! X; e1 o3 L% z# J# P        {
    1 H. h4 c' k9 y5 m$ o4 H; D                unsigned char i, j;
    / @  `3 n1 w7 X
    ) Y6 w; {  Y. e                i = 2;
    - ]) F4 p5 D5 @, k- J! M. i                j = 239;; V; u5 F' q* K% u
                    do' w, S( T' {# J* X
                    {' i  ~" ?& u4 N, \6 L  t/ ?
                            while (--j);/ T" g' t, Q+ I5 B; D
                    } while (--i);6 a3 U' K# ]' U: f" ?
            }* R& N5 W6 t1 N. Y# \: r  l2 f
                           
    ( j3 A! V' m4 e}                                                                                                                                        //延时函数
    # v3 t- [/ V% q
    % j) k6 b6 o/ A, Z2 f8 ?- o6 _; w
    3 ]7 |* R# C, b+ e  }2 q3 m, Gvoid main()
    # t% D5 z8 X$ p( D. d{+ c0 b  C' c" j: M' {6 @
            P2=~0x01;
    " p* ^+ z9 E9 |5 A; i7 q9 x        while(1)/ d, G8 o/ I3 L0 t( Y* X
            {; B& ?7 T' S1 G
                    if(P3_1==0)
    6 Q7 W- I! l* U$ |! y" O                {
    - Q+ y+ f: s% a; z9 |                        Delay(20);& I! a& R+ h0 g
                            while(P3_1==0);
    + B; s! A: J/ \/ ^8 s& l) \0 q                        Delay(20);                                                                                //检测按键是否被按下* q% I& Y6 r' y. U2 R* A  ]( A
                            1 [3 `8 x9 r  B- r& D, c$ M$ C
                            LEDNum++;
    : U, A) c4 o+ y9 y; `6 h                        ; O) ^# D; d4 ]
                            if(LEDNum>=8)6 d& _* f1 O- z. n4 z. u
                            {
    7 c+ W& a; M7 D8 G0 a                                LEDNum=0;
    4 n/ o1 E( ~1 {  L0 ~                        }
    : W' u6 t, T9 T( O                        P2=~(0x01<<LEDNum);                                                //按键左移 功能完成$ p5 ^; Q7 h- X1 V
                    }8 I' i9 u3 e  m) \. e; }" w0 u
                    if(P3_0==0)+ N! i" D# D6 I+ o( B* J8 V
                    {
    1 y2 k5 m1 U3 ]- [$ [                        Delay(20);
    " K& [2 Q$ \- `* W, r. E! W0 f                        while(P3_0==0);
    : G$ r, [4 M+ v( A7 V                        Delay(20);                                                                                //检测按键是否被按下 ( b& R$ }( {. p+ K$ ^( ^
                           
    5 m$ g& F' _. j+ D9 I                        LEDNum--;, M8 e2 o+ e# ?. O1 r
                            # o1 a2 G2 Q. q" g% A9 e3 k
                            if(LEDNum==0)
    ; {2 k- S1 Z3 v                                LEDNum=8;        4 R+ T$ r- X0 g
                            else; \5 b- R! ]* w# o6 A
                                    LEDNum--;
    7 o2 c2 }9 j( N: v                         . Q% w# l: c8 v
                            P2=~(0x01<<LEDNum);                                        //按键右移  按键右移烧录后LED灯隔一个亮一个$ i" T3 I) p8 k% o; s
                    }! J: v' o+ Y( i. Q5 g1 G5 X
            }& @0 L: B3 q- F2 L
    }
    : g: `" z% K. y4 G- k  @6 i& r( p# Z  `3 [; F

    6 h/ C. k& D/ Q. V2 a3 ]代码如上,请大家提供一下解决办法,谢谢大家了!
    * a; T: c' q/ b2 r3 N3 O( N
    $ ?0 ^/ \9 j) U( B4 Q. m" W

    该用户从未签到

    2#
    发表于 2021-10-27 13:37 | 只看该作者
    if(LEDNum==0)
    - H" S$ G2 O( Q' d         LEDNum=8;       / C7 G) N, q3 H2 h
                   else
    & X/ {4 Y- p2 X" B' J: _6 y& m                  LEDNum--;
    : F3 I' ^: n2 _4 Y: N* _$ v# ^9 V                        
    & \+ p2 s) |7 L$ E1 u6 e        P2=~(0x01<<LEDNum);  / K0 a1 p# p. F" u3 _
    这里应该有问题,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
    ! ]% ]' U1 D2 _if(LEDNum==0)8 M  X" I; H2 k; _8 O
             LEDNum=8;       / }2 _! L8 V: e; c! t- B% R- T
                   else
    $ \9 M  f9 a+ U8 s. O
    值是不定的,比如说我一开始左移按键按到了第三个灯,那现在我按右移按键那么初始值就不是0或者1了,可能是2或5。
    - ]! ]7 h4 |# }% U2 e9 p
  • 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-7-20 03:06 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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