找回密码
 立即注册

QQ登录

只需一步,快速开始

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

成功挑战 89C52驱动WS2812

  [复制链接]
跳转到指定楼层
楼主
本帖最后由 人人学会单片机 于 2019-10-6 19:11 编辑

https://v.youku.com/v_show/id_XNDM1MDczMDc0OA==.html

WS2812是一个通信速度比较快的芯片,而89单片机是比较慢的单片机。
89单片机使用32M晶振、12T模式,用IO口直接驱动WS2812灯珠。
以下视频是驱动WS2812的效果
部分源代码:
#ifndef WS2812B_Drive                //如果没有找到这个标签
#define WS2812B_Drive                //那么就打一个这个标签
sbit WS2812_GPIO=P2^0;
u8 data WS2812_Write_Buffer[25];
void WS2812_Write_Data(u8 *Point,u8 len)
{
        u8 data i,j,k;
        u8 bdata Value;
        for(i=0;i<len;i++)
        {
                for(j=0;j<3;j++)
                {
                        switch(j)
                        {
                                case 0:Value=*(Point+1);break;
                                case 1:Value=*(Point);break;
                                case 2:Value=*(Point+2);break;                        
                        }
                        k=0x80;
                        while(k)
                        {
                                if(Value&k)
                                {
                                        WS2812_GPIO=1;
                                }
                                WS2812_GPIO=1;
                                WS2812_GPIO=0;
                                k>>=1;
                        }
                }
                Point+=3;
        }
}
void WS2812_Display_Ser()
{
        static xdata u8 count=0;
        if(count<100)
        {
                WS2812_GPIO=0;
                count++;
        }
        else
        {
                EA=0;
                WS2812_Write_Data(WS2812_Write_Buffer+1,8);
                EA=1;
                count=0;
        }
}
#endif

51hei截图20191006190645.jpg (26.49 KB, 下载次数: 199)

51hei截图20191006190645.jpg

12 WS2812B彩灯.zip

38.57 KB, 下载次数: 428, 下载积分: 黑币 -5

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

使用道具 举报

沙发
ID:334047 发表于 2020-8-12 22:53 | 只看该作者
点赞!正要学习这个内容!!
回复

使用道具 举报

板凳
ID:724172 发表于 2020-8-20 15:29 | 只看该作者
太厉害了,一直都在找这个教程来做个模型加灯
回复

使用道具 举报

地板
ID:230742 发表于 2021-1-7 18:13 | 只看该作者
大师,如果用STC8H1K这种1T的单片机,是不是速度就够快了?
回复

使用道具 举报

5#
ID:390416 发表于 2021-1-7 18:33 | 只看该作者
啤酒瓶子老大 发表于 2021-1-7 18:13
大师,如果用STC8H1K这种1T的单片机,是不是速度就够快了?

是的,分享这个代码 主要是挑战一下89系列的性能。小马拉着火车皮跑。测试的是89能不能拉得动
回复

使用道具 举报

6#
ID:885138 发表于 2021-2-21 14:09 来自手机 | 只看该作者
啤酒瓶子老大 发表于 2021-1-7 18:13
大师,如果用STC8H1K这种1T的单片机,是不是速度就够快了?

我用了另一种1T的单片机,4MHZ就可以了。参看http://www.51hei.com/bbs/dpj-202768-1.html

评分

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

查看全部评分

回复

使用道具 举报

7#
ID:885138 发表于 2021-2-21 14:20 来自手机 | 只看该作者
人人学会单片机 发表于 2021-1-7 18:33
是的,分享这个代码 主要是挑战一下89系列的性能。小马拉着火车皮跑。测试的是89能不能拉得动

试试左移位和CY位直送IO口,应该运行周期会小一点,这样晶振频率可能会小一点。我用的函数可以参考一下:
void ws2812_write_byte( u8 dat)
{        
        u8 i = 8;
        dat <<= 1;         //最高位进入CY
        while(i)
        {
                 //高电平时间小于0.45uS为逻辑0,大于时为逻辑1
                WS2812_IO = 1;
                //如果主频较高可在此处适当增加_nop_();
                WS2812_IO = CY;
                //如果主频较高可在此处适当增加_nop_();
                _nop_();
        WS2812_IO = 0;
                dat <<= 1;         //最高位进入CY
                i--;                        
        }
}
回复

使用道具 举报

8#
ID:390416 发表于 2021-2-23 16:56 | 只看该作者
xxd0708 发表于 2021-2-21 14:20
试试左移位和CY位直送IO口,应该运行周期会小一点,这样晶振频率可能会小一点。我用的函数可以参考一下:
...

嗯 CY 主要是汇编的指令 初学者容易看蒙圈
回复

使用道具 举报

9#
ID:615170 发表于 2021-4-12 10:16 | 只看该作者
精彩,刚好遇到了不知道如何调PWM的问题,学习下!
回复

使用道具 举报

10#
ID:977831 发表于 2022-3-24 18:40 | 只看该作者
在哪里修改灯珠数量
回复

使用道具 举报

11#
ID:47286 发表于 2022-3-25 00:55 来自手机 | 只看该作者
牛人 膜拜下
回复

使用道具 举报

12#
ID:390416 发表于 2022-4-19 12:39 | 只看该作者
1111513 发表于 2022-3-24 18:40
在哪里修改灯珠数量

WS2812_Write_Data(WS2812_Write_Buffer+1,8);  括号里面数字8 表示8个灯
回复

使用道具 举报

13#
ID:212904 发表于 2022-7-19 13:37 | 只看该作者
试试看好用不
回复

使用道具 举报

14#
ID:27642 发表于 2022-9-12 22:14 | 只看该作者
感谢,刚好有这灯带
回复

使用道具 举报

15#
ID:1050867 发表于 2022-11-8 14:44 | 只看该作者
大神,求电路连接图
回复

使用道具 举报

16#
ID:1055167 发表于 2022-12-2 10:37 | 只看该作者
12分频是375ns吧,不是整数啊
回复

使用道具 举报

17#
ID:390416 发表于 2023-1-8 10:32 | 只看该作者
1111513 发表于 2022-3-24 18:40
在哪里修改灯珠数量

WS2812_Write_Data(WS2812_Write_Buffer+1,8);  这个8 就是8颗灯
回复

使用道具 举报

18#
ID:390416 发表于 2023-1-8 10:32 | 只看该作者
hgig 发表于 2022-11-8 14:44
大神,求电路连接图

WS2812灯带 电路超级简单
回复

使用道具 举报

19#
ID:1057863 发表于 2023-1-13 09:43 | 只看该作者
这个我之前弄就没弄好,感谢UP主
回复

使用道具 举报

20#
ID:256110 发表于 2023-10-18 10:35 | 只看该作者
WS2812灯带 控制
回复

使用道具 举报

21#
ID:317998 发表于 2023-12-16 22:49 | 只看该作者
这个程序最多只能点亮255个灯珠,请问:想点更多灯珠要改哪一项?
回复

使用道具 举报

22#
ID:1105362 发表于 2023-12-20 14:11 | 只看该作者
牛啊,小马拉大车
回复

使用道具 举报

23#
ID:433219 发表于 2023-12-20 15:47 | 只看该作者
只要 注意50us 为时间处理间隙处理,,,
回复

使用道具 举报

24#
ID:1120202 发表于 2024-6-7 16:33 | 只看该作者
点赞!正要学习这个内容!!
回复

使用道具 举报

25#
ID:85743 发表于 2024-6-11 09:42 | 只看该作者
static xdata u8 count=0;   为什么一定要用XDATA?不用会怎么样?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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