📄 demo.c
字号:
#include "STC12C2052.H"
typedef unsigned char BYTE;
sbit SDO=P1^5;
sbit SCLK=P1^7;
void BrushOut(BYTE nDots,BYTE dr,BYTE dg,BYTE db)
{ BYTE i,j,mask;
// 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<nDots;i++)
{ //首先输出1个'1'起始位
SDO=1;SCLK=1;SCLK=0;
//输出5位红色数据
mask=0x10;
for(j=0;j<5;j++)
{ if(mask & dr) SDO=1;
else SDO=0;
SCLK=1;SCLK=0;
mask>>=1; }
//输出5位绿色数据
mask=0x10;
for(j=0;j<5;j++)
{ if(mask & dg) SDO=1;
else SDO=0;
SCLK=1;SCLK=0;
mask>>=1; }
//输出5位兰色数据
mask=0x10;
for(j=0;j<5;j++)
{ if(mask & db) SDO=1;
else SDO=0;
SCLK=1;SCLK=0;
mask>>=1; }
}
//输出完nDots的数据后,还要补nDots个脉冲
SDO=0;
for(i=0;i<nDots;i++) { SCLK=1;SCLK=0; }
//传输结束
}
void delay(unsigned int n)
{ BYTE t;
for(;n>0;n--)
for(t=0;t<250;t++) ;
}
main()
{ BYTE i;
while(1)
{
//红色渐亮
for(i=0;i<32;i++)
{
BrushOut(20,i,0,0);
delay(600); }
//红色渐暗同时绿色渐亮
for(i=0;i<32;i++)
{
BrushOut(20,31-i,i,0);
delay(600); }
//绿色渐暗同时兰色渐亮
for(i=0;i<32;i++)
{
BrushOut(20,0,31-i,i);
delay(600); }
//兰色渐暗
for(i=0;i<32;i++)
{
BrushOut(20,0,0,31-i);
delay(600); }
//白色渐亮
for(i=0;i<32;i++)
{
BrushOut(20,i,i,i);
delay(600); }
//七彩演示
BrushOut(20,31,0,0);delay(10000);
BrushOut(20,31,31,0);delay(10000);
BrushOut(20,0,31,0);delay(10000);
BrushOut(20,0,31,31);delay(10000);
BrushOut(20,0,0,31);delay(10000);
BrushOut(20,31,0,31);delay(10000);
BrushOut(20,31,31,31);delay(10000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -