JL690X(2)驱动RGB灯带

AC690X驱动WS2812(SM16703P)点亮RGB灯带

        在使用AC690X系列蓝牙时,需要设计驱动几十个RGB灯带的程序,经一段时间学习后成功驱动,现在把实现过程分享给大家共同学习。

      1.芯片说明

        此类芯片协议采用的是单极性归零码,每一个码元都必须有高低电平。本协议的每个码元起始为高电平,高电平时间宽度决定“0”码或者“1”码。
在这里插入图片描述

名称描述最小值典型值最大值单位
T0H0码,高电平时间0.3us
T1H0码,低电平时间0.9us
T0L1码,高电平时间0.9us
T0H1码,低电平时间0.3us
TrstReset码,低电平时间80us

        关于其他的参数,级联等,芯片手册均有说明,这里不再赘述。作者在查阅资料时发现关于归零码高低电平时间的定义有多种,只要范围在如下时间左右基本都可实现驱动,零码:高电平时间400ns,低电平时间800ns;‘1’码:高电平时间800ns,低电平时间400ns,‘0’码:高电平时间400ns,低电平时间800ns。

      2.驱动方法

        作者通过SPI驱动RGB灯条,在AC690X的SDK基础上利用SPI1的PB12和PB11分别作为数据线和时钟线进行驱动,此驱动方法的弊端就是PB11会有时钟信号输出不能再用于其他功能,PB10只要设置SPI1为单向通讯即可做普通IO使用。

      3.代码设计

        SPI1驱动的方式是8 Bit 模拟一个归零码的一个‘0’或者‘1’;因此‘0’码对应的数据为0xC0,‘1’码对应的数值为0xFC。读者亦可使用三个时钟周期模拟一个‘0’码或者‘1’码,这种方式一个IC的24BIT刚好是1Byte的时钟周期,注意两种模拟方式时钟周期不同。回归正题,首先在lcd_spi.c文件做出如下修改:

//#if LCD_128X64_EN 
#if 1

        尽量不要在sdk_cfg.h中直接修改LCD_128X64_EN 的值为1,这样的操作会编译不需要的代码。 开启此SPI相关函数定义之后,在初始化时初始SPI相关寄存器(SDK直接调用SPI1_init()函数即可,速度设置为8M)。

while(1)
{
	clear_wdt();
	SPI1_DmaWrite(RGBData,24*RGBNum);
}

RGBNum为RGB灯珠的数目,可依据实际数目进行设置参数;若实际RGB颜色出现混乱的现象,RGBData数据组成修改为:N个0x00 + RGB数据 + M个0x00,N和M的取值用户自行设置验证。

      4.结束语

        以上便是本人使用AC690X设计RGB驱动的实现过程,鄙人才疏学浅,文章如存在错误之处望大家不吝赐教,赠于鄙人学习的机会。欢迎大家进行交流学习,企鹅583671536。

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include <AT89x52.H> //#include <reg51.h> #define uchar unsigned char #define uint unsigned int uchar code hanzi[]; uchar code timer[11][16]; uchar code sw[]; void Show_word(); void Show_pass(); void Send_data(unsigned char *d); sbit resget=P0^7; sbit key_moda=P0^6; sbit key_up=P0^5; sbit key_Down=P0^4; sbit T_CLK=P0^2; sbit T_IO =P0^1; sbit T_RST=P0^0; sbit ACC0=ACC^0; sbit ACC7=ACC^7; uchar starts_time[7]={0x00,0x10,0x22,0x11,0x06,0x07,0x06}; uchar Move,Speed,Flicker,line,Sec,Cent,Hour,Year,Month,Day,Week; uchar a,b,f,h,msec,id,x; uint zimuo; uchar BUFF[10]; void RTInputByte(uchar); uchar RTOutputByte(void); void W1302(uchar, uchar); uchar R1302(uchar); void Set1302(uchar *); void du1302(); void DelayMs(void); void Set(uchar,uchar ); void in_data(); void rxd_data(); void main() { Move=0; zimuo=0; TMOD=0x01; TH0=0x3c; TL0=0xb0; EA=1; TR0=1; ET0=1; SCON=0; while(zimuo<512) { while(Move<16) { for(Speed=0;Speed<10;Speed++) { for(line=0;line<16;line++) { in_data(); rxd_data(); P2_4=1; DelayMs(); P2_7=1; P2=sw[line]; DelayMs(); } } Move++; } Move=0; zimuo=zimuo+32; } zimuo=0; while(1) { if(resget==0) { DelayMs(); if(resget==0) Set1302(starts_time); W1302(0x8e,0x00); W1302(0x90,0xa5); } du1302(); if (key_moda==0) { DelayMs(); if(key_moda==0) { if(id++==9) {id=0;} h=0;msec=0; while(key_moda==0){ Show_word();} } } if(id!=0) { if (key_up==0) { DelayMs(); if(key_up==0) { while(key_up==0) {Show_word();} h=0;msec=0; Set(id,0); } } if (key_Down==0) { DelayMs(); if(key_Down==0) { while(key_Down==0) {Show_word();} h=0;msec=0; Set(id,1); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值