weixin_50697999 2022-03-27 16:12 采纳率: 73.7%
浏览 105
已结题

stc8按顺序点亮LED的问题。

芯片是stc8,想通过5个按键按顺序控制点亮LED,每当一个按键按下,对应LED点亮,如果顺序正确,则输出并进入下一个流程,如果错误,则全部熄灭,重新点亮。
遇到的问题:每次上电,都会由一个LED是亮起状态,然后按下剩余按键会判定错误,重新按,第二次则没有问题。有时候断电重启就正常。有时候重启很多次也不正常。
希望大shen给看一下问题的所在,另外,本人是个自学C语言1个多余的菜ji,程序结构也存在很多问题,还请给与批评和指点,怎么样的结构顺序更好。
下面是电路图:

img

下面是程序代码:


```c

#include <stc15.h>

sbit Magnetic_Switch0=P1^3;
sbit Magnetic_Switch1=P1^4;
sbit Magnetic_Switch2=P1^5;
sbit Magnetic_Switch3=P1^6;
sbit Magnetic_Switch4=P1^7;

sbit Right_Out1=P1^1;
sbit Right_Out2=P5^4;

sbit Speaker_Switch0=P1^0;
sbit Speaker_Switch1=P3^7;
sbit Speaker_Switch2=P3^6;
sbit Speaker_Switch3=P3^5;
sbit Speaker_Switch4=P3^4;




sbit getLED0=P3^3;
sbit getLED1=P3^2;
sbit getLED2=P3^1;
sbit getLED3=P3^0;
sbit getLED4=P5^5;






unsigned char getflag0=0,getflag1=0,getflag2=0,getflag3=0,getflag4=0;

void delay1000ms(void);
void delay1500ms(void);

    
void main(void)
{

    unsigned char flag=1;
    unsigned char getflag0=0,getflag1=0,getflag2=0,getflag3=0,getflag4=0;
    int i=0;  //unsigned char i=10;
    unsigned char j=0,k=0;
    const unsigned char setMagnetic_Switch[5]={0,1,2,3,4};
    unsigned char getMagnetic_Switch[5]={0,0,0,0,0};
    
    P0M0=0x00;
    P0M1=0x00;
    P1M0=0x00;
    P1M1=0x00;
    P2M0=0x00;
    P2M1=0x00;
    P3M0=0x00;
    P3M1=0x00;
    P4M0=0x00;
    P4M1=0x00;
    P5M0=0x00;
    P5M1=0x00;
    
    Magnetic_Switch0=1;
    Magnetic_Switch1=1;
    Magnetic_Switch2=1;
    Magnetic_Switch3=1;
    Magnetic_Switch4=1;
    
    Speaker_Switch0=0;
    Speaker_Switch1=0;
    Speaker_Switch2=0;
    Speaker_Switch3=0;
    Speaker_Switch4=0;
    

    
    getLED0=1;
    getLED1=1;
    getLED2=1;
    getLED3=1;
    getLED4=1;
    
    
    Right_Out1=1;
    Right_Out2=1;





    while(1)
    {    
//获取
        while(j<5)
        {
            if(Magnetic_Switch0==0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag0==0)
            {

                getMagnetic_Switch[j]=0;
                getflag0=1;
                getLED0=0;
                j++;

            }
            if(Magnetic_Switch1==0&&Magnetic_Switch0!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag1==0)
            {

                getMagnetic_Switch[j]=1;
                getflag1=1;
                getLED1=0;
                j++;

            }
            if(Magnetic_Switch2==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch3!=0&&Magnetic_Switch4!=0&&getflag2==0)
            {

                getMagnetic_Switch[j]=2;
                getflag2=1;
                getLED2=0;
                j++;

            }
            if(Magnetic_Switch3==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch4!=0&&getflag3==0)
            {

                getMagnetic_Switch[j]=3;
                getflag3=1;
                getLED3=0;
                j++;

            }
            if(Magnetic_Switch4==0&&Magnetic_Switch0!=0&&Magnetic_Switch1!=0&&Magnetic_Switch2!=0&&Magnetic_Switch3!=0&&getflag4==0)
            {

                getMagnetic_Switch[j]=4;
                getflag4=1;
                getLED4=0;
                j++;

            }
        }
        j=0;
        //比较

        while(1)
        {
            if(setMagnetic_Switch[k]==getMagnetic_Switch[k])
            {        
                k++;
                if(k<5)
                    continue;
                k=0;

                Right_Out1=0;
                i=30;
                while(i>0)
                {
                    delay1000ms();
                    i--;
                }    
                i=0;
                while(getLED0==0||getLED1==0||getLED2==0||getLED3==0||getLED4==0)
                {
                    if(Speaker_Switch0==1)
                    {
                        getLED0=1;
                        delay1500ms();
                    }
                    if(Speaker_Switch1==1)
                    {
                        getLED1=1;
                        delay1500ms();
                    }
                    if(Speaker_Switch2==1)
                    {
                        getLED2=1;
                        delay1500ms();
                    }
                    if(Speaker_Switch3==1)
                    {
                        getLED3=1;
                        delay1500ms();
                    }
                    if(Speaker_Switch4==1)
                    {
                        getLED4=1;
                        delay1500ms();
                    }
                }    
                Right_Out2=0;

                delay1000ms();        
                i=600000;
                while(i>0)
                {
                    delay1000ms();
                    i--;
                }    
                i=0;
                break;
            }
            else
            {

                getLED0=0;
                getLED1=0;
                getLED2=0;
                getLED3=0;
                getLED4=0;
                delay1000ms();
                getLED0=1;
                getLED1=1;
                getLED2=1;
                getLED3=1;
                getLED4=1;
                delay1000ms();
                getLED0=0;
                getLED1=0;
                getLED2=0;
                getLED3=0;
                getLED4=0;
                delay1000ms();
                getLED0=1;
                getLED1=1;
                getLED2=1;
                getLED3=1;
                getLED4=1;
                delay1000ms();
                getLED0=0;
                getLED1=0;
                getLED2=0;
                getLED3=0;
                getLED4=0;
                delay1000ms();
                getLED0=1;
                getLED1=1;
                getLED2=1;
                getLED3=1;
                getLED4=1;
                delay1000ms();
                
                

                Right_Out1=1;
                break;
            }
        }
        Magnetic_Switch0=1;
        Magnetic_Switch1=1;
        Magnetic_Switch2=1;
        Magnetic_Switch3=1;
        Magnetic_Switch4=1;
        getflag0=0;
        getflag1=0;
        getflag2=0;
        getflag3=0;
        getflag4=0;

        Speaker_Switch0=0;
        Speaker_Switch1=0;
        Speaker_Switch2=0;
        Speaker_Switch3=0;
        Speaker_Switch4=0;

        getLED0=1;
        getLED1=1;
        getLED2=1;
        getLED3=1;
        getLED4=1;
        Right_Out1=1;
        Right_Out2=1;

        for(i=0;i<5;i++)
        {
            getMagnetic_Switch[i]=0;
        }

        while(Magnetic_Switch0==0);
        while(Magnetic_Switch1==0);
        while(Magnetic_Switch2==0);
        while(Magnetic_Switch3==0);
        while(Magnetic_Switch4==0);
    }
}







void delay1000ms(void) //@11.0592MHz
{
    unsigned char i, j, k;
    i = 43;
    j = 6;
    k = 203;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}



void delay1500ms(void)        //@11.0592MHz
{
    unsigned char i, j, k;

    i = 64;
    j = 9;
    k = 179;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

```

  • 写回答

6条回答 默认 最新

  • 键鼠亦有温度 2022-03-28 11:19
    关注
    获得0.20元问题酬金

    sbit getLED0=P3^3;
    sbit getLED1=P3^2;
    sbit getLED2=P3^1;
    sbit getLED3=P3^0;
    sbit getLED4=P5^5; ->sbit getLED4=P3^4

    评论

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 赞助了问题酬金10元 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 现在新建了一个f1的就不行了包括所有新建的项目都无法生成,路径命名都没问题,keil和cubemx重装过还是不行,如何解决?(标签-java|关键词-固件)
  • ¥15 web前端开发怎么实现像图片这样的页面啊?
  • ¥15 ubuntu 20.04 网卡启用后,只有ipv6 没有 ipv4 无法上网
  • ¥15 QT任务管理器无法正确获取展开,有悬赏15元速求,如何解决?(相关搜索:标识符|结构体)
  • ¥15 使用delphi 10.3+intraweb 生成的页面怎么实现自动滚屏
  • ¥20 思科:Router c3600 MN-4E插槽
  • ¥15 16进制修改视频的元数据
  • ¥15 HTML中css的位置信息居然会导致元素大小发生变化
  • ¥15 岛津txt格式文件转nirs格式
  • ¥15 有偿指导软件编程与八股