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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /*按键控制LED左右移位*/
    - H) D6 U1 n: z3 v' H$ d
    8 L0 Y3 {: ~% D3 S#include <REGX52.H>                                                        //头文件
    3 u2 V; ^6 E' V! N$ p( m4 T2 d3 L
    1 v! C( f! [0 j" V3 Runsigned char LEDNum;                                                //定义全局变量
    6 Q% j3 r, p" }, L* Y6 {. ]" s
    # y/ b/ a$ x. t  Fvoid Delay(unsigned int xms)               
      u  f8 C. g' @3 I8 W, L" b{( C  q4 ?3 l& x9 V% F( C
            while(xms--)+ W1 i% n/ \5 m: W
            {
    2 u3 \" R, o% [                unsigned char i, j;
    + H: |1 B8 y+ b+ m- l9 m' n9 P
    1 c# T" _* D+ V! {" w                i = 2;
    ( V+ Q4 }) C, I9 B7 f                j = 239;/ S0 I6 D, M9 d8 [) `8 D+ a# E
                    do
    . a% |( ?- ?: z# ^                {
    1 J: f/ t2 y% h6 e: ]5 y! n6 m! `                        while (--j);7 D+ i7 d+ O: s: @+ \2 E
                    } while (--i);" _' q% ?/ H0 x. j. i6 t* r; `$ [
            }
    . R6 q) M7 V5 J" g                        6 m# F. |+ h9 q" l0 V# ^
    }                                                                                                                                        //延时函数9 A9 _' ^/ V5 \$ q  O$ c' _# F
    2 C6 Y  Y# X, S  v  K4 Y0 {3 o
    4 W5 G  m2 U- r  F/ g
    void main()
    0 @/ g! n  A5 J$ ?: I/ E, P5 U{
    + V. t; j. C4 T" U        P2=~0x01;
    3 b& J" E; B! ~5 M* m0 J/ l        while(1)
    6 u4 p$ b" B/ W' \) {2 A# x8 l3 \9 h        {* f8 v+ [( Z5 E. a
                    if(P3_1==0), M7 U+ y  v3 W0 Y
                    {
    6 |6 a' U; M: n0 {8 u! G3 M8 S. B                        Delay(20);' z) n* a+ p, \% p  Z4 V0 V" ~
                            while(P3_1==0);
    * r! ~+ ~8 y- D                        Delay(20);                                                                                //检测按键是否被按下7 ]& S( p- [' O
                           
    ! L9 R; b& T" i7 s. C                        LEDNum++;. w7 }6 p# G) V; ?! n
                           
    * @2 y' C) e1 e                        if(LEDNum>=8)
    - N1 v0 L4 ~$ n5 [0 f+ b                        {4 r* b: s. ]+ t* f& q" H+ R
                                    LEDNum=0;# V5 s# U, n2 L, t! O4 n2 V
                            }6 \( V# p% g5 X# e7 \- t3 }
                            P2=~(0x01<<LEDNum);                                                //按键左移 功能完成! @$ P- S" x% b7 W0 c" Q/ C
                    }. @" W+ o2 w! U. K: Q9 ]) Q1 p
                    if(P3_0==0). |3 H3 r; S3 C! c3 V) t* y
                    {) A0 V: y; F6 t# J7 p4 o6 o, D0 b+ u
                            Delay(20);$ A% k8 z- i- {$ w9 T$ x
                            while(P3_0==0);, N. p9 g- w& {. `& N6 Y# _8 s6 o; q
                            Delay(20);                                                                                //检测按键是否被按下
    8 a, r7 L  ~* D2 m& X; _2 r* m) p1 r                       
    " ^; @9 S$ Q% d3 s* D1 Q% l. }                        LEDNum--;
    ) l. K6 c- @6 g% M                       
      a( o+ D( R! }7 y: t                        if(LEDNum==0)# p0 }2 R" ~6 G* o% R* w+ Z
                                    LEDNum=8;       
    2 I+ Q* x# H% `: z                        else1 v* Y& V( v, M" l; q/ X- g2 t
                                    LEDNum--;
    ! Q7 g2 |3 J* r& _' L* N5 o5 G$ S5 l; @% [                         
      W6 _7 K: f4 \7 M+ G. `. b( t# b                        P2=~(0x01<<LEDNum);                                        //按键右移  按键右移烧录后LED灯隔一个亮一个: e/ l- B7 m9 r
                    }
    2 @; J  I5 s. _3 U( l        }; W  e8 E9 l+ @. K) D- H) n
    }
    : h2 o! J) C4 o/ |& J6 G
    6 R9 |, i" t( N) P% q: F+ }; R- n# x. }5 y+ V! R# V) ~2 G( a
    代码如上,请大家提供一下解决办法,谢谢大家了!9 d' e1 O' @- p$ I! _5 A
    ( U" E. m: m6 D& e- k

    该用户从未签到

    2#
    发表于 2021-10-27 13:37 | 只看该作者
    if(LEDNum==0)% h% f7 w& ~1 E% q
             LEDNum=8;       % j( e6 J7 c9 ]& U5 t
                   else
    ) Z# c4 t4 p$ _( }! i0 O& ?# {$ k                  LEDNum--;
    + c0 @* J7 n# z) r                        
    6 `) D7 J4 f; o( v/ w        P2=~(0x01<<LEDNum);  ( F  e! a4 |. h, F6 ^4 L
    这里应该有问题,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
    ( d& c1 n/ B$ iif(LEDNum==0)% s! e3 J6 W: Z4 o
             LEDNum=8;       - U" n6 m0 w; P
                   else
    $ y  a; T. h3 f& Z
    值是不定的,比如说我一开始左移按键按到了第三个灯,那现在我按右移按键那么初始值就不是0或者1了,可能是2或5。% M9 u9 b1 U3 W" \; J
  • 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-9-23 03:08 , Processed in 0.125000 second(s), 27 queries , Gzip On.

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

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

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