#include "reg52.h"
#include "intrins.h"
typedef unsigned char BYTE;
//引脚定义
sbit SDO=P1^2; //数据引脚
sbit SCLK=P1^3;//时钟引脚
void delay(unsigned int n) //延时程序
{
BYTE t,y;
for(;n>0;n--)
for(t=0;t<10;t++)
{
for(y=0;y<40;y++);
}
}
void Outone(BYTE dr,BYTE dg,BYTE db)//输出3个5位RGB颜色数据子程序,参数格式:红颜色数据、
//绿颜色数据、蓝颜色数据
{ BYTE k,mask;
//输出5位红色数据
mask=0x80;
for(k=0;k<8;k++)
{ if(mask & dr) SDO=1;
else SDO=0;
SCLK=1;SCLK=0;
mask>>=1; }
//输出5位绿色数据
mask=0x80;
for(k=0;k<8;k++)
{ if(mask & dg) SDO=1;
else SDO=0;
SCLK=1;SCLK=0;
mask>>=1; }
//输出5位兰色数据
mask=0x80;
for(k=0;k<8;k++)
{ if(mask & db) SDO=1;
else SDO=0;
SCLK=1;SCLK=0;
mask>>=1; }
}
void BrushOut(BYTE nDots,BYTE dr,BYTE dg,BYTE db)//输出ndots点相同灰度颜色子程序,参数格式:点数、红颜色数据、
//绿颜色数据、蓝颜色数据
{
BYTE i;
// SDO,SCLK为数据和移位输出口,位变量,nDots为灯的个数
// 本程序仅适用于GMODE=1,CMODE=1的情况
// 首先输出32个'0'的起始帧
SCLK=0;
SDO=0;
for(i=0;i<32;i++) { SCLK=1;SCLK=0; }
// 再输出nDots点的数据,这里假设各点的颜色都是(dr,dg,db)
// dr,db,dg为红绿兰的灰度值0-31
for(i=0;i
{ Outone(dr,dg,db);
}
}
//任意颜色灰度转化程序,参数形式:点数、间隔时间、红开始色灰度、绿开始色灰度、蓝开始色灰度、
//红结束色灰度、绿结束色灰度、蓝结束色灰度
void Jianbian(BYTE nDots,BYTE ntime,BYTE hr,BYTE hg,BYTE hb,BYTE br,BYTE bg,BYTE bb)
{ BYTE f,dr=0,dg=0,db=0,fr=0,fg=0,fb=0;
for(f=0;f<31;f++)
{
if (fr!=1) //红色渐变控制
{
if(hr
{
if(br<=hr+f) fr=1;
else dr=hr+f;
}
else
if(hr>br)
{
if(br>=hr-f) fr=1;
else dr=hr-f;
}
else dr=hr;
}
if (fg!=1) //绿色渐变控制
{
if(hg
{
if(bg<=hg+f) fg=1;
else dg=hg+f;
}
else
if(hg>bg)
{
if(bg>=hg-f) fg=1;
else dg=hg-f;
}
else dg=hg;
}
if (fb!=1) //红色渐变控制
{
if(hb
{
if(bb<=hb+f) fb=1;
else db=hb+f;
}
else
if(hb>bb)
{
if(bb>=hb-f) fb=1;
else db=hb-f;
}
else db=hb;
}
if(fr==1 && fg==1 && fb==1) f=30;
BrushOut(nDots,dr,dg,db);
delay(ntime);
}
}
main()
{ BYTE nDots,Dots,i,ntimea,ntimeb,ntimec;
BYTE n;
nDots=168;
Dots=145;
ntimea=20;ntimeb=50;ntimec=6;//调节每帧数据时间参数
while(1)
{
for(i=0;i<2;i++)
{
for(n=nDots;n>0;n--)
{
delay(ntimea);
}
}
Jianbian(nDots,ntimeb, 0, 0, 0, 31, 0, 0);
Jianbian(nDots,ntimeb,31, 0, 0, 31,31, 0);
Jianbian(nDots,ntimeb,31,31, 0, 0,31, 0);
Jianbian(nDots,ntimeb, 0,31, 0, 0,31,31);
Jianbian(nDots,ntimeb, 0,31,31, 0, 0,31);
Jianbian(nDots,ntimeb, 0, 0,31, 31, 0,31);
Jianbian(nDots,ntimeb,31, 0,31, 31,31,31);
}
}
以上为点光源 6803控制器,已经量产 有追彩 渐变,跳变,追逐等。。 若要详细资料的请吼

声音要大