幻彩灯 html5,WS2811幻彩灯程序

/****************************************************************************************

* WS2811 彩灯驱动函数

*

* 调用方法:

*        修改宏定义: #define nWs 1        // 有多少颗WS2811级联

*        WS_Init();        // IO初始化

*        WsDat[0] = 0x808080;//显存赋值

*        WS_SetAll();  // 发送数据

*        ColorToColor(unsigned long color0, unsigned long color1);// 颜色渐变算法

*

* 作者:星希望(已校验)

* 日期:2015年6月24日

****************************************************************************************/

#include "includes.h"

#define RCC_PAout                 RCC_AHBPeriph_GPIOB

#define PORT_PAout                GPIOB

#define PIN_PAout                GPIO_Pin_15

#define RCC_PEN                 RCC_AHBPeriph_GPIOB

#define PORT_PEN                 GPIOB

#define PIN_PEN                 GPIO_Pin_9

#define PAout_0()                PORT_PAout->BRR = PIN_PAout

#define PAout_1()                PORT_PAout->BSRR = PIN_PAout

#define PEN_0()                PORT_PEN->BRR = PIN_PEN

#define PEN_1()                PORT_PEN->BSRR = PIN_PEN

/* 显存 */

unsigned long WsDat[nWs];

uint32_t WsCol[nWs];

/*

*********************************************************************************************************

*        函 数 名: WS_Init

*        功能说明: 初始化WS2811输出GPIO

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_Init()

{

GPIO_InitTypeDef  GPIO_InitStruct;

//端口时钟,使能

RCC_AHBPeriphClockCmd(RCC_PAout | RCC_PEN, ENABLE);

// 端口配置

GPIO_InitStruct.GPIO_Pin = PIN_PAout;                                // PIN

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;                 // 推挽输出

GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;                // IO口速度为50MHz

GPIO_InitStruct.GPIO_OType=GPIO_OType_PP;

GPIO_Init(PORT_PAout, &GPIO_InitStruct);                                        // 根据设定参数初始化

GPIO_InitStruct.GPIO_Pin = PIN_PEN;                                // PIN

GPIO_Init(PORT_PEN, &GPIO_InitStruct);                                        // 根据设定参数初始化

PEN_1();

}

/*

*********************************************************************************************************

*        函 数 名: delay2us

*        功能说明: 延时2us

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void delay2us(void)

{

unsigned char i;

for(i=0; i<12; i++);

}

/*

*********************************************************************************************************

*        函 数 名: delay05us

*        功能说明: 延时0.5us

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void delay05us(void)

{

unsigned char i;

for(i=0; i<2; i++);

}

/*

*********************************************************************************************************

*        函 数 名: TX0,TX1

*        功能说明: 高速模式(最快)发送码值0 ,1

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void TX0() { PAout_1(); delay05us; PAout_0(); delay_us(2); } // 发送0

void TX1() { PAout_1(); delay_us(2);  PAout_0(); delay05us; } // 发送1

/*

*********************************************************************************************************

*        函 数 名: TXL0,TXL1

*        功能说明: 速度降一倍发送码值0 ,1

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/

void TXL0(void) { PAout_1();  delay2us;         PAout_0(); delay_us(5); } // 发送0

void TXL1(void) { PAout_1();  delay_us(5);  PAout_0(); delay2us; } // 发送1

/*

*********************************************************************************************************

*        函 数 名: WS_Reset

*        功能说明: 发送码值 帧单位

*        形    参:无

*        返 回 值: 无

*********************************************************************************************************

*/void WS_Reset() {PAout_0()        ; delay_us(60);  PAout_1();}//PAout_0();

/*

*********************************************************************************************************

*        函 数 名: WS_Set1

*        功能说明: 高速发送24Bit数据

*        形    参:dat,发送的数据

*        返 回 值: 无

*********************************************************************************************************

*/

void WS_SetH(unsigned long dat)

{

unsigned char i;

for(i=0; i<24; i++)

{

if(0x800000 == (dat & 0x800000) )        TX1();

else                                                                TX0();

dat<<=1;                                                        //左移一位

}

}

/*

*********************************************************************************************************

*        函 数 名: WS_SetL

*        功能说明: 低速发送24Bit数据

*        形    参:dat,发送的数据</

阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值