找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助 单片机控制UCS1903芯片程序

[复制链接]
跳转到指定楼层
楼主
控制 1903 或 WS2811 芯片,我参照别人的写的,怎么都控制不了灯,晶振 12M 24M都试过了,新手搞不明白怎么回事
#include<reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit DIN=P1^2;//输出信号端口
void Delay50us()        //@11.0592MHz
{
    unsigned char i, j;
    _nop_();
    i = 1;
    j = 134;
    do
    {
        while (--j);
    } while (--i);
}
void delay (uint z)//延时函数1ms
{
  uint x,y;
  for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void DIN_bit_0()//发送0码函数
{        
        DIN=1;
        _nop_();_nop_();
    DIN=0;
        _nop_();_nop_();_nop_();
}
void DIN_bit_1()//1码
{
        DIN=1;
        _nop_();_nop_();_nop_();
    DIN = 0;
        _nop_();_nop_();
}
/*************reset码*******************/
void reset()//reset码  低电平时间要大于30us
{   
DIN=0;   
Delay50us();//延时50us     
}  
void write_data(unsigned long dat)//写码
{
                uchar i;
                for (i = 8; i>0;i--)//发送8位码
                {
                                if (dat & 0x80)
                                {
                                                DIN_bit_1();                                       
                                }
                                else              //否则传输位 0
                                {
                                DIN_bit_0();        
                                }
                                dat = dat << 1;
                }
}
void main(void)//主函数,控制红光的亮灭
{
        uchar i,n;
                while (1)
                {
                for(i=0;i<255;i++)//255是光的灰度,0-255,255时最亮
                {
                 for(n = 20;n>0;n--)//20颗灯
                 {
                  write_data(i);//红光8位码
                  write_data(0);//绿光8位码
                  write_data(0);//蓝光8位码
                 }
                 reset();
                delay(3000);
                }                                       
        }               
                }
#include<reg52.h>//头文件
#include <intrins.h>//头文件
#define uchar unsigned char
#define uint  unsigned int
sbit DIN=P1^2;//输出信号端口
void Delay50us()        //@11.0592MHz
{
    unsigned char i, j;
    _nop_();
    i = 1;
    j = 134;
    do
    {
        while (--j);
    } while (--i);
}
void delay (uint z)//延时函数1ms
{
  uint x,y;
  for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void DIN_bit_0()//发送0码函数
{        
        DIN=1;//0码高电平
        _nop_();_nop_();//0码高电平时间空指令 0.5us
    DIN=0;//0码低电平
        _nop_();_nop_();_nop_();//0码低电平时间空指令 1us
}
void DIN_bit_1()//1码
{
        DIN=1;//1码高电平
        _nop_();_nop_();_nop_();//1码高电平时间空指令 1us
    DIN = 0;//1码低电平
        _nop_();_nop_();//0码低电平时间空指令 0.5us
}
/*************reset码*******************/
void reset()//reset码  低电平时间要大于30us
{   
DIN=0;   
Delay50us();//延时50us     
}  
void write_data(unsigned long dat)//写8位 控制码
{
                uchar i;
                for (i = 8; i>0;i--)//发送8位码
                {
                                if (dat & 0x80) // 传输位1 dat与 1000000为1的话 传送1码
                                {
                                                DIN_bit_1();                                       
                                }
                                else              //否则传输位 0
                                {
                                DIN_bit_0();        
                                }
                                dat = dat << 1;//一位一位传
                }
}
void main(void)//主函数,控制红光的亮灭
{
        uchar i,n;
                while (1)
                {
                for(i=0;i<255;i++)//255是光的灰度,0-255,255时最亮
                {
                 for(n = 20;n>0;n--)//20颗灯
                 {
                  write_data(i);//红光8位码
                  write_data(0);//绿光8位码
                  write_data(0);//蓝光8位码
                 }
                 reset();//发完24位码 发 reset码
                delay(3000);//延时3秒,红光慢慢亮 慢慢灭
                }                                       
        }               
                }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:369177 发表于 2018-7-11 08:47 | 只看该作者
看了别人也是52单片机 加的24M晶振 可以控制,自己做,程序方面还是不懂,新手问题不知道出在哪
回复

使用道具 举报

板凳
ID:369177 发表于 2018-7-11 09:40 | 只看该作者


2)低速模式时间
名称        描  述        典型值        容许误差
T0H        0码,高电平时间        0.5μs        ±150ns
T1H        1码,高电平时间        2.0μs        ±150ns
T0L        0码,低电平时间        2.0μs        ±150ns
T1L        1码,低电平时间        0.5μs        ±150ns
注:当为高速模式时,以上时间仅需一半(Reset码时间不变)。

5)24bit的数据结构
R7        R6        R5        R4        R3        R2        R1        R0        G7        G6        G5        G4        G3        G2        G1        G0        B7        B6        B5        B4        B3        B2        B1        B0
注:高位先发,按照RGB的顺序发送数据




回复

使用道具 举报

地板
ID:369177 发表于 2018-7-11 09:42 | 只看该作者
回复

使用道具 举报

5#
ID:369177 发表于 2018-7-12 08:21 | 只看该作者
有高手 指点下吗?我调了下1 码  0码的时间,SM16703的芯片可以控制  WS2811怎么都控制不了
回复

使用道具 举报

6#
ID:221468 发表于 2019-8-28 10:01 | 只看该作者
应该是你的晶振频率不对,keil有debug功能,能够通过debug查看输出的pwm波形,查看一下你输出的波形是否符合芯片要求的时序

111111.jpg (185.33 KB, 下载次数: 54)

111111.jpg
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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