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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /*按键控制LED左右移位*/" `3 u- t& _/ O+ a/ n; U. y

    ( u: i- S) L* t) J" Z#include <REGX52.H>                                                        //头文件# r* Y/ {6 {6 N0 \" U
    1 D" v& T! \8 R; N
    unsigned char LEDNum;                                                //定义全局变量+ ^; |( g( c+ h& k
    5 E) u1 Y8 Z# ~
    void Delay(unsigned int xms)                % U# x( P7 i) I
    {
    6 I' n1 i6 h" w" C/ Z/ I7 x        while(xms--)
    2 f" L# D  K, w  L5 `2 Z        {9 h  ~7 t2 R; P. O5 e9 r. O9 [
                    unsigned char i, j;! |" }6 ]& t4 t: Y: g7 s

    ' ~8 J% B; q8 `7 C! q5 K                i = 2;$ F& G6 @( [0 f* H
                    j = 239;
      S* I$ D" B; k: w! c                do
    * k  n3 C1 v2 G& e; n8 W' x' V! d+ g                {2 j! b" \6 q0 p8 W; F
                            while (--j);& E6 b+ ]* i8 A4 E$ ?% @* ~- c
                    } while (--i);
    3 d0 u+ P, p3 S2 O9 _' W4 J        }
    ' |" P; A( Q# q, j; |                        6 |) R- {9 Y+ [7 E
    }                                                                                                                                        //延时函数+ X! w( B! S( n
    : y0 g, h8 q6 }( f
    7 u* c! }( O' Z" C/ S
    void main()
    1 o  j: M# Y, L! U0 A8 W{
    9 ?; Z4 T6 w. Q. m9 ]        P2=~0x01;
    # m0 s' d8 C3 g7 i% D7 R        while(1): g3 J7 f2 z4 G% G& C* {5 p
            {
    3 r1 N2 @9 A8 i1 J! m                if(P3_1==0)8 e# M- E; ^) W' d( }1 \, {/ c/ d
                    {' [& Q% r5 T! r( H1 |/ p* X- S
                            Delay(20);
    " t! b0 ?  f) e* b6 F                        while(P3_1==0);5 y1 `6 I% N) R0 I/ M1 F; o
                            Delay(20);                                                                                //检测按键是否被按下
    8 f: x& ~% ?" ?/ U                       
    : v  {7 g. f4 s, e: I$ |! B                        LEDNum++;
    7 A1 u5 R1 g9 i' W) p+ y7 }* ~                       
    $ L/ d" N+ [, E: g# {                        if(LEDNum>=8)$ l% g1 x; h  G1 S- X  P
                            {
    9 l* r# C3 }% _* o+ c                                LEDNum=0;
    ! d- K: o2 O/ ~; C% A. R4 I                        }5 |# s5 U: x, A+ ?
                            P2=~(0x01<<LEDNum);                                                //按键左移 功能完成
    ) S: i4 ]" W6 Q/ v                }: o- f. C% a4 D5 L' T0 Z, a
                    if(P3_0==0), i+ V9 X6 H, ^6 l
                    {
    9 b( ~4 H1 a) ~, v5 w# q5 R                        Delay(20);
    $ ?7 L# G# M0 Z6 q& {                        while(P3_0==0);% m0 n5 [. Y9 {3 v1 q8 k3 ]
                            Delay(20);                                                                                //检测按键是否被按下 2 o' D! J/ Z+ E1 b# t  F: [
                           
    ( D) j) [0 F  |4 F; {6 T                        LEDNum--;
    8 @3 ~( h/ ~2 h1 [6 h                        8 z, `. u. _+ Y2 H
                            if(LEDNum==0)
    2 v& `  M  b/ g% \) @                                LEDNum=8;       
    + }* Z* O! M# a0 l: E; T0 ]                        else9 l' x# u* x8 j0 Q) g
                                    LEDNum--;
    3 K- D$ \" z" T$ @# S9 N                         
    : P$ N, M9 C6 }                        P2=~(0x01<<LEDNum);                                        //按键右移  按键右移烧录后LED灯隔一个亮一个; t6 W# l8 F1 W! ~9 u& O4 q& ]
                    }- e% x6 J, m! q& a
            }5 N+ b3 l8 t4 [: G- b1 t
    }2 n7 K5 g  T& t( h* l9 W' P2 t
      J, _% m2 S% c' h- o6 K" b

    + o2 W' k0 r3 y" z& R% I& l代码如上,请大家提供一下解决办法,谢谢大家了!2 E& i& d3 [" C4 r- p/ v7 K0 c

    6 I4 L) v+ ]( T

    该用户从未签到

    2#
    发表于 2021-10-27 13:37 | 只看该作者
    if(LEDNum==0)
    2 @) ~4 D8 T' [5 F) v         LEDNum=8;      
    % T, Q( J; \# y& k* F               else
    ' j- h6 G4 e  A, c5 }9 {                  LEDNum--;
    % y& M8 B4 S" E3 X8 M( ]                         9 |( u# d, Z& R2 b
            P2=~(0x01<<LEDNum);  
    " K" X$ c0 ?; U% r这里应该有问题,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
    ) A0 U4 w7 Y/ U7 cif(LEDNum==0)7 B; u8 }2 [' Q/ m
             LEDNum=8;       & U; K! E5 A4 t
                   else

    0 S. h' f; H, n" \+ q& s9 A3 N值是不定的,比如说我一开始左移按键按到了第三个灯,那现在我按右移按键那么初始值就不是0或者1了,可能是2或5。
    * i; J4 e! s4 W* S
  • 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-10-9 22:58 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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