当前位置: 代码迷 >> 单片机 >> 请大家帮小弟我看看小弟我的程序如何不正常呢
  详细解决方案

请大家帮小弟我看看小弟我的程序如何不正常呢

热度:76   发布时间:2016-04-28 15:53:15.0
请大家帮我看看我的程序怎么不正常呢
这是个16个流水灯的程序,里面的16个反向逐个点亮部分是我自己后改的,但是不能实现,不知道错在哪里,请懂的帮我看看,怎么改能行,为什么会这样,谢谢了
下面是代码:
include <reg51.h>
#define DELAY_TIME 200 //流动间隔时间

//12M下每单位延时约1ms
void Delayms(unsigned int t)
{
  unsigned int a,b;
  for (a=0; a<t; a++)
  for (b=0; b<112; b++)
  ;
}

int main(void)
{
  unsigned char i;

  while(1) {
  //16个逐个点亮
  for (i=0; i<16; i++)  
  {
  P1 = (i < 8) ? (~(1 << i % 8)) : 0xFF;
  P3 = (i < 8) ? 0xFF : (~(1 << i % 8));
  Delayms(DELAY_TIME);
  }
//16个反向逐个点亮
  for (i=0; i<16; i++)
  { P1 = (i < 8) ? 0x7E : (~(1 >> i % 8));
  P3 = (i < 8) ? (~(1 >> i % 8)) : 0x7E;
  Delayms(DELAY_TIME);
  }
   
//16个依次点亮
  for (i=0; i<16; i++)  
  {
  P1 = (i < 8) ? (0xFE << i % 8) : 0x00;
  P3 = (i < 8) ? 0xFF : (0xFE << i % 8);
  Delayms(DELAY_TIME);
  }

  //16个依次反向点亮
  for (i=0; i<16; i++)  
  {
  P1 = (i < 8) ? 0xFF : (0x7F >> i % 8);
  P3 = (i < 8) ? (0x7F >> i % 8) : 0x00;
  Delayms(DELAY_TIME);
  }

  //两边向中间,中间向两边依次点亮
  for (i=0; i<16; i++)  
  {
  P1 = (i < 8) ? (0xFE << i % 8) : (0x7F >> i % 8);
  P3 = (i < 8) ? (0x7F >> i % 8) : (0xFE << i % 8);
  Delayms(DELAY_TIME);
  }
  }
}

------解决方案--------------------
//16个反向逐个点亮
for (i=0; i<16; i++)
{ P1 = (i < 8) ? 0xff : (~(0x80 >> i % 8));
P3 = (i < 8) ? (~(0x80 >> i % 8)) : 0xff;
Delayms(DELAY_TIME);
}
上头有错
  相关解决方案