本文来源电子发烧友社区,作者:full_stack, 帖子地址:https://bbs.elecfans.com/jishu_2293782_1_1.html
根据原理图,
参考控制LED的代码,
计算120M控制WS2812延时时间。
主要代码如下,
void WS_Set_One(unsigned long dat)
{
unsigned char i;
for(i=0; i<24; i++)
{
if(0x800000 == (dat & 0x800000) ) {GpioDataRegs.GPASET.bit.GPIO19 = 1; delay_250ns(); delay_250ns(); delay_250ns(); GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; delay_250ns();}
else {GpioDataRegs.GPASET.bit.GPIO19 = 1; delay_250ns(); GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; delay_250ns(); delay_250ns(); delay_250ns();}
dat <<= 1;
}
}
void WS_SetAll(unsigned long dat, unsigned char led_num)
{
unsigned char j;
for(j=0; jWS_Set_One(dat);
}
DELAY_US(300);
}
void Led_Cycle_Run(void)
{
unsigned char i;
for(i = 0; i < 30; i++)
{
WS_SetAll(0xFFFFFF, i);
DELAY_US(34000);
DELAY_US(34000);
}
}
;>
延时函数如下
void delay_250ns(void)
{
unsigned int i;
for(i=0; i<30; i++);
}
目前能实现控制灯条流水效果,
但是这个延时函数有问题,感觉,延时一条代码的时间,实际却很长,
造成无论发0码还是1码,都显示为1码。
全部0条评论
快来发表一下你的评论吧 !