欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 77|回复: 0

STC15W单片机驱动WS2812代码

[复制链接]
发表于 2022-12-24 00:04:28 | 显示全部楼层 |阅读模式
#include "stc15.h"
#include "intrins.h"
#define uint unsigned int
#define uchar unsigned char
//#define MAIN_Fosc 24000000

sbit Din=P5^3;



void io_init()//初始化IO口,如果不初始化IO口,特定某些IO可能高阻状态,具体怎么初始化参考手册,这里为双向口
{
            P0M0=0x00;
            P0M1=0x00;//P0
            P1M0=0x00;
            P1M1=0x00;//P1
            P2M0=0x00;
            P2M1=0x00;//P2
            P3M0=0x00;
            P3M1=0x00;//P3
            P4M0=0x00;
            P4M1=0x00;//P4
            P5M0=0x00;
            P5M1=0x00;//P5
            P6M0=0x00;
            P6M1=0x00;//P6
            P7M0=0x00;
            P7M1=0x00;//P7
}
//void  delay_ms(unsigned int ms)//一个简单的延时
//{
//            unsigned int i;
//            do
//    {
//            i = MAIN_Fosc / 13000;
//            while(--i);   //14T per loop
//    }
//            while(--ms);
//}
void delay_us(uint us)
{
    unsigned char i;

    while(us--)
    {
        i = 3;
        while (--i);
    }
}
void delay_ms(uint ms)
{
    unsigned char i, j;

    while(ms--)
    {
        _nop_();
        _nop_();
        i = 24;
        j = 84;
        do
        {
            while (--j);
        } while (--i);
    }
}
/*******************************************************
* 函数名: RGB_LOW
* 描述  :0码
* 输入  :无
* 输出  :无
* 备注     :
*******************************************************/
void RGB_LOW()
{
   Din=1;
        _nop_();
   Din=0;
         _nop_();_nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();
}
/*******************************************************
* 函数名: RGB_High
* 描述  :1码
* 输入  :无
* 输出  :无
* 备注     :
*******************************************************/
void RGB_High()
{
Din=1;
         _nop_(); _nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();
         _nop_();_nop_();_nop_();_nop_();

  Din=0;
         _nop_();_nop_(); _nop_(); _nop_();

}
/*******************************************************
* 函数名: RGB_RESET
* 描述  :复位
* 输入  :无
* 输出  :无
* 备注     :
*******************************************************/
void RGB_RESET()
{

  Din = 0;
    delay_us(60);
}
/*******************************************************
* 函数名: RGB_BYTE
* 描述  :单色一个字节写入
* 输入  :X  为
                r
                g
                b
* 输出  :无
* 备注     :
*******************************************************/
void RGB_BYTE(uchar X)              
{
      uchar i;
      for(i=0;i<8;i++)
        {
              
                if((X&0X80))
              {
                RGB_High();
                 
              }
              else
                 RGB_LOW();
               
             X=X<<1;
        }
}

/*******************************************************
* 函数名:RGB_display
* 描述  :颜色写入
* 输入  :r:红色
           g;蓝色
           b;绿色
           len;灯的个数
* 输出  :无
* 备注     :0-255级亮度        
*******************************************************/
void RGB_display(uchar r,uchar g,uchar b,uchar len)
{
          uchar i;
          RGB_RESET();
          for(i=0;i<len;i++)
            {
            
                RGB_BYTE(r);
               RGB_BYTE(g);
               RGB_BYTE(b);                                                         
            }
          RGB_RESET();
      
}

void main()
{
            uchar q;
            uchar r,g,b;
            uchar w,e;
            io_init();//对IO进行初始化稍微延时一会
            delay_ms(10);
            r=255;
            g=0;
            b=0;
            e=1;
            while(1)
    {
            
            for(q=1;q<29;q++)
        {
            RGB_display(g,r,b,q);
            delay_ms(e);
            
        }
            w++;
            switch(w)
        {
            case 0:r=255;g=0;b=0;e=5;break;
            case 1:r=0;g=255;b=0;e=10;break;
            case 2:r=0;g=0;b=255;e=15;break;
            case 3:r=255;g=255;b=0;e=20;break;
            case 4:r=255;g=0;b=255;e=25;break;
            case 5:r=255;g=255;b=255;e=30;break;
            case 6:r=100;g=0;b=255;e=1;break;
            case 7:r=200;g=100;b=20;e=2;break;
            case 8:r=120;g=120;b=255;e=3;break;
            case 9:r=234;g=77;b=32;e=4;break;
            case 10:r=136;g=0;b=255;e=5;break;
            case 11:r=30;g=100;b=255;e=6;break;
        }
            if(w==12)
            {
            w=0;
            }
            
    }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2025-10-31 17:19

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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