QAQwawa 2021-11-22 19:28 采纳率: 66.7%
浏览 23
已结题

为什么我的第二个按键的程序运行结束之后,第八个灯常亮

我的目的是:让八个led灯依次向右亮同时依次熄灭,然后向左亮同时依次熄灭。
我遇到的问题是:运行到最后,第八个灯会常亮


#include<regx51.h>
#include<intrins.h>
#define uint unsigned int        //定义uint
#define uchar unsigned char        //定义uchar
uchar aa;//定义aa为大于零的数
sbit key1=P3^3;        //定义第一个独立按键
sbit key2=P3^2;        //定义第二个独立按键
sbit key3=P3^1;        //定义第三个独立按键
sbit key4=P3^0;        //定义第四个独立按键

//定义LED灯
sbit led1=P1^7;        
sbit led2=P1^6;                           
sbit led3=P1^5;
sbit led4=P1^4;
sbit led5=P1^3;
sbit led6=P1^2;
sbit led7=P1^1;
sbit led8=P1^0;
void delay(uint);        //声明函数delay
void delayms(uint);        //声明函数delayms
int m;
void main()
{
    while(1)
    {
         if(key1==0)           //按键一启动时
            
             for(m=1;m>0;m--)
                {
                
                    int i;
                    for(i=3;i>0;i--)       //循环三次
                    {    P1=0x00;
                        delayms(100);
                        P1=0xff;
                        delayms(900);
                        while(!key1);  //松开按键
                    }
                
                }
        



        else if(key2==0) //按键二启动时
                for(m=1;m>0;m--)//开始
                {                                
                            aa=0x7f;        //让aa从最左边开始
                            P1=aa;
                            delayms(100);         
                            for(m=8;m>0;m--)    
                            {
                                aa=_cror_(aa,1);  //依次往右
                                delayms(250);
                                P1=aa;
                                if(aa==0xfe)    //到最右边时            
                                {    
                                    for(m=8;m>0;m--)    
                                    {    
                                        aa=_crol_(aa,1);//依次往左                            
                                        delayms(250);
                                        P1=aa;
                                        if(P1==0x7f)
                                           {
                                             P1=0X7F;
                                            delayms(250);
                                             P1=0XFF;
                                             delayms(900)
                                             while(!key1);
                                             
                                         }
                                    }
                                }
                            }                        
                }
        else if(key3==0)    //按键三启动时
                {    int m;
                    for(m=1;m>0;m--)
                    {       //从左到右依次点亮
                                    led1=0;
                            delay(200);
                                    led2=0;
                            delay(200);
                                    led3=0;
                            delay(200);
                                    led4=0;
                            delay(200);
                                    led5=0;
                            delay(200);
                                    led6=0;
                            delay(200);
                                    led7=0;
                            delay(200);
                                    led8=0;
                            delay(200);    
                                  
                           //从左到右依次熄灭
                                   led1=1;   
                               delay(200); 
                                  led2=1;
                               delay(200); 
                                  led3=1;
                               delay(200); 
                                  led4=1;
                               delay(200); 
                                  led5=1;
                               delay(200); 
                                  led6=1;
                               delay(200); 
                                  led7=1;
                               delay(200); 
                                  led8=1;
                               delay(200); 
                
                             //从右到左依次点亮
                                      led8=0; 
                               delay(200); 
                                     led7=0;
                               delay(200);
                                      led6=0;
                               delay(200); 
                                     led5=0;
                               delay(200);
                                     led4=0;
                               delay(200); 
                                      led3=0;
                               delay(200); 
                                     led2=0;
                               delay(200); 
                                       led1=0;
                               delay(200); 
             
                            //从右到左依次熄灭
                                    led8=1;
                            delay(200);
                                    led7=1;
                            delay(200);
                                    led6=1;
                            delay(200);
                                    led5=1;
                            delay(200);
                                    led4=1;
                            delay(200);
                                    led3=1;
                            delay(200);
                                    led2=1;
                            delay(200);
                                    led1=1;
                            delay(200);    
                            //持续熄灭
                            while(!key1);
                    }
                }        
        else if(key4==0)    //按键四启动时        
            {    int k;
                for(k=1;k>0;k--)
                {
                    //从中间往两边亮
                            led4=0,led5=0;
                    delayms(100);
                            led3=0,led6=0;
                    delayms(100);
                            led2=0,led7=0;
                    delayms(100);
                            led1=0,led8=0;
                    delayms(100);
                    P1=0x00;
                    delayms(100);
        
                    //从中间往两边熄灭
                            led4=1,led5=1;
                    delayms(100);
                            led3=1,led6=1;
                    delayms(100);
                            led2=1,led7=1;
                    delayms(100);
                            led1=1,led8=1;
                    delayms(100);
        
                    //持续熄灭
                    while(!key1);
                    
        
                }
            }
    }
}
void delayms(uint xms) //延迟函数
{
    int i,j;
    for(i=xms;i>0;i--)
        for(j=110;j>0;j--);
        
}
//定义delay函数        
void delay(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
        for(j=50;j>0;j--);        
}



  • 写回答

1条回答 默认 最新

  • 老皮芽子 2021-11-22 20:18
    关注

    for(m=8;m>0;m--) 改成
    for(m=7;m>0;m--)
    8个灯,应该只移7次就到头了,再多移一次就不对了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 11月22日

悬赏问题

  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么