LED灯跑马问题 led灯出现这种情况是什么问题
不是的。两线的就可以了 。跑流水是根据软件的编程来的
估计是LED驱动电源不良引起的。
一般LED灯点亮发弱光除电压过低外,只有驱动电源和LED灯珠本身光衰引起。如果是一般家用小功率的LED灯发弱光,使用时间较短的话LED灯珠本身光衰可能性极低,通常是LED驱动电源不良导致。
我给你一个程序,单片机为STC51,晶振为12MHz。
跑马灯采用查表法,定时用查询式定时器,时间为500ms;
I/O口用25只引脚,P0,P1,P2都用8个,P3用P3.0,
程序用C语言。
为了取得一个较好的观赏效果,对你的要求作了少许修改,
你可以用PROTEUS仿真观看效果。
程序已仿真调试通过。
#include<at89x51.h>
#define unchar unsigned char
unchar table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
sbit P30=P3^0;
void delay500ms();
main()
{
unchar i;
while(1)
{
for(i=0;i<8;i++)
{
P0=table[i];
P1=0xff;
P2=0xff;
P30=1;
delay500ms();
}
for(i=0;i<8;i++)
{
P0=0xff;
P1=table[i];
P2=0xff;
P30=1;
delay500ms();
}
for(i=0;i<8;i++)
{
P0=0xff;
P1=0xff;
P2=table[i];
P30=1;
delay500ms();
}
P0=0xff;
P1=0xff;
P2=0xff;
P30=0;
delay500ms();
P0=0xff;
P1=0xff;
P2=0xff;
P30=1;
delay500ms();
P0=0;
P1=0;
P2=0;
P30=0;
delay500ms();
delay500ms();
delay500ms();
delay500ms();
//***************************************************
P0=0xff;
P1=0xff;
P2=0xff;
P30=1;
delay500ms();
P0=0xff;
P1=0xff;
P2=0xff;
P30=0;
delay500ms();
for(i=8;i>0;i--)
{
P0=0xff;
P1=0xff;
P2=table[i-1];
P30=1;
delay500ms();
}
for(i=8;i>0;i--)
{
P0=0xff;
P1=table[i-1];
P2=0xff;
P30=1;
delay500ms();
}
for(i=8;i>0;i--)
{
P0=table[i-1];
P1=0xff;
P2=0xff;
P30=1;
delay500ms();
}
P0=0xff;
P1=0xff;
P2=0xff;
P30=1;
delay500ms();
}
}
void delay500ms()
{
unchar i=10;
TMOD=0x01;
while(i--)
{
TH0=(65536-50000)/256 ;
TL0=(-50000)%256;
TR0=1;
while(TF0==0);
TF0=0;
}
}
小伙子,你的程序是不是有点长啦,实现怎么简单的功能有必要吗
《●●关于自行车尾灯led跑马及闪烁问题》
答:按一次变一次就是给单片机一个触动讯号,进入下一个LED灯号程式。