• 大小: 2KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: WS2811_C51  

资源简介

WS2811_C51程序

资源截图

代码片段和文件信息

/****************************************************************************************
* WS2811 彩灯驱动函数
*
* 调用方法:
* 修改宏定义: #define nWs 1 // 有多少颗WS2811级联
* WS_Init(); // IO初始化
* WsDat[0] = 0x808080;//显存赋值
* WS_SetAll();  // 发送数据
* ColorToColor(unsigned long color0 unsigned long color1);// 颜色渐变算法
*
* 作者:星希望(已校验)
* 日期:2015年6月24日
****************************************************************************************/
#include “sys.h“
#include 
#include “WS2811.h“
#include “delay.h“

/* 显存 */
unsigned long WsDat[nWs];


/**************************************************************************************
* IO初始化(移植时请修改)
**************************************************************************************/
void WS_Init()
{
GPIO_InitTypeDef  GPIO_InitStructure;

//端口时钟,使能
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA ENABLE );  

// 端口配置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PIN
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  // 推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度为50MHz
GPIO_Init(GPIOA &GPIO_InitStructure); // 根据设定参数初始化 
}

/**************************
* 内部延时
***************************/
void delay2us()
{
unsigned char i;
for(i=0; i<12; i++);
}
void delay05us()
{
unsigned char i;
for(i=0; i<1; i++);
}

/***************************
* 发送一比特
****************************/
void TX0()   { PAout(0) = 1; delay05us(); PAout(0) = 0; delay2us(); } // 发送0
void TX1()   { PAout(0) = 1; delay2us();  PAout(0) = 0; delay05us(); } // 发送1
void WS_Reset() { PAout(0) = 0; delay_us(60);  PAout(0) = 1; PAout(0) = 0; }

/**************************************************************************************
* 发送一字节
**************************************************************************************/
void WS_Set1(unsigned long dat)
{
unsigned char i;

for(i=0; i<24; i++)
{
if(0x800000 == (dat & 0x800000) ) TX1();
else TX0();
dat<<=1; //左移一位
}
}

/**************************************************************************************
* 发送所有字节
**************************************************************************************/
void WS_SetAll()
{
unsigned char j;

for(j=0; j {
WS_Set1(WsDat[0]);  // j / 0
}
WS_Reset();
}









/********************************************
* 求绝对值
********************************************/
unsigned char abs0(int num)
{
if(num>0) return num;

num = -num;
return (unsigned char) num;
}

/***********************************************************************************
* 颜色渐变算法
* 误差 <= 2
************************************************************************************/
u32 ColorToColor(unsigned long color0 unsigned long color1)
{
unsigned char Red0 Green0 Blue0;  // 起始三原色
unsigned char Red1 Green1 Blue1;  // 结果三原色
int   RedMinus GreenMinus BlueMinus; // 颜色差(color1 - color0)
unsigned char

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4266  2015-07-01 19:41  WS2811.c

     文件        500  2015-07-24 16:15  WS2811.h

----------- ---------  ---------- -----  ----

                 4766                    2


评论

共有 条评论

相关资源