- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
光二极管,简称为LED,是一种常用的发光器件,通过电子与空穴复合释放能量发光,它在照明领域应用广泛。
关于 WS2812B 我就不多说了,规格说明书讲的很详细。
目前网上分享的 2812 驱动比较少,而且说明不详,使用起来不是很方便,
本着共同进步的精神在这里和大家分享一下我的调试经验。
MCU:STC12C5A08S2晶振:24M
//经验:2812 时序要求还是比较严,对传统 51 来说实现真的有难度,之前网上共享的 STC89C52 的驱动,即使真的点亮了灯带,估计也达不到我们的控制要求。因为 1T 的 51 加上 24M 的晶振,我在调试时也有点勉强,一次IO 的翻转就要 300ns。
下面是灯带的驱动程序,可直接用:
sbit Din = P3^2;
uint8 bdata LED_DAT;//可位操作的数据发送暂存变量声明sbit bit0 = LED_DAT^0; //被发送的数据各位定义
sbit bit1 = LED_DAT^1; sbit bit2 = LED_DAT^2; sbit bit3 = LED_DAT^3; sbit bit4 = LED_DAT^4; sbit bit5 = LED_DAT^5; sbit bit6 = LED_DAT^6; sbit bit7 = LED_DAT^7;
//复位码:低电平50us void Reset()
{
uint8 i;
Din = 0;
for(i = 0; i 50; i++) ;
} //================================================================ //发送 RGB 数据,一个 nop 为 40ns, 刷新一次 32*24*1.25us=960us //================================================================
//1 码 高电平 850ns,低电平 400ns 实测 863,424
#define CODE1 {Din = 1;_nop_();_nop_();_nop_();_nop_();_nop_();\ _nop_();_nop_();_nop_();_nop_();_nop_();\ _nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_(); \
Din = 0;_nop_();_nop_();\
}
//0 码 高电平 400ns,低电平 850ns 实测 343,704
#define CODE0 {Din = 1;_nop_();_nop_();_nop_();_nop_();
\
Din = 0;_nop_();_nop_();_nop_();_nop_();_nop_();\
_nop_();_nop_();_nop_();_nop_(); \
}
void SendData(uint8 *dat) //数据格式 G7-G0-R7-R0-B7-B0
{
LED_DAT = *dat++;
if(bit7==1) {CODE1} else {CODE0} if(bit6==1) {CODE1} else {CODE0} if(bit5==1) {CODE1} else {CODE0} if(bit4==1) {CODE1} else {CODE0} if(bit3==1) {CODE1} else {CODE0} if(bit2==1) {CODE1} else {CODE0} if(bit1==1) {CODE1} else {CODE0} if(bit0==1) {CODE1} else {CODE0} LED_DAT = *dat++;
if(bit7==1) {CODE1} else {CODE0} if(bit6==1) {CODE1} else {CODE0} if(bit5==1) {CODE1} else {CODE0} if(bit4==1) {CODE1} else {CODE0} if(bit3==1) {CODE1} else {CODE0} if(bit2==1) {CODE1} else {CODE0} if(bit1==1) {CODE1} else {CODE0} if(bit0==1) {CODE1} else {CODE0} LED_DAT = *dat;
if(bit7==1) {CODE1} else {CODE0} if(bit6==1) {CODE1} else {CODE0} if(bit5==1) {CODE1} else {CODE0} if(bit4==1) {CODE1} else {CODE0} if(bit3==1) {CODE1} else {CODE0} if
文档评论(0)