您好,登录后才能下订单哦!
WS2812B七彩LED具有集成度高、使用方便等特点,但是800K的数据速率(IO变化速率高达2.4M),对单片机提出了较高的要求,通常是采用SPI+DMA方式驱动,
也有人采用汇编实现,但是要预先把数据转换为按bit存放,在LED级连数量较多的情况下,需要占用极多的存储空间。
在驱动WS2812B上花费了太多的时间,走了不少弯路,记录下来:

128分频下的输出波形
源代码:
void WS2812_SendArray(uchar xdata *pSource, uchar length) {   
    EA    =    0;    
#pragma ASM    
    CLR      WS5050_DI    
    MOV R1,#160    
SA_DELAY25:    
    DJNZ    R1, SA_DELAY25    
    MOV R1,#160    
SA_DELAY25_2:    
    DJNZ    R1, SA_DELAY25_2
;    R5:length, R1:8bit, R4:临时存储A   
    MOV        DPH, R6    
    MOV        DPL, R7    
    MOVX    A, @DPTR    
    MOV      R1,#8        ;2    
SA_BIT_PHASE0:    
    SETB    WS5050_DI    ;4    
    NOP                    ;1    
    RLC      A            ;1    
    JC        SA_BIT_1    ;3    
    NOP                    ;1    
    CLR        WS5050_DI    ;4    
    CJNE    R1, #1, SA_BIT0_NOT8    ;4    
;    当寄存器R1=1,说明是最后一位,则准备下一字节    
    INC        DPTR        ;1    
    MOVX    A, @DPTR    ;2    
    MOV      R1,#9        ;2    
    DJNZ    R5, SA_PHASE3    ;4    
;    R5=0,结束    
    SJMP    SA_END    ;3    
SA_BIT0_NOT8:    
;    R1>1,前七位    
    XCH        A, R4        ;2    
    MOVX    A, @DPTR    ;2    
    XCH        A, R4        ;2    
    NOP    
    SJMP    SA_PHASE3    ;3    
SA_BIT_1:    
    CJNE    R1, #1, SA_BIT1_NOT8    ;4    
;    当寄存器R1=1,说明是最后一位,则准备下一字节    
    INC        DPTR        ;1    
    MOVX    A, @DPTR    ;2    
    MOV      R1,#9        ;2    
    NOP    
    DJNZ    R5, SA_BIT1_9TH    ;4    
;    R5=0,结束    
    SJMP    SA_END    ;3    
SA_BIT1_NOT8:    
    XCH        A, R4        ;2    
    MOVX    A, @DPTR    ;2    
    XCH        A, R4        ;2    
    NOP    
    NOP    
    NOP    
SA_BIT1_9TH:    
    CLR        WS5050_DI    
    NOP                    ;1    
    NOP                    ;1    
SA_PHASE3:    
    DJNZ    R1, SA_BIT_PHASE0    ;4
SA_END:   
    SETB    WS5050_DI    
#pragma ENDASM    
    EA    =    1;    
    pSource = 0;    
    length = 0;    
}    
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。