[讨论] 求问一个简单程序~~

xywust   2014-3-19 16:58 楼主
#include
#include
#define uchar unsigned char
#define uint  unsigned int
uchar code table1[]={0x3c,0x99,0xc3,0xe7};
uchar code table2[]={0xe7,0xc3,0x99,0x3c};
uint i,j;
uchar temp;
//void delay();
void circulate_s_o();
void circulate_led1();
void circulate_led2();
void flash();
void dark();

void main()
{
        circulate_s_o();
        circulate_led1();
        circulate_led2();
        flash();
        dark();
}

/*void delay()
{
        for(i=400;i>0;i--)
                for(j=400;j>0;j--);
}*/

void circulate_s_o()
{
        for(i=0;i<3;i++)
        {
                P0=0xaa;
        //        delay();
                P0=0x55;
        //        delay();
        }
}

void circulate_led1()
{       
        for(j=0;j<3;j++)
        {       
                P0=0xfe;               
                for(i=0;i<7;i++)
                {
                        temp=P0;
                        temp=_crol_(temp,1);
                        P0=temp;
                //        delay();
                }
                P0=0x7f;
                for(i=0;i<7;i++)
                {
                        temp=P0;
                        temp=_cror_(temp,1);
                        P0=temp;
                //        delay();
                }
         }
}

void circulate_led2()
{       
        for(i=0;i<3;i++)
        {
                P0=table1[i%10];
                //delay();
        }
        for(i=0;i<4;i++)
        {
                P0=table2[i%10];
                //delay();
        }       
}

void flash()
{
        for(i=0;i<3;i++)
        {
                P1=0xff;
                //delay();
                P1=0x00;
                //delay();
        }       
}

void dark()
{
        P1=0xff;
}


我就不知道这个程序为什么运行会一直执行第一个子函数。
结果就是一直在显示第一个子函数的功能。
为什么不能运行到后面呢? 求大神!

回复评论 (4)

uint i,j;
不要定义成全局变量,换成局部变量试试!
提醒一下,
void main()
{
       while(1)
      {
        circulate_s_o();
        circulate_led1();
        circulate_led2();
        flash();
        dark();
     }
}
点赞  2014-3-19 17:28
引用: abu315 发表于 2014-3-19 17:28
uint i,j;
不要定义成全局变量,换成局部变量试试!
提醒一下,

为什么 不能定义为全局变量呢?
不是这个子程序执行完了,就不会再执行这个子程序了吗?
点赞  2014-3-19 17:56
引用: xywust 发表于 2014-3-19 17:56
为什么 不能定义为全局变量呢?
不是这个子程序执行完了,就不会再执行这个子程序了吗?

全局变量的命名最好有一定的意义,便于识别,增加可读性;i,j是比较常用的变量,命名简单,一般用作局部变量。
我们在用单片机的时候,大循环的方式是比较常见的,所以用了while(1),使程序循环起来。
点赞  2014-3-20 11:23
少了一个循环,其余一切都正常啊!

void main()
{
     while(1)
            {       
            circulate_s_o();
        circulate_led1();
        circulate_led2();
        flash();
        dark();
                }
}


或者:
void main()
{
        circulate_s_o();
        circulate_led1();
        circulate_led2();
        flash();
        dark();
        while(1){}
}
点赞  2014-3-20 12:54
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复