资源简介

STC89C52RC使用电位器控制WS2812B调光,晶振24M,使能6T,否则频率不够(https://blog.csdn.net/yaleond/article/details/83474974)

资源截图

代码片段和文件信息

/********************************************************/
/*作 者:yaleond
/*修改日期:2018.10.28
/*版    本:V1.0
/*程序功能:用stc89c52rc单片机控制ws2812 RGB输出,显示全色彩
/*备        注:51单片机晶振24M
/********************************************************/

#include
#include
#include“math.h“
#define uchar unsigned char
sbit Send_Dat=P0^0;               //数据输出,上拉后接ws2812 IN脚
sbit SJ=P1^4;       //LED发光管的使能端

sbit ADC0804_SC=P2^0;
sbit ADC0804_RD=P3^7;
sbit ADC0804_WR=P3^6;
sbit DAC0832_SC=P3^2;
sbit DUAN=P2^6;     //74HC573的LE端    LED的段选端
sbit WEI=P2^7;      //74HC573的LE端    LED的位选端

//存储一个转化后的RGB2进制数  共24bits
struct My_24bits                    //结构体
{
    uchar G_VAL;                 //绿色  0-255
    uchar R_VAL;                  //红色 0-255
    uchar B_VAL;                  //蓝色0-255
};


/*写入数据时序*/
void Send_A_bit(uchar VAL)
{
    if (VAL==1)
    {
        Send_Dat=1;//
        _nop_();
        _nop_();
        Send_Dat=0;
    }
    else
    {
        Send_Dat=1;
        _nop_();
        Send_Dat=0;
    }

}



/*发送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);
    }
}

/*小延时函数  一个指令大概是0.25us*/
/* 100us*/
void delay()
{
    uchar ij;
    for

评论

共有 条评论