⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo.c

📁 全彩LED变化程序,单片机控制LPD6803驱动LED
💻 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 + -