找回密码
 立即注册
楼主: 好学天上

STC8G驱动WS2812点亮单独的灯

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-8-5 11:11:00 | 显示全部楼层
#include <STC8.H>
#include <intrins.h>
#define                WS2812                P33                //GPIO
#define                LED                10                //灯珠个数
unsigned char RED,GREEN,BLUE;

/*----------------------------延时10us@STC-Y6@11.0592MHz----------------------------*/
void Delay_10us(void)
{
        unsigned char i;
        i=35;
        while(--i);
}

/*----------------------------延时x10us----------------------------*/
void Delay_x10us(unsigned char x)
{
        while(x--)
                Delay_10us();
}

/*----------------------------延时10ms@STC-Y6@11.0592MHz----------------------------*/
//void Delay_10ms(void)
//{
//        unsigned char i,j;
//        _nop_();
//        _nop_();
//        i=144;
//        j=157;
//        do
//        {
//                while(--j);
//        }while(--i);
//}

/*----------------------------延时x10ms----------------------------*/
//void Delay_x10ms(unsigned char x)
//{
//        while(x--)
//                Delay_10ms();
//}

void WS2812_Reset(void)
{
        WS2812=0;
        Delay_x10us(10);
}

void WS2812_Write_Byte(unsigned char data temp)        //STC-Y6@11.0592MHz 0:375ns+1350ns 1:925ns+1350ns
{
        unsigned char data i=8;
        while(i)
        {
                temp<<=1;
                WS2812=1;
                if(CY)
                {
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                        _nop_();
                }
                WS2812=0;
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                _nop_();
                i--;
        }
}

void WS2812_Write(void)
{
        unsigned char i;
        WS2812_Reset();
        for(i=0;i<LED;i++)        //10个灯
        {
                WS2812_Write_Byte(GREEN);
                WS2812_Write_Byte(RED);
                WS2812_Write_Byte(BLUE);
        }
}

void Init(void)
{
        P3M0=0x08;
        P3M1=0x00;
}

void main(void)
{
        Init();
        while(1)
        {
                RED=128;        //红 0~255
                GREEN=128;        //绿 0~255
                BLUE=128;        //蓝 0~255
                WS2812_Write();
        }
}

点评

改一下就能用了,时钟11.0592M  详情 回复 发表于 2024-8-5 11:11
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-8-5 11:11:30 | 显示全部楼层
Debu*** 发表于 2024-8-5 11:11
#include
#include
#define                WS2812                P33                //GPIO

改一下就能用了,时钟11.0592M
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-03-29 17:35:27

7

主题

62

回帖

537

积分

高级会员

积分
537
发表于 2024-8-5 11:11:57 | 显示全部楼层
wnag*** 发表于 2024-8-5 10:47
先点灯,慢慢来,一步一步来

是直接发FF FF FF第一个灯就会亮全白吗,还是这个FF FF FF是我写的协议
好好学习天天向上
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-03-29 17:35:27

7

主题

62

回帖

537

积分

高级会员

积分
537
发表于 2024-8-5 11:40:03 | 显示全部楼层
Debu*** 发表于 2024-8-5 11:11
改一下就能用了,时钟11.0592M

改成P54口了,还是一个灯都点不亮,这个程序功能是我说的那个吗

点评

功能不同,改一下 复位和字节发送是通用的 时序用示波器调一下,我的是  详情 回复 发表于 2024-8-5 12:28
好好学习天天向上
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-8-5 12:28:41 | 显示全部楼层
好学*** 发表于 2024-8-5 11:40
改成P54口了,还是一个灯都点不亮,这个程序功能是我说的那个吗

功能不同,改一下
复位和字节发送是通用的
时序用示波器调一下,我的是STC-Y6@11.0592MHz
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-03-29 17:35:27

7

主题

62

回帖

537

积分

高级会员

积分
537
发表于 2024-8-5 13:32:17 | 显示全部楼层
Debu*** 发表于 2024-8-5 12:28
功能不同,改一下
复位和字节发送是通用的
时序用示波器调一下,我的是 ...

天老爷,是我太蠢了,我忘记该P54推挽输出了
还有就是我这块板上有五百个灯,我把灯数量改成五百,然后i也改成int类型了,但没办法全部点亮,而且灯的颜色也变成暖黄了,是什么原因呀,还有个别灯会不亮或者显示别的颜色

点评

灯太多可能是电流不够  详情 回复 发表于 2024-8-5 14:01
好好学习天天向上
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-03-29 17:35:27

7

主题

62

回帖

537

积分

高级会员

积分
537
发表于 2024-8-5 13:58:21 | 显示全部楼层
Debu*** 发表于 2024-8-5 12:28
功能不同,改一下
复位和字节发送是通用的
时序用示波器调一下,我的是 ...

如果在发送字节的循环里,要前面的灯不亮,是把GREE和RED还有YELLOW的值改为0吗,试了好像不行

点评

发一大堆0,然后发数据,再发一大堆0  详情 回复 发表于 2024-8-5 14:01
好好学习天天向上
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-8-5 14:01:03 | 显示全部楼层
好学*** 发表于 2024-8-5 13:58
如果在发送字节的循环里,要前面的灯不亮,是把GREE和RED还有YELLOW的值改为0吗,试了好像不行 ...

发一大堆0,然后发数据,再发一大堆0
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:425
  • 最近打卡:2025-05-03 00:09:43
已绑定手机

77

主题

4850

回帖

8388

积分

超级版主

DebugLab

积分
8388
发表于 2024-8-5 14:01:44 | 显示全部楼层
好学*** 发表于 2024-8-5 13:32
天老爷,是我太蠢了,我忘记该P54推挽输出了
还有就是我这块板上有五百个灯,我把灯数量改成五百,然后i ...

灯太多可能是电流不够
DebugLab
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-03-29 17:35:27

7

主题

62

回帖

537

积分

高级会员

积分
537
发表于 2024-8-5 14:12:22 | 显示全部楼层
Debu*** 发表于 2024-8-5 14:01
发一大堆0,然后发数据,再发一大堆0

怎么发呀
  1. void WS2812_Write(void)
  2. {
  3.         unsigned int i;
  4.         WS2812_Reset();
  5.         for(i=0;i<LED;i++)        //10个灯
  6.         {
  7.                                         WS2812_Write_Byte(0);
  8.                                         WS2812_Write_Byte(0);
  9.                                         WS2812_Write_Byte(0);
  10.                                         if(i == (LED-1))
  11.                                         {
  12.                 WS2812_Write_Byte(GREEN);
  13.                 WS2812_Write_Byte(RED);
  14.                 WS2812_Write_Byte(BLUE);
  15.                                         }
  16.         }
  17. }
复制代码

这样式吗

点评

unsigned int LED_ON; //第几个亮 void WS2812_Write(void) { unsigned int i; WS2812_Reset(); i=0; while(1) { if(i==LED_ON)  详情 回复 发表于 2024-8-5 14:24
好好学习天天向上
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-3 14:59 , Processed in 0.132514 second(s), 105 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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