C51中封装WS2812
为了方便移植和使用对WS2812进行了封装,包含ws2812.c 和 ws2812.h文件
ws2812.h文件代码如下
#ifndef __WS2812_H
#define __WS2812_H
#include"config.h"#define Ws2812BufNumber 48
#define MAXSTYLE 24 //最大模式sbit DIO=P5^4;#define Wait400ns {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} //388
#define Wait850ns {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();} //860//预定义颜色
#define BLACK 0,0,0
#define RED 255,0,0
#define GREEN 0,255,0
#define BLUE 0,0,255
#define YELLOW 255,255,0
#define PURPLE 255,0,255//紫
#define CYAN 0,255,255//青
#define WHITE 255,255,255extern unsigned char pdata Ws2812Data[Ws2812BufNumber];
extern unsigned char redBuf;
extern unsigned char greenBuf;
extern unsigned char blueBuf;void Ws2812Init();//引脚初始化
//void WriteRgbOne(unsigned char num,unsigned char Red,unsigned char Green,unsigned char Blue); //对指定1个灯写指定颜色
void WriteRgbNumber(unsigned char num,unsigned char Red,unsigned char Green,unsigned char Blue); //对指定数量灯写指定颜色
void Ws2812Refresh(unsigned char count);//输出时按GRB顺序输出
void WriteRgbBuf(unsigned char Red,unsigned char Green,unsigned char Blue);//写颜色缓存#endif //__WS2812_H
ws2812.c文件代码如下
#include "ws2812.h"unsigned char pdata Ws2812Data[Ws2812BufNumber];
unsigned char redBuf=0;//显示数据缓存
unsigned char greenBuf=0;
unsigned char blueBuf=0;void Ws2812Init()
{SetGpioMode(GPIOP5,PIN_4,GPIO_Mode_Out_PP);//设置GPIO模式 5.4 设为推挽 GPIO_Mode_Out_IN准双向 GPIO_Mode_Out_PP推挽 GPIO_Mode_AIN高阻GPIO_Mode_Out_OD开漏DIO=0;
}void Send0(void)
{DIO=1;Wait400ns;DIO=0;Wait850ns;}void Send1(void)
{DIO=1;Wait850ns;DIO=0;Wait400ns;}void Ws2812Rest(void)
{DIO=0;Number_Down[WsOut_delay]=2; }
/*
void WriteRgbOne(unsigned char num,unsigned char Red,unsigned char Green,unsigned char Blue) //对指定1个灯写指定颜色
{Ws2812Data[(num-1)*3]=Green;Ws2812Data[(num-1)*3+1]=Red;Ws2812Data[(num-1)*3+2]=Blue;
}
*/void WriteRgbNumber(unsigned char num,unsigned char Red,unsigned char Green,unsigned char Blue) //对指定数量灯写指定颜色
{unsigned char i=0;for(;i<=num;i++){Ws2812Data[i*3]=Green;Ws2812Data[i*3+1]=Red;Ws2812Data[i*3+2]=Blue;}
}void Ws2812Refresh(unsigned char count)//输出时按GRB顺序输出
{unsigned char i=0;for(;i<count*3;i++){if((Ws2812Data[i]&0x80)==0) Send0(); else Send1();if((Ws2812Data[i]&0x40)==0) Send0(); else Send1();if((Ws2812Data[i]&0x20)==0) Send0(); else Send1();if((Ws2812Data[i]&0x10)==0) Send0(); else Send1();if((Ws2812Data[i]&0x08)==0) Send0(); else Send1();if((Ws2812Data[i]&0x04)==0) Send0(); else Send1();if((Ws2812Data[i]&0x02)==0) Send0(); else Send1();if((Ws2812Data[i]&0x01)==0) Send0(); else Send1();}//延时一段时间Ws2812Rest();}void WriteRgbBuf(unsigned char Red,unsigned char Green,unsigned char Blue)//写颜色缓存
{redBuf=Red;greenBuf=Green;blueBuf=Blue;
}
C51中封装WS2812相关推荐
- C51中变量类型和范围
文章目录 1 C51中变量类型和范围 1 C51中变量类型和范围 C51中变量类型和范围需要特别注意下,int只占两个字节,指针类型也是占2个字节. 参考资料: 手把手教你学51单片机:C语言版
- openresty开发系列27--openresty中封装redis操作
openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...
- java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法
在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...
- main.js中封装全局登录函数
main.js中封装全局登录函数 1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在 每一个界面通过类似指向对象的方式,去访问这个函数. ...
- vue全局安装jquery,vue使用bootstrap框架,vue中封装websocket通讯,vue引入element-ui 组件库,引入highcharts图表插件
vue安装jquery: 1.使用vue-cli创建好vue项目后,在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 2.修改项目文件 build ...
- 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?
实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1 使用定时器/计数器实现精确延时 ...
- Win32 DLL和MFC DLL 中封装对话框
Win32 DLL和MFC DLL 中封装对话框 分类: 挂挂2007-07-02 12:36 3344人阅读 评论(1) 收藏 举报 现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是 ...
- c语言实数的存放形式,C51中float定义的实数存放形式
C51中的浮点数采用IEEE-754标准来表示,存储长度为4个字节,其中包含3个位域:数符,阶码和尾数. (1)1位数符位:D31 (2)8位阶码:D30----D23(补码形式存放),其中D30是符 ...
- C51中intrins_h头文件解释分析
文章目录 摘要 源代码 说明 举个栗子 摘要 这是关于C51中使用循环移位等函数的头文件定义的分析 源代码 /*-------------------------------------------- ...
最新文章
- 看不见的Unicode码让敏感词轻松逃过审核,谷歌IBM都中招
- element-ui表格列金额显示两位小数
- c++ map用法_Pandas数据处理三板斧——map、apply、applymap详解
- HTML5获取autofocus 属性:输入文字点定位到该位置
- spring mvc 模拟数据库实现注册 登录
- 组态王授权产品id和授权锁id_软件加密授权工具推荐
- mysql实现知识图谱_基于电影知识图谱的智能问答系统学习记录
- Keyerror ‘acc‘ KeyError: ‘val_acc‘解决方法
- python matplotlib数据可视化教程_Python使用matplotlib实现数据可视化教程
- C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决...
- mysql数据库105页_MySQL数据库的常见操作
- edius隐藏快捷键_Eduis快捷键,大家参考一下!【EDIUS】史上最全的EDIUS快捷键资料分享!...
- ipad分屏功能怎么开启_win10录屏功能怎么开启
- 010 Editor逆向分析文档
- 代理模式(自己实现源码)
- 生成随机的姓名、电话
- 论文笔记:PaintsTorch: a User-Guided Anime Line Art Colorization Tool
- uniapp跳转外部链接
- 一款炫丽的网页播放器插件
- JAVA毕业设计vue健康餐饮管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库