ws2812b_ws2812b灯带容易坏 - CSDN
  • WS2812B使用备忘

    2019-08-31 18:55:08
    在淘宝卖的ws2812b rgb灯虽然都是同一名称,但是各家的数据格式都有有微小的不同,参考各家数据手册会发现高低电平的时间有许多不同。 如在淘宝“南方光电”买的ws2812b数据手册如下: 再如“糊糊蝶照明”RGB灯条的...

    在淘宝卖的ws2812b rgb灯虽然都是同一名称,但是各家的数据格式都有有微小的不同,参考各家数据手册会发现高低电平的时间有许多不同。

    如在淘宝“南方光电”买的ws2812b数据手册如下:
    南方光电
    再如“糊糊蝶照明”RGB灯条的数据手册:
    糊糊蝶照明
    网上还有其他版本的数据手册,时间也不一样,有兴趣可以搜一搜。
    以上时间差距会让颜色不准,在使用的时候要注意。
    除了手册差异(数据差异)导致的问题,还有不同写法io反转速度差异引起的时间不准。
    如:
    1.用库函数

     GPIO_SetBits(GPIOB,GPIO_Pin_5);
     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
    

    这样写的反转频率大约为2.7MHz,周期361ns

    2.用寄存器GPIOx_ODR

    GPIOB->ODR |= GPIO_Pin_5;
     GPIOB->ODR &=~ GPIO_Pin_5;
    

    这样写的反转频率小于18MHz,周期大于55.55ns

    3、用寄存器 GPIOB->BRR和GPIOB->BSRR

    GPIOB->BRR = GPIO_Pin_5;
    GPIOB->BSRR = GPIO_Pin_5;
    

    这样写的反转频率大约为18MHz,周期55.55ns

    由于我们需要0.3us的延时,所以直接排除库函数,而用寄存器BRR和BSRR应该是最好的选择。
    在stm32f103 72MHz主频下,一个__nop();为1/72M=13.9ns。

    所以,对于RGB灯条,
    T0H=T1L=55.5ns+1813.9ns;
    T0L=T1H=55.5ns+61
    13.9ns;

    展开全文
  • 1. 对于写驱动来说WS2812B芯片手册主要就是看通讯。 简单来说就是给WS2812B发送数据,数据就是RGB对应的值,先发高位,按照GRB的顺序发送数据。通常我们用高电平表示数字信号“1”,低电平表示数字信号“0...

     

    1.  对于写驱动来说WS2812B芯片手册主要就是看通讯。

     

     

     

    简单来说就是给WS2812B发送数据,数据就是RGB对应的值,先发高位,按照GRB的顺序发送数据。通常我们用高电平表示数字信号“1”,低电平表示数字信号“0”,但是WS2812B由他自己特定的1码和0码。从手册中的“数据传送时间”表中可知,1码高电平和低电平持续时间都为580ns-1us,0码高电平时间为220ns-380ns低电平时间为580ns-1us。若低电平时间持续大于280us,则说明一个周期的数据发送完毕,再发送数据则重新更新WS2812B中寄存器的值。

    根据特性采用PWM波模拟通讯数据,然后根据数据修改PWM的占空比。

     

    2.    查看STM32手册我们使用TIM3通道4产生PWM。1码时占空比为50%,0码占空比为25%,PWM周期为800KHZ,即1.25us,1码高电平和低电平均为625ns,0码高电平为313ns,低电平为937ns.

    3. 准备工作做完,编写程序。

     

    void WS2812B_TIM_init(void)
    {
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
        TIM_OCInitTypeDef  TIM_OCInitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        DMA_InitTypeDef DMA_InitStructure;
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
        /* GPIOA Configuration: TIM2 Channel 1 as alternate function push-pull */
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB, &GPIO_InitStructure);
        
          GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7; //中间
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);  
        
        
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
        /* Compute the prescaler value */
        //PrescalerValue = (uint16_t) (SystemCoreClock / 24000000) - 1;
        /* Time base configuration */
        TIM_TimeBaseStructure.TIM_Period = 90-1; // 800kHz 90-1
        TIM_TimeBaseStructure.TIM_Prescaler = 1-1;
        TIM_TimeBaseStructure.TIM_ClockDivision = 0;
        TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
        TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);

        /* PWM1 Mode configuration: Channel1 */
        TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
        TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
        TIM_OCInitStructure.TIM_Pulse = 0;
        TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
        TIM_OC1Init(TIM3, &TIM_OCInitStructure);

        /* configure DMA */
        /* DMA clock enable */
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);

        /* DMA1 Channel6 Config */
        DMA_DeInit(DMA1_Channel3);

        DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&TIM3->CCR4;    // physical address of Timer 3 CCR4
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)LED_BYTE_Buffer;        // this is the buffer memory
        DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;                        // data shifted from memory to peripheral
        DMA_InitStructure.DMA_BufferSize = 24;
        DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
        DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;                    // automatically increase buffer index
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;                            // stop DMA feed after buffer size is reached
        DMA_InitStructure.DMA_Priority = DMA_Priority_High;
        DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

        DMA_Init(DMA1_Channel3, &DMA_InitStructure);
        /* 只能使用通道1 TIMx_UP  TIM_DMA_CC2 */
        TIM_DMACmd(TIM3, TIM_DMA_Update, ENABLE);
    }
     

    /*

    注:本来是使用注释部分的代码合成发送数据的,但是会出现,发送数据完后,最有一个电平为高电平,导致通信

    异常,于是我在数据前面和最后面各增加了一个字节使电平为低电平。

    参数len 表示有各级LED灯, RGB对应的颜色值。

    */

    void WS_sendData(u8 len,uint32_t rgb)
    {

        uint8_t b = (rgb&0xff0000)>>16;
        uint8_t r = (rgb&0x00ff00)>>8;
        uint8_t g = (rgb&0xff);
        uint16_t i = 0;
        //u8 len =4;
        uint16_t sendLen =len*24+2;
       
    //    for(i=0;i<8;i++)
    //    {
    //        LED_BYTE_Buffer[i] = (0x80&g)>0?TIMING_ONE:TIMING_ZERO;g <<= 1;
    //    }
    //    for(i=0;i<8;i++)
    //    {
    //        LED_BYTE_Buffer[8 + i] = (0x80&r)>0?TIMING_ONE:TIMING_ZERO;r <<= 1;
    //    }
    //    for( i=0;i<8;i++)
    //    {
    //        LED_BYTE_Buffer[16 + i] = (0x80&b)>0?TIMING_ONE:TIMING_ZERO;b <<= 1;
    //    }  
    //    //LED_BYTE_Buffer[24*len]=50;
    //    
    //    while(len){
    //        if(len-- < 1){break;}
    //        for(i=0;i<24;i++)
    //        {
    //          LED_BYTE_Buffer[(24*len)+i] = LED_BYTE_Buffer[i];  
    //        }
    //    }
        
        for(i=1;i<9;i++)
        {
            LED_BYTE_Buffer[i] = (0x80&g)>0?TIMING_ONE:TIMING_ZERO;g <<= 1;
        }
        for(i=1;i<9;i++)
        {
            LED_BYTE_Buffer[8 + i] = (0x80&r)>0?TIMING_ONE:TIMING_ZERO;r <<= 1;
        }
        for( i=1;i<9;i++)
        {
            LED_BYTE_Buffer[16 + i] = (0x80&b)>0?TIMING_ONE:TIMING_ZERO;b <<= 1;
        }  
        LED_BYTE_Buffer[0]=0;
        LED_BYTE_Buffer[sendLen-1]=0;
        while(len){
            if(len-- < 1){break;}
            for(i=1;i<25;i++)
            {
              LED_BYTE_Buffer[(24*len)+i] = LED_BYTE_Buffer[i];  
            }
        }  
        DMA_SetCurrDataCounter(DMA1_Channel3, sendLen);     // load number of bytes to be transferred
        DMA_Cmd(DMA1_Channel3, ENABLE);             // enable DMA channel 3
        TIM_Cmd(TIM3, ENABLE);                         // enable Timer 3
        while(!DMA_GetFlagStatus(DMA1_FLAG_TC3)) ;     // wait until transfer complete
        TIM_Cmd(TIM3, DISABLE);                     // disable Timer 3
        DMA_Cmd(DMA1_Channel3, DISABLE);             // disable DMA channel 3
        DMA_ClearFlag(DMA1_FLAG_TC3);                 // clear DMA1 Channel 3 transfer complete flag
    }

     

     

    void main()

    {

    WS2812B_TIM_init();

            while(1)
            {       
                WS_sendData(1,0x0000ff00);
                 OSTimeDly(500);
                WS_sendData(2,0x0000ff00);
                 OSTimeDly(500);             
                WS_sendData(3,0x0000ff00);
                 OSTimeDly(300);       
                WS_sendData(4,0x0000ff00);
                 OSTimeDly(500); 
                WS_sendData(4,0x00FFFFff);
                 OSTimeDly(500);

    }

    }

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • STM32驱动---WS2812B,工程文件,自己用过,控制没用问题,自己改引脚就随意移植了。
  • RGB灯WS2812B

    千次阅读 2016-11-29 13:25:35
    原文地址:... 1.硬件介绍 注:800Kbps,相当于1.25us传输1比特数据。 ...注:在级联时,不要忘记每经过1个像素点传输,信号减少24bit. ...2.程序简介:这里是纳秒极的电平翻转,所

    原文地址:http://www.wfuyu.com/technology/21994.html

    1.硬件介绍

    注:800Kbps,相当于1.25us传输1比特数据。



    注:在级联时,不要忘记每经过1个像素点传输,信号减少24bit.







    2.程序简介:这里是纳秒极的电平翻转,所以传统的51单片机包括增强型51要斟酌能否实现,我本以为STM32F103系列是1定可以的,但后来调试的时候也比较费力,首先我调用了库函数,经过示波器的验证,库函数是不能满足这类电平翻转速度的,所以都变成了寄存器操作。这次调试,示波器发挥了不小的作用,全部延迟也是用示波器实时测出来的,还算校准。以下是关键函数的罗列。






    展开全文
  • WS2812B全彩LED灯,采用PWM+DMA方式控制,已经编写好红色呼吸灯、绿色呼吸灯、蓝色呼吸灯和随机呼吸灯程序,还有最基本的RGB三种颜色的0~255亮度调节函数。
  • 前言  一直想自己做一个LED的台灯,能够实现三色调节和光暗调节,搜索了下淘宝里的可调LED灯发现要么是只能调光暗,无法做到单色的调节,要么就是可以能实现调各种颜色,但是是无线的,多出一个遥控器是什么鬼......

    前言

           一直想自己做一个LED的台灯,能够实现三色调节和光暗调节,搜索了下淘宝里的可调LED灯发现要么是只能调光暗,无法做到单色的调节,要么就是可以能实现调各种颜色,但是是无线的,多出一个遥控器是什么鬼...我只是想在台灯的底座上开三个孔,连上旋钮实现调色和调光啊,多一个遥控器不像话啊,看来只能自己实现了。

           一通翻箱倒柜,发现5年前买的51开发板还在,就差一个能控的LED模块了!又一通搜索,发现一款WS2812B的LED控制模块好像挺符合我的需求的,但是网上发的程序要么是STM32的,要么是15系列的芯片的,没有我手头上51的,看来还是得自己手动来调了。

    WS2812B资料

    主要特点

    • 智能反接保护,电源反接不会损坏IC。
    • IC控制电路与LED点光源公用一个电源。
    • 控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
    • 内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
    • 内置上电复位和掉电复位电路。
    • 每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。
    • 串行级联接口,能通过一根信号线完成数据的接收与解码。
    • 任意两点传传输距离在不超过5米时无需增加任何电路。
    • 当刷新速率30帧/秒时,级联数不小于1024点。
    • 数据发送速度可达800Kbps。
    • 光的颜色高度一致,性价比高。

    主要应用领域

    • LED全彩发光字灯串,LED全彩模组, LED全彩软灯条硬灯条,LED护栏管。
    • LED点光源,LED像素屏,LED异形屏,各种电子产品,电器设备跑马灯。

    产品概述

    WS2813B是一个集控制电路与发光电路于一体的智能外控LED光源。其外型与一个5050LED灯珠相同,每个元件即为一个像素点。像素点内部包含了智能数字接口数据锁存信号整形放大驱动电路,还包含有高精度的内部振荡器和12V高压可编程定电流控制部分,有效保证了像素点光的颜色高度一致。

    数据协议采用单线归零码的通讯方式,像素点在上电复位以后,DIN端接受从控制器传输过来的数据,首先送过来的24bit数据被第一个像素点提取后,送到像素点内部的数据锁存器,剩余的数据经过内部整形处理电路整形放大后通过DO端口开始转发输出给下一个级联的像素点,每经过一个像素点的传输,信号减少24bit。像素点采用自动整形转发技术,使得该像素点的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。

    LED具有低电压驱动,环保节能,亮度高,散射角度大,一致性好,超低功率,超长寿命等优点。将控制电路集成于LED上面,电路变得更加简单,体积小,安装更加简便。

    机械尺寸(单位mm)

    机械尺寸与引脚图(单位mm)

    引脚功能 :

    序号

    符号

    管脚名

    功 能 描 述

    1

    VDD

    电源

    供电管脚

    2

    DOUT

    数据输出

    控制数据信号输出

    3

    VSS

    信号接地和电源接地

    4

    DIN

    数据输入

    控制数据信号输入

    最大额定值(如无特殊说明,TA=25℃,VSS=0V

    参数

    符号

    范围

    单位

    电源电压

    VDD

    +3.5~+5.3

    V

    逻辑输入电压

    VI

    -0.5~VDD+0.5

    V

    工作温度

    Topt

    -25~+80

    储存温度

    Tstg

    -55~+150

    电气参数(如无特殊说明,TA=-20~+70℃,VDD=4.5~5.5V,VSS=0V

    参数

    符号

    最小

    典型

    最大

    单位

    测试条件

    输入电流

    II

    ——

    ——

    ±1

    µA

    VI=VDD/VSS

    高电平输入

    VIH

    0.7VDD

    ——

    ——

    V

    DIN,SET

    低电平输入

    VIL

    ——

    ——

    0.3 VDD

    V

    DIN,SET

    滞后电压

    VH

    ——

    0.35

    ——

    V

    DIN,SET

     

    开关特性(如无特殊说明,TA=-20~+70℃,VDD=4.5~5.5V,VSS=0V

    参数

    符号

    最小

    典型

    最大

    单位

    测试条件

    振荡频率

    Fosc

    ——

    600

    ——

    KHz

    ——

    传输延迟时间

    tPLZ

    ——

    ——

    300

    ns

    CL=15pF,DIN→DOUT,RL=10KΩ

    下降时间

    tTHZ

    ——

    ——

    120

    µs

    CL=300pF,OUTR/OUTG/OUTB

    输入电容

    CI

    ——

    ——

    15

    pF

    ——

    LED 特性参数

    数据传输时间TH+TL=1.25µs±600ns)

    T0H

    0码,  高电平时间

    0.4µs

    ±150ns

    T1H

    1码,  高电平时间

    0.8 µs

    ±150ns

    T0L

    0码,  低电平时间

    0.85µs

    ±150ns

    T1L

    1码,  低电平时间

    0.45 µs

    ±150ns

    RES

    帧单位,低电平时间

    50µs以上

     

    时序波形图


     

    WS2812B

    输入码型:

    连接方法:


     

    WS2812B

     


     

    WS2812B

    数据传输方法

    注:其中D1为MCU端发送的数据,D2、D3、D4为级联电路自动整形转发的数据。

    24bit数据结构:

    G7

    G6

    G5

    G4

    G3

    G2

    G1

    G0

    R7

    R6

    R5

    R4

    R3

    R2

    R1

    R0

    B7

    B6

    B5

    B4

    B3

    B2

    B1

    B0

    注:高位先发,按照GRB的顺序发送数据。

    典型应用电路:

    以上内容复制粘贴。。。来源https://wenku.baidu.com/view/25f176db482fb4daa48d4ba1.html,还有英文版https://wenku.baidu.com/view/76a0294580eb6294dc886c4d.html

    主要注意以下几个点:

    1.发送的01数据流一定要跟规格书走;误差不能超过150ns,51单片机的频率小一点的晶振可能根本达不到这个要求,所以我采用     了一颗24M晶振,并且在ISP下载工具中打开了,使频率翻了一倍,大概48M,那么一条指令的大概时间就       是6/24M=0.25µs,勉强够用。

    2.发送的24位数据一定注意发送的顺序,文档中的要求是先发绿色色值,并且是从高位开始发送;

    3.发送数据时有多少个灯要发送多少个24位颜色值,而且2个24位颜色值之间时间间隔不能超过50µs,否则,模块会把这个24位     数当做是第一个灯的数据;

    4.嗯,想起来再补充;

    关键思路

            先实现能调光,而想要调光,那么肯定要有一个电位器进行调节,然后通过ADC模块来读入值,再转化后发送到ws2812b模块。嗯,直接先用51开发板上的ADC模块来调试吧。

    51开发板上自带的ADC模块,J2直接短接34脚,使用电位器来调节。

    ADC模块代码开发板已经自带了,直接拿来使用,不在本文的关键内容中,不做赘述!

    ws2812b有四口,一个VCC,一个GND,一个DATA IN,一个DATA OUT。51与ws2812b的连接电路很简单,P0.0口上拉一个10K电阻后与ws2812b的data in口连接,ws2812b的电源地端与51的电源共地,电源的+-之间并一个100uf的电容,搞定!

     

    相关代码

    注意,以下代码都是在stc89c52rc,晶振为24M,打开使能6T功能下测试成功,P0口上拉电阻,接ws2812b的data in端,其他条件下需要自己做代码上的调整!

    (1)写入一位数据时序:

    /*写入数据时序*/
    void Send_A_bit(uchar VAL)
    {
        if (VAL==1)
        {
            Send_Dat=1;
            _nop_();//两个nop,大概是0.5us,经测试,发送完1后的延时最重要
            _nop_();
            Send_Dat=0;
        }
        else
        {
            Send_Dat=1;
            _nop_(); //一个nop,大概是0.25us
            Send_Dat=0;
        }
    }

    (2)发送一个灯的24位数据:

    //存储一个转化后的RGB2进制数  共24bits
    struct My_24bits                    //结构体
    {
        uchar G_VAL;                 //绿色  0-255
        uchar R_VAL;                  //红色 0-255
        uchar B_VAL;                  //蓝色0-255
    };
    
    /*发送24位字符(包含RGB信息各8位)*/
    void Send_24bits(struct My_24bits RGB_VAL)
    {
        uchar i;
        for(i=0; i<8; i++)
        {
            Send_A_bit(RGB_VAL.G_VAL>>(7-i)&0x01);//注意是从高位先发
        }
        for(i=8; i<16; i++)
        {
            Send_A_bit(RGB_VAL.R_VAL>>(15-i)&0x01);
        }
        for(i=16; i<24; i++)
        {
            Send_A_bit(RGB_VAL.B_VAL>>(23-i)&0x01);
        }
    }

    (3)ADC转换代码,不是重点,可以下载后查看,略;

     

    以上,实现了电位器对led灯亮度进行调节,可以对ws2812b模块进行很好的了解与熟悉。因为此部分只能调光,不能对单色进行调节,下部分会把ADC模块替换掉,改用EC11编码器,就可以对单色逐一调节,然后用上EEPROM保存颜色值,断电重启能记忆上次颜色值。嗯,EC11还没买,没有示波器,只能纯手调,看运气和人品了。。。

    完整代码:https://download.csdn.net/download/yaleond/10749279

     

     

     

     

     

     

     

     

    展开全文
  • #include "fy_ws2812b.h" /* 此代码针对stm8s003平台 @16M 灯的性质决定,需要一次性刷新,比如16个灯就必须一次性刷新16个, 而不能一个一个中间有间隔的刷新,这样就只有一地个灯亮, 如果需要花样把不需要亮...
  • STM32F103控制WS2812B

    万次阅读 2018-08-24 18:04:00
    WS281x.h" #include "stdio.h" #include "stm32f10x_tim.h" #include "stm32f10x_dma.h"  #include "stm32f10x_gpio.h"  #include "misc.h"   uint16_t...
  • 单片机控制ws2812b

    万次阅读 2016-08-20 16:46:57
    单片机程序转: http://www.ndiy.cn/thread-36302-1-1.html 代码如下: /********************************************************/ .../*程序功能:用51单片机控制ws2812 RGB输出,显示全
  • RGB三色灯珠WS2812B/WS2815B

    千次阅读 2019-04-11 21:52:57
    WS2812B/WS2815B均为RGB三色灯珠,WS2815BWS2812B的升级版,区别在于两点,首先是供电电压由5V变为了12V供电,有效的降低了整个像素点的工作电流,降低线路板压降,最大限度保证像素点在很远距离传输时达到良好的...
  • 在本篇文章中,我们将学习如何使用Arduino开发板控制可独立寻址的RGB LED灯或基于WS2812B的LED灯条。首先,我们通过一些基本示例阐释其工作原理,然后看一个非常酷的使用这些LED灯的Arduino项目 - DIY交互式LED咖啡...
  • ws2812b模块资料

    2020-07-30 23:31:49
    ws2812b模块资料
  • 最近在做一个STM32项目,需要驱动24位WS2812b RGB灯环。曾写下一篇博文《WS2812b/2811/6812灯珠 – STM32F103 CPU-SPI方式驱动》。原理是:用SPI来模拟WS2812b的驱动信号时序。虽然这个程序能够正常工作,但也有一些...
  • 最近在做一个STM32项目,需要驱动24位WS2812b RGB灯环。灯环签收后验货的时候,还不知怎么用STM32驱动这种RGB,而用的是STM8+GPIO模拟(汇编)方式。这个程序的思路是先设定每个灯的颜色,然后一起发送出去;其中,...
  • STM32单片机WS2812B驱动程序灯效程序

    热门讨论 2020-07-30 23:32:10
    代码主要是基于stm32开发,包括两路ws2812b初始化代码,以及呼吸灯、跑马灯、彩虹灯等灯效程序,均是用pwm+dma的方式发送数据,不占用内存,本程序已用在项目中,可稳定运行。
  • 使用Arduino连接16*16 的ws2812b 的led屏的时候,目前没有找到相关的第三方库可以直接显示汉字,所以只能使用笨办法,汉字驱模,然后对于模对应的16进制数转化成2进制, 例如 汉字你的16进制是: 你(0) {0x0C,0...
  • 配合文章ws2812B详细使用记录(PWM+DMA),是ws212b的官方文档,有对时序和具体操作的解释
  • 靠定时器产生通信时序的WS2812B驱动程序,相较于靠spi产生通讯信号的方案,具有准确和稳定的优点,数据传输使用DMA模式,最少占用处理器资源
  • 这是一个基于STC8的单片机与WS2812B的LED方案一起集成的灯带显示控制方案,STC8通过串口接口其他设备发送过来的显示指令,然后STC8通过单线HDQ通讯与WS2812B模块交互来进行灯带的显示控制。
  • WS2812B是一种集成了电流控制芯片的低功耗的RGB三色灯, 关于这个灯的一些硬件分析我就不多说,百度一堆一堆的; 今天主要讲讲使用SPI的MOSI+DMA实现控制的方式; 主MCU:灵动微的 MMF031,关于这个MCU就是直接仿造...
1 2 3 4 5 ... 20
收藏数 73,281
精华内容 29,312
关键字:

ws2812b