51单片机LED流水灯怎么实现从两边同时逐个点亮到中间,又从中间逐个熄灯到两边

2024-11-08 12:23:05
推荐回答(2个)
回答1:

简单点的,用表格,事先计算好,放到ROM中,用的时候逐行编译输出就可以。
复杂点的,开一个缓冲区,用循环程序,根据花样的不同,每次填充一行,并输出,然后再计算一下行。除非表格太大,不建议这样用。
#define len 8
char tablelist[][len] =
{
"00000000",
"10000001",
"01000010",
"00100100",
"00011000",
}
outline( char * s )
{
int i;
for(i=0; i {
if ( s[i] == '0' )
{
// 对应的灯亮
}
else
{
// 对应的灯灭
}
}
}
main()
{
for(;;)
{
outline( &tablelist[i]);
delay(..);
}
}

回答2:

如果只用一个端口的话,你可以建一个表,如果LED是高电平点亮的话,里面存放数据0x81,0x42,0x24,0x18
如果LED是低电平点亮的话,里面存放数据
0x7e,0xbd,0xdb,0xe7
然后在循环里一直按照数组下标0到3递增3到0递减将数组里面的数赋给端口即可。
即一个大循环里面再加两个小循环即可,具体多少次可以在外面大循环设置。