这是个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);
}
上头有错