?? 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 + -