标题: 单片机流水灯程序逻辑问题,请大侠帮解释一下。谢谢! [打印本页]

作者: haiming8685    时间: 2018-9-18 22:38
标题: 单片机流水灯程序逻辑问题,请大侠帮解释一下。谢谢!
为什么会出现如下情况?我是个单片机初学者,刚学习编了这个流水灯个程序,为什么mian程序中的n在for循环中n<10,而在if(n==9)才能正常使8只发光二极管成为流水运动,若换成n<9与if(n==8)或者其他数值都不正常,请高手帮忙解释一下。

电路原理图如下:


单片机源程序如下:
  1. #include<reg51.h>
  2. #define   uint    unsigned int   
  3. #define   uchar   unsigned char  
  4. void delay(uint x)
  5. {
  6. uchar j;
  7. uint  y;
  8. for(x; x>0; x--)
  9.    for(y=500; y>0; y--);
  10. }
  11. void main()
  12. {
  13.    uchar n;
  14.    P1 = 0xff;
  15.    while(1)
  16.    {
  17.     for(n; n<10; n++)
  18.     {
  19.    delay(500);
  20.    P1 = (P1<<1);
  21.    if( n == 9)
  22.    {
  23.     P1 = 0xff;
  24.     n =0;
  25.    }
  26.     }
  27.    }
  28. }
复制代码




作者: HC6800-ES-V2.0    时间: 2018-9-19 09:54
你的问题,在于重复的和不重复的内容设计不合理,所以才多了那么多的循环。
我改了一下,你看看,共同学习。
void main()
{
   uchar n;
   P2 = 0xff;
   delay(250);
   while(1)
   {
      for(n=0; n<8; n++)
      {
          P2 = (P2<<1);
          delay(250);
      }
          P2=0xff;
          delay(250);
   }
}

作者: haiming8685    时间: 2018-9-19 10:44
HC6800-ES-V2.0 发表于 2018-9-19 09:54
你的问题,在于重复的和不重复的内容设计不合理,所以才多了那么多的循环。
我改了一下,你看看,共同学习 ...

谢谢!
作者: haiming8685    时间: 2018-9-19 16:39
haiming8685 发表于 2018-9-19 10:44
谢谢!

你好!还想麻烦解释一下这些定义。谢谢!

#define SETBIT(b, n)        ((b) |= (1 << (n)))
#define CLRBIT(b, n)        ((b) &= ~(1 << (n)))
#define CHKBIT(b, n)        ((b) & (1 << (n)))




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