标题: 单片机流水灯问题 c 语言 不管怎么调试 num5 的值都没变 是逻辑与问题吗 [打印本页]

作者: 流星雨0527    时间: 2016-1-17 18:51
标题: 单片机流水灯问题 c 语言 不管怎么调试 num5 的值都没变 是逻辑与问题吗
不管怎么调试  num5 的值都没变  是逻辑与问题吗?
附上程序
希望得到解答
谢谢
#include <reg52.h>                    //52系列单片机头文件
#include <intrins.h>
#define uint unsigned int                 //宏定义
#define uchar unsigned char
sbit IO=P0^0;
sbit IO2=P0^1;                                        //模式选择
sbit IO3=P0^2;                                        //定时加
sbit IO4=P0^3;                                        //定时减
void delayms(uint);                                //声明子函数

uchar aa,num,num3,num2,num4,flag,num5; //全局变量
uchar table[9]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};          //显视数组  
void keyscan()         //键盘检测
{
if(IO==0)
  {
  num++;
  num3=num%9;

  while(IO);
  aa=table[num3];                          //P1口的值

  if(num>9)
   num=0;
  }



                 
if((IO3==0)||(IO4==0))           //延时
{if(IO3==0)
  {        delayms(30);
   if((IO3==0)&&(num2<6))
   num2++;

  }
  if((IO4==0)&&(num>2-1))
  {        delayms(30);
   if((IO4==0)&&(num>2-1))
   num2--;

  }

  }
  num4=300+num2*30;
}


void main()                                      //主函数
{
       
        num=0;
        num2=0;
        P1=0x00;
        while(1)                                          //大循环
        {  keyscan();
                 
         
           if(num5==0){          P1=aa;
                                        delayms(num4);             //延时500毫秒
                                        aa=_crol_(aa,1);        //将aa循环左移1位后再赋给aa
                               
                           }
           if(num5==1){        P1=aa;
                                        delayms(num4);             //延时500毫秒
                                        aa=_cror_(aa,1);        //将aa循环右移移1位后再赋给aa
                               
                                }
           if(num5==2){        P1=aa;
                                         delayms(num4);                          //闪烁
                                          P1=0x00;
                                       
                           }
           if(num5==3){        P1=aa;
                                          delayms(num4);
                                     P1=0x00;
                                       
                                }
           if(IO2==0)
   {
          
         if(IO2==0)
          {
           num5++;
           while(!IO2);
           if(num5==4);
           num5=0;
          }

   }
           }  
                  
       
               
       
               
               
}
void delayms(uint xms)                               
{
        uint i,j;
        for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒
                for(j=110;j>0;j--);
}




                 
if((IO3==0)||(IO4==0))           //定时
{if(IO3==0)
  {        delayms(30);
   if((IO3==0)&&(num2<6))
   num2++;

  }
  if((IO4==0)&&(num>2-1))
  {        delayms(30);
   if((IO4==0)&&(num>2-1))
   num2--;

  }

  }
  num4=300+num2*30;
}
void main()                                      //主函数
{
       
        num=0;
        num2=0;
        P1=0x00;
        while(1)                                          //大循环
        {  keyscan();
                 
         
           if(num5==0){          P1=aa;
                                        delayms(num4);             //延时500毫秒
                                        aa=_crol_(aa,1);        //将aa循环左移1位后再赋给aa
                               
                           }
           if(num5==1){        P1=aa;
                                        delayms(num4);             //延时500毫秒
                                        aa=_cror_(aa,1);        //将aa循环右移移1位后再赋给aa
                               
                                }
           if(num5==2){        P1=aa;
                                         delayms(num4);                          //闪烁
                                          P1=0x00;
                                       
                           }
           if(num5==3){        P1=aa;
                                          delayms(num4);
                                     P1=0x00;
                                       
                                }
           if(IO2==0)
   {
           delayms(10);
         if(IO2==0)
          {
           num5++;
           while(!IO2);
           if(num5==4);
           num5=0;
          }
   }
           }  
                  
       
               
       
               
               
}
void delayms(uint xms)                               
{
        uint i,j;
        for(i=xms;i>0;i--)                      //i=xms即延时约xms毫秒
                for(j=110;j>0;j--);
}



作者: 红尘有你    时间: 2016-1-18 08:57
if(num5==4);把后面这个分号去掉就好了!!!
作者: geekchina    时间: 2016-1-18 12:41
楼上正解




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1