为了方便移植和使用对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相关推荐

  1. C51中变量类型和范围

    文章目录 1 C51中变量类型和范围 1 C51中变量类型和范围 C51中变量类型和范围需要特别注意下,int只占两个字节,指针类型也是占2个字节. 参考资料: 手把手教你学51单片机:C语言版

  2. openresty开发系列27--openresty中封装redis操作

    openresty开发系列27--openresty中封装redis操作 在关于web+lua+openresty开发中,项目中会大量操作redis, 重复创建连接-->数据操作-->关闭 ...

  3. java sql封装,在Java系统中封装SQL语言的处理方法及系统的制作方法

    在Java系统中封装SQL语言的处理方法及系统的制作方法[ 技术领域: ][0001]本发明涉及计算机数据处理 技术领域: ,特别是涉及一种在Java系统中封装SQL语言的处理方法及系统.[ 背景技术 ...

  4. main.js中封装全局登录函数

    main.js中封装全局登录函数 1. 在 main.js 中封装全局登录函数 通过 vue 对象的原型扩展,可以扩展一个函数,这样这个函数就可以在 每一个界面通过类似指向对象的方式,去访问这个函数. ...

  5. vue全局安装jquery,vue使用bootstrap框架,vue中封装websocket通讯,vue引入element-ui 组件库,引入highcharts图表插件

    vue安装jquery: 1.使用vue-cli创建好vue项目后,在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 2.修改项目文件 build ...

  6. 单片机r6/r7c语言怎么用,关于单片机C51中c语言函数(-nop-())?

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时:另一种是软件延时,这种方法主要采用循环体进行. 1  使用定时器/计数器实现精确延时 ...

  7. Win32 DLL和MFC DLL 中封装对话框

    Win32 DLL和MFC DLL 中封装对话框 分类: 挂挂2007-07-02 12:36 3344人阅读 评论(1) 收藏 举报 现在最常看见的关于DLL的问题就是如何在DLL中使用对话框,这是 ...

  8. c语言实数的存放形式,C51中float定义的实数存放形式

    C51中的浮点数采用IEEE-754标准来表示,存储长度为4个字节,其中包含3个位域:数符,阶码和尾数. (1)1位数符位:D31 (2)8位阶码:D30----D23(补码形式存放),其中D30是符 ...

  9. C51中intrins_h头文件解释分析

    文章目录 摘要 源代码 说明 举个栗子 摘要 这是关于C51中使用循环移位等函数的头文件定义的分析 源代码 /*-------------------------------------------- ...

最新文章

  1. 看不见的Unicode码让敏感词轻松逃过审核,谷歌IBM都中招
  2. element-ui表格列金额显示两位小数
  3. c++ map用法_Pandas数据处理三板斧——map、apply、applymap详解
  4. HTML5获取autofocus 属性:输入文字点定位到该位置
  5. spring mvc 模拟数据库实现注册 登录
  6. 组态王授权产品id和授权锁id_软件加密授权工具推荐
  7. mysql实现知识图谱_基于电影知识图谱的智能问答系统学习记录
  8. Keyerror ‘acc‘ KeyError: ‘val_acc‘解决方法
  9. python matplotlib数据可视化教程_Python使用matplotlib实现数据可视化教程
  10. C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 大型软件系统客户端数据同步的问题解决...
  11. mysql数据库105页_MySQL数据库的常见操作
  12. edius隐藏快捷键_Eduis快捷键,大家参考一下!【EDIUS】史上最全的EDIUS快捷键资料分享!...
  13. ipad分屏功能怎么开启_win10录屏功能怎么开启
  14. 010 Editor逆向分析文档
  15. 代理模式(自己实现源码)
  16. 生成随机的姓名、电话
  17. 论文笔记:PaintsTorch: a User-Guided Anime Line Art Colorization Tool
  18. uniapp跳转外部链接
  19. 一款炫丽的网页播放器插件
  20. JAVA毕业设计vue健康餐饮管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库

热门文章

  1. 男人应该看的十部电影
  2. Google三驾马车之MapReduce
  3. 递归实现钢条切割问题(Java版)
  4. 上海城市发展集团借力泛微文书定,实现标准化、数字化的档案管理
  5. MySQL数据库怎么查看er图表_详解 Navicat 查看方式之ER图表
  6. iPhone 4S,吸干你的电池
  7. 笔记本外接显示器DELL,显示器总是阶段性黑屏
  8. 大数据下的竞彩足球胜平负分析技巧2
  9. 网络与信息安全学习(五)
  10. JavaScript - 一维数组、二维数组基础