找回密码
 立即注册

QQ登录

只需一步,快速开始

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

WS2811灯光单片机程序 实现2片TM1812幻彩变化 修改变量IC可修改TM1812数量

  [复制链接]
跳转到指定楼层
楼主
ID:170548 发表于 2017-3-14 10:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
WS2811芯片灯光控制程序分享给大家

源程序:
  1. /******************************************************************************
  2. //*版权信息:深圳市天微电子
  3. //*文 件 名:TM1812-V1.0
  4. //*当前版本:V1.0
  5. //*MCU 型号:STC15W104
  6. //*开发环境:Keil uVision4
  7. //*晶震频率:33MHZ(内部时钟)      
  8. //*完成日期:2015-07-10
  9. //*程序功能:1.该程序可实现2片TM1812幻彩变化。
  10. //           2.修改变量IC可修改TM1812数量。
  11. //*免责声明:1.此程序为TM1812驱动LED点亮演示程序,仅作参考之用。
  12. //           2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任。            
  13. /*******************************************************************************/
  14. #include <reg52.h>                //MCU头文件
  15. #include "intrins.h"                //包含nop指令头文件

  16. #define nop  _nop_();   
  17.                    //宏定义
  18. /********************************定义控制端口***********************************/
  19. sbit DO=P3^3;                    //定义信号输出DO

  20. /**********************************定义变量*************************************/
  21. unsigned int IC=2;                          //控制TM1812个数
  22. unsigned int LED_PX;                        //像素点数
  23. unsigned char PWM=255;                      //TM1812灰度数据
  24. unsigned char Rda,Gda,Bda;                  //R、G、B灰度数据
  25. unsigned char bdata LED_data;               //可位操作的数据发送暂存变量声明
  26. sbit bit0=LED_data^0;                        //被发送的数据各位定义
  27. sbit bit1=LED_data^1;
  28. sbit bit2=LED_data^2;
  29. sbit bit3=LED_data^3;
  30. sbit bit4=LED_data^4;
  31. sbit bit5=LED_data^5;
  32. sbit bit6=LED_data^6;
  33. sbit bit7=LED_data^7;
  34. bit flag=0;                                 //定义一个标志位

  35. /**********************************延时函数*************************************/
  36. void delay(unsigned int n)                  //n=1,延时500us
  37. {
  38.     unsigned int i;
  39.     while(n--)
  40.         for(i=0;i<860;i++);
  41. }

  42. /********************发送0码函数,高电平400ns,周期1.25us************************/
  43. void send_data_0()   
  44. {
  45.      DO=1;
  46.      nop;nop;nop;nop;nop;
  47.      nop;nop;nop;nop;nop;      
  48.      DO=0;
  49.      nop;nop;nop;nop;nop;nop;nop;
  50.      nop;nop;nop;nop;nop;nop;nop;
  51. }

  52. /*******************发送1码函数,高电平800ns,周期1.25us*************************/
  53. void send_data_1()   
  54. {
  55.      DO=1;
  56.      nop;nop;nop;nop;nop;nop;
  57.      nop;nop;nop;nop;nop;
  58.      nop;nop;nop;nop;nop;nop;
  59.      nop;nop;nop;nop;nop;
  60.      DO=0;   
  61. }

  62. /***********************发送1个字节数据,高位先发*******************************/
  63. void send_data(unsigned char DATA)        
  64. {
  65.     LED_data=DATA;                          
  66.     if(bit7)  send_data_1();  else send_data_0();
  67.     if(bit6)  send_data_1();  else send_data_0();
  68.     if(bit5)  send_data_1();  else send_data_0();
  69.     if(bit4)  send_data_1();  else send_data_0();
  70.     if(bit3)  send_data_1();  else send_data_0();
  71.     if(bit2)  send_data_1();  else send_data_0();
  72.     if(bit1)  send_data_1();  else send_data_0();
  73.     if(bit0)  send_data_1();  else send_data_0();
  74. }
  75. /******************************发送1帧数据*************************************/
  76. void send_px()
  77. {
  78.     unsigned int i;
  79.     for(i=0;i<LED_PX;i++)
  80.     {
  81.         send_data(Rda);             //发送R灰度数据
  82.         send_data(Gda);             //发送G灰度数据
  83.         send_data(Bda);             //发送B灰度数据
  84.     }
  85. }
  86. /*===============================主函数=======================================*/
  87. void main()
  88. {
  89.     unsigned char i;
  90.     LED_PX=3*IC;                        //1个TM1812等于4个像素
  91.     Rda=Gda=Bda=0;                      //R、G、B灰度数据复位清零
  92.     while(1)
  93.     {
  94.         for(i=0;i<PWM;i++)          //红色渐亮  
  95.         {
  96.             Rda=i;              //灰度计算
  97.             send_px();          //发送灰度数据
  98.             delay(50);          //复位延时
  99.         }
  100.         flag=1;                     //标志位置位
  101.         while(flag)                 //标志位置位后循环函数
  102.         {
  103.             for(i=0;i<PWM;i++)  //红色渐灭,绿色渐亮
  104.             {
  105.                 Gda=i;
  106.                 Rda=PWM-i;  //灰度计算
  107.                 send_px();  //发送灰度数据
  108.                 delay(50);  //复位延时
  109.             }
  110.             for(i=0;i<PWM;i++)  //绿色渐灭,蓝色渐亮
  111.             {
  112.                 Bda=i;           
  113.                 Gda=PWM-i;  //灰度计算
  114.                 send_px();  //发送灰度数据
  115.                 delay(50);  //复位延时
  116.             }
  117.             for(i=0;i<PWM;i++)  //蓝色渐灭,红色渐亮
  118.             {
  119.                 Rda=i;
  120.                 Bda=PWM-i;  //灰度计算
  121.                 send_px();  //发送灰度数据
  122.                 delay(50);  //复位延时
  123.             }
  124.         }
  125.     }
  126. }
  127. /*================================结束==========================================*/
复制代码

51单片机22路全彩控制器:http://www.51hei.com/bbs/dpj-53297-1.html

评分

参与人数 2黑币 +10 收起 理由
江南云者 + 5 很给力!
colerwei + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏14 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:36520 发表于 2017-10-15 02:45 | 只看该作者
谢谢楼主,下载来参考下。
回复

使用道具 举报

板凳
ID:243162 发表于 2017-10-26 16:06 | 只看该作者
好经典的程序
回复

使用道具 举报

地板
ID:245815 发表于 2017-11-13 19:42 | 只看该作者
这个非常给力,代码写得很清晰
回复

使用道具 举报

5#
ID:245815 发表于 2017-11-13 19:44 | 只看该作者
对于做灯的人来说,这个东西真的很有帮助,感谢分享
回复

使用道具 举报

6#
ID:282538 发表于 2018-2-6 14:43 | 只看该作者
我以为有22种状态,把剩下的发给大家参考
                                Rda=i;
                                Bda=PWM-i;  //灰度计算
                                send_px();  //发送灰度数据
                                delay(50);  //复位延时
                        }
                }
        }
}
回复

使用道具 举报

7#
ID:316697 发表于 2018-4-25 22:38 | 只看该作者
要用什么软件打开,keil 打不开的
回复

使用道具 举报

8#
ID:432112 发表于 2018-11-23 22:39 | 只看该作者

谢谢楼主,下载来参考下。
回复

使用道具 举报

9#
ID:69115 发表于 2019-4-7 03:14 | 只看该作者
51单片机能驱动WS2811,很好很实用.
回复

使用道具 举报

10#
ID:467751 发表于 2019-6-28 02:09 | 只看该作者
很好,很有帮助
回复

使用道具 举报

11#
ID:69115 发表于 2019-11-11 11:00 | 只看该作者
这个程序不错,好玩
回复

使用道具 举报

12#
ID:99525 发表于 2022-1-7 15:27 | 只看该作者
这个不错,直接驱动就行了!
回复

使用道具 举报

13#
ID:199698 发表于 2022-3-10 09:22 | 只看该作者
唉,编程考运气的我只能东抄抄西改改
回复

使用道具 举报

14#
ID:1008454 发表于 2022-3-10 09:57 | 只看该作者
什么说明也没有,我们能明白什么呢?,22路是指什么?.WS2811芯片是个什么芯片?
回复

使用道具 举报

15#
ID:1009425 发表于 2022-4-7 15:46 | 只看该作者
这是TM1812芯片,WS2811的时序不同
回复

使用道具 举报

16#
ID:826754 发表于 2022-4-23 11:06 | 只看该作者
大神怎么只是发个原厂的样品程序呀,22种状态呢,怎么没有,让我又减了5黑币,本来就不多。可以发一下那22种状态的吗?想要流水效果的,从左向右、从右向左、中间向两边的。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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