WS2811彩带驱动库函数
http://bbs.elecfans.com/jishu_508459_1_1.html
WS2811.h
#ifndef __WS2811_H
#define __WS2811_H
#include "sys.h"#define White 0xFFFFFF // 白色
#define Black 0x000000 // 黑色
#define Red 0x00ff00 // 红色
#define Green 0xff0000 // 绿色
#define Blue 0x0000ff // 蓝色#define nWs 16 // 有多少颗WS2811级联extern unsigned long WsDat[];extern void WS_Init(void);
extern void WS_SetAll(void);
extern u32 ColorToColor(unsigned long color0, unsigned long color1);#endif
WS2811.c
/****************************************************************************************
* 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 <stm32f10x.h>
#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; // PINGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // IO口速度为50MHzGPIO_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<nWs; 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 NStep; // 需要几步float RedStep, GreenStep, BlueStep; // 各色步进值unsigned long color; // 结果色unsigned char i;// 绿 红 蓝 三原色分解Red0 = color0>>8;Green0 = color0>>16;Blue0 = color0;Red1 = color1>>8;Green1 = color1>>16;Blue1 = color1;// 计算需要多少步(取差值的最大值)RedMinus = Red1 - Red0; GreenMinus = Green1 - Green0; BlueMinus = Blue1 - Blue0;NStep = ( abs0(RedMinus) > abs0(GreenMinus) ) ? abs0(RedMinus):abs0(GreenMinus);NStep = ( NStep > abs0(BlueMinus) ) ? NStep:abs0(BlueMinus);// 计算出各色步进值RedStep = (float)RedMinus / NStep;GreenStep = (float)GreenMinus / NStep;BlueStep = (float)BlueMinus / NStep;// 渐变开始for(i=0; i<NStep; i++){Red1 = Red0 + (int)(RedStep * i);Green1 = Green0 + (int)(GreenStep * i);Blue1 = Blue0 + (int)(BlueStep * i);color = Green1<<16 | Red1<<8 | Blue1; // 合成 绿红蓝WsDat[0] = color;WS_SetAll(); // 输出delay_ms(1); // 渐变速度}// 渐变结束return color;
}
WS2811彩带驱动库函数相关推荐
- 51 单片机实战教程(13 外围芯片驱动程序之CS1237芯片驱动)
CS1237芯片是一枚国产24位A/D转换芯片,输出速率可选:10Hz.40Hz.640Hz.1.28kHz.内置时钟电路,不需外部晶振.带可编程PGA,PGA放大倍数可选:1.2.64.128.2 ...
- 51 单片机实战教程(14 外围芯片驱动程序之LTC1658芯片驱动)
LTC1658是一款14bit轨到轨DAC芯片.可选用3V或5V供电,采用3线串口通信(兼容SPI与MICROWIRE),其应用场景为数字校准.工业控制.自动测试设备等.它采用SOP8封装,Pin脚定 ...
- 自定义数码管IP核,并让NiosⅡ SBT for Eclipse自动抓取驱动文件
1.前言 在Platform Designer(原Qsys)中创建自定义六位七段独立数码管IP核并让NiosⅡ SBT for Eclipse自动抓取驱动文件. 开发环境:Quartus Prime ...
- 4412开发板学习之Linux驱动开发(五):4412MMU及GPIO操作(点灯)
4412MMU及GPIO操作(点灯) 物理地址与虚拟地址 与传统MCU的对比 4412中的物理地址 MMU内存管理单元 存储器分类 4412中的存储器映射 物理地址和虚拟地址 其他的地址概念 GPIO ...
- SylixOS下 i.MX RT1050的GPIO驱动实例
实例源码 下面是 i.MX RT1050 的GPIO驱动实现源码: /***************************************************************** ...
- 0.96寸_OLED_屏幕_SSD1306_IIC通信_入门教程_指令详解_驱动介绍_笔记分享_初学者易懂
目录 一.简介 1:总结 2:屏幕介绍 二.基本使用流程 1_介绍: 2_流程:(省略了应答) 三.指令集 1.基础指令 1:设置对比度(亮度)(81H + A[7:0]) 2:设置全屏全亮(A4H. ...
- 浮点运算和代码优化, 音频常识, 并行计算
http://antkillerfarm.github.io/ 浮点运算和代码优化 1.浮点运算问题 浮点运算在工业中应用非常广泛,但嵌入式CPU通常没有对浮点运算提供直接的硬件支持.而采用标准库提供 ...
- 2021年2月28日【Jiawei_Z】Ethercat的整个实现过程(举例:Lan9252)
一.基本知识点---数据帧格式 从图 中可以看出,一个 EtherCAT 帧中包含若干个 EtherCAT 子报文. 每个子报文由子报文头.数据区和工作计数器 WKC 组成. EtherCAT 进行网 ...
- 如何用TI Unifalsh烧录程序到CC3200 Launchpad
板子样式 SDK软件开发套件的下载 下载网址:CC3200 SDK工具包下载 在TI注册了用户之后进行下载,前两个都要下载.运行installer文件,把SDK软件开发套件安装到系统默认路径,或者自己 ...
- Linux学习~树莓派gpio控制
WiringPi 是应用于树莓派平台的 GPIO 控制库函数,WiringPi 遵守 GUN Lv3.wiringPi 使用 C 或者 C++ 开发并且可以被其他语言包转,例如 Python.ruby ...
最新文章
- 两次杀人,自动驾驶技术之恶
- PostgreSQL学习手册(常用数据类型)
- 中object转为list集合_java基础集合小结
- Linux与Windows比较出的20个优势
- 经典插花的教训 PKU 1157
- C++中的namespace ----转载
- JAVA基础之自定义容器实现
- mysql的引双向链表_一分钟掌握MySQL的InnoDB引擎B+树索引
- javascript 西瓜一期 14 回顾 字符与编码 进制转换 数据保存
- css案例学习之并集选择器
- 【Codeforces 1051D】Bicolorings
- Python 自动识别图片文字—保姆级OCR实战教程
- MATLAB中求某个函数的积分并绘图
- 优维低代码:Pipes 管道
- 基于ESP32的蓝牙刷屏器自动点击器的制作
- 3.5.4 Exposure Fusion(曝光融合)—Mertens TMO
- I2C的ACK和NACK
- 深入浅出LDA(1)
- 中国碱性电解二氧化锰市场行业动态与投资规划分析报告2022-2028年
- 全球十大资质正规现货黄金交易平台排名榜单(最新版汇总)
热门文章
- winserver2012安装mysql8.0.22需要安装vc++2015时报错0x80240017未指定错误
- 百兆网络变压器:H81601S产品规格及建议配置的芯片型号
- android Google Advertising ID 如何重置
- miui9android8.0xp框架,MIUI9MIUI10官方8.0/8.1刷入xp框架
- qu32调音台说明书_Qu-32 数字调音台
- Sap Hana触发器
- 搭建steam游戏服务器
- 微信公众平台二次开发技术文档
- 企业微信登陆服务器设置,企业微信怎么登入
- python井字棋_用python井字棋