找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4680|回复: 4
打印 上一主题 下一主题
收起左侧

哪位大佬有驱动ws2812b的源程序 求分享

[复制链接]
跳转到指定楼层
楼主
ID:443823 发表于 2018-12-11 09:33 来自手机 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
如题
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2018-12-30 11:43 | 只看该作者
程序分享出来给需要的人作参考
  1. /*------------------------------------------------------------------------------------
  2. * 项目名称:
  3. 带单片机8位全彩流水灯模板程序V1.0
  4. * 功能描述:
  5. 1、两个按键采用中断形式,一个控制显示模式,一个控制显示颜色
  6. * 历史版本:
  7.      2016-01-27:
  8.        - 初始版本 V1.0.0;
  9. * 配置说明:
  10.           - MCU    :STC15W204S
  11.          - CPU频率:30MHz
  12. -------------------------------------------------------------------------------------*/

  13. /**************************************子函数声明*************************************/

  14. //子程序名称:IO_Init(void)        功能:端口初始化,使能中断
  15. void System_Init(void);

  16. /**************************************包含头文件*************************************/

  17. #include "STC15W.h"
  18. #include "ws2812.h"                 //包含LED驱动程序
  19. #include "delay.h"                 //包含延时程序

  20. /***************************************硬件接口**************************************/

  21. sbit BTN1 = P3^2;         //按钮1连接P3.2
  22. sbit BTN2 = P3^3;         //按钮2连接P3.3

  23. /***************************************全局变量**************************************/
  24. unsigned char mode=0;                  //控制显示模式
  25. unsigned char color=0;                  //控制显示颜色

  26. //9种颜色数据
  27. code unsigned char  colorArr[9][3]={{126,249,7},{242,212,241},{122,14,197},{42,238,27}
  28. ,{234,251,38},{35,218,3},{64,24,114},{250,18,20},{18,231,250}};

  29. //定义一个二维,每个括号内的三个数据对应一个像素点
  30. //16像素点的数组,每个像素点的颜色由3个字节绝对{绿,红,蓝}
  31. unsigned char s[16][3]={{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
  32. {50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
  33. {50,5,5},{50,5,5}};        

  34. //8像素点的数组,每个像素点的颜色由3个字节绝对{绿,红,蓝}
  35. //unsigned char s[16][3]={{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5},
  36. //{50,5,5},{50,5,5}};        

  37. //定义一个拖尾数组
  38. unsigned char tail[5][3]={{50,5,5},{50,5,5},{50,5,5},{50,5,5},{50,5,5}};

  39. //定义一个消减比例
  40. code unsigned char cut[5]={3,2,0,2,3};
  41. code unsigned char cut2[5]={1,2,3,2,1};

  42. /***************************************主程序****************************************/

  43. void  main()
  44. {
  45.         unsigned char i,j,k;
  46.         unsigned char side=0;
  47.         
  48.         DelayMs(100);                          //上电延时
  49.         System_Init();                          //系统初始化
  50.     EA = 1;                                          //使能中断

  51.         //上电让所有LED灭掉
  52.         for(i=0;i<16;i++)
  53.         {
  54.                 s[i][0]=0;                      //修改数组中的数据
  55.                 s[i][1]=0;
  56.                 s[i][2]=0;
  57.         }
  58.         SendOneFrame(s);                  //显示数组中的数据
  59.         Delay100Ms(1);
  60.                
  61.         //主循环
  62.         while(1)
  63.         {
  64.                 //计算拖尾色
  65.                 for(j=0;j<5;j++)
  66.                 {                                
  67.                         tail[j][0]=colorArr[8-color][0]>>cut[j];
  68.                         tail[j][1]=colorArr[8-color][1]>>cut[j];
  69.                         tail[j][2]=colorArr[8-color][2]>>cut[j];
  70.                 }
  71.                
  72.                 for(j=0;j<SNUM+5;j++)
  73.                 {
  74.                         //先上底色
  75.                         for(i=0;i<SNUM;i++)
  76.                         {
  77.                                 s[i][0]=colorArr[color][0];
  78.                                 s[i][1]=colorArr[color][1];
  79.                                 s[i][2]=colorArr[color][2];
  80.                         }
  81.                         //修改数值
  82.                         for(i=j,k=0;i>0&&k<5;i--,k++)
  83.                         {
  84.                                 if(i<=SNUM)
  85.                                 {
  86.                                         //s[i-1][0]=(colorArr[color][0]>>cut2[k])+tail[k][0];
  87.                                         //s[i-1][1]=(colorArr[color][1]>>cut2[k])+tail[k][1];
  88.                                         //s[i-1][2]=(colorArr[color][2]>>cut2[k])+tail[k][2];
  89.                                         s[i-1][0]=tail[k][0];
  90.                                         s[i-1][1]=tail[k][1];
  91.                                         s[i-1][2]=tail[k][2];
  92.                                 }                                       
  93.                         }
  94.                         SendOneFrame(s);                  //显示数组中的数据
  95.                         DelayMs(50);
  96.                 }               
  97.         }
  98. }

  99. //-------------------------------------------------------------------------------
  100. //子程序名称:System_Init(void)
  101. //功能:端口初始化,使能中断
  102. //-------------------------------------------------------------------------------
  103. void System_Init(void)
  104. {
  105.         BTN1=1;
  106.         BTN2=1;

  107.         //使能INT0中断
  108.         INT0 = 1;
  109.     IT0 = 1;                    //设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿)
  110.     EX0 = 1;                    //使能INT0中断
  111.         
  112.         //使能INT1中断
  113.         INT1 = 1;
  114.     IT1 = 1;                    //设置INT1的中断类型 (1:仅下降沿 0:上升沿和下降沿)
  115.     EX1 = 1;                    //使能INT1中断
  116. }
  117. /**************************************中断服务程序*********************************/
  118. //按键1中断入口:模式切换
  119. void Btn1Int() interrupt 0         
  120. {
  121.         //进来先关中断
  122.         EA = 0;
  123.         INT_CLKO &= 0xEF;           
  124.         INT_CLKO &= 0xDF;  
  125.         
  126.         //延时一段时间
  127.         DelayMs(40);
  128.         
  129.         mode++;
  130.         if(mode==4)
  131.         {
  132.                 mode=0;
  133.         }
  134.         //走时开中断
  135.         EA = 1;
  136.         INT_CLKO |= 0x10;              
  137.         INT_CLKO |= 0x20;                                 
  138. }
  139. //按键2中断入口:控制颜色切换
  140. void Btn2Int() interrupt 2        
  141. {
  142.         //进来先关中断
  143.         EA = 0;
  144.         INT_CLKO &= 0xEF;           
  145.         INT_CLKO &= 0xDF;  
  146.         
  147.         //延时一段时间
  148.         DelayMs(40);
  149.         
  150.         color++;
  151.         if(color==9)
  152.         {
  153.                 color=0;
  154.         }

  155.         //走时开中断
  156.         EA = 1;
  157.         INT_CLKO |= 0x10;              
  158.         INT_CLKO |= 0x20;                 
  159. }



  160. /************************结束*******************************************************/
复制代码

全部资料51hei下载地址:
ws2812B模块资料.7z (10.02 MB, 下载次数: 142)



评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:502412 发表于 2019-4-3 16:02 | 只看该作者
angmall 发表于 2018-12-30 11:43
程序分享出来给需要的人作参考

全部资料51hei下载地址:

谢谢分享
回复

使用道具 举报

地板
ID:67634 发表于 2019-4-21 16:01 | 只看该作者
学习学习
回复

使用道具 举报

5#
ID:791100 发表于 2020-11-14 09:57 | 只看该作者
非常感谢,资料非常齐全,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表