找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4443|回復(fù): 2
收起左側(cè)

stc12c2052ad 多樣式流水燈

[復(fù)制鏈接]
ID:112693 發(fā)表于 2016-4-25 22:36 | 顯示全部樓層 |閱讀模式
#include <stc12c2052ad.h>  //頭文件
rzmzy(); //紅色走馬左移聲明
rlszy(); //紅色流水左移聲明
rlsyy(); //紅色流水右移聲明
rzmyy(); //紅色走馬右移聲明
rzmnwyd(); //紅色走馬內(nèi)外移動(dòng)聲明
rlsnwyd(); //紅色流水內(nèi)外移動(dòng)聲明
rtbyd(); //紅色跳變移動(dòng)聲明
rsdzmyy(); //紅色3燈走馬右移聲明
rsdzmzy(); //紅色3燈走馬左移聲明
rjl();       //紅色漸亮聲明
rja();       //紅色漸暗聲明
rdlszy();    //倒流水左移函數(shù)
//rdlsyy();    //倒流水右移函數(shù),還未加入
zkb(unsigned char d);
void ys1ms(unsigned int s);     //延時(shí)聲明,修改s的數(shù)值,就可以改變時(shí)間
main() //主函數(shù),由于模塊化設(shè)計(jì),只要修改下面各模塊的排列順序和時(shí)間,就可以實(shí)現(xiàn)各種變化模式
{
    EA=1;//打開中斷,使用中斷方便調(diào)試查看模式
    EX0=1; //允許外部中斷0中斷
    EX1=1; //允許外部中斷1中斷
    PX0=1; // 外部中斷0位高優(yōu)先級(jí)
    while(1)  //無限循環(huán)
    {
     rdlszy(); //倒流水左移
     rja();       //漸暗
     P1=0xff;
     ys1ms(300); //延時(shí)0.3秒
     //rdlsyy(); //    倒流水右移
     //P1=0xff;
     //ys1ms(300);
     rzmyy(); //走馬右移
     P1=0xff;
     ys1ms(300);     
     rzmzy(); //走馬左移
     P1=0xff;
     ys1ms(300);
     rjl();     //漸亮
     rja();     //漸暗
     P1=0xff;
     ys1ms(300);
     rzmnwyd(); //走馬內(nèi)外移動(dòng)
     P1=0xff;
     ys1ms(300);
     rlszy(); //流水左移
     rja();     //漸暗
     ys1ms(300);
     rlsyy(); //流水右移
     rja();     //漸暗
     ys1ms(300);
     rsdzmyy(); //3燈走馬右移
     P1=0xff;
     ys1ms(300);
     rsdzmzy(); //3燈走馬右移
     P1=0xff;
     ys1ms(300);         
     rlsnwyd(); //流水內(nèi)外移動(dòng)
      P1=0xff;
     ys1ms(300);
     rtbyd(); //跳變7種模式
     P1=0xff;
     ys1ms(300);
    }
}
rzmyy()  //走馬拖尾右移函數(shù)
{
     P1=0x7f;
     ys1ms(60);
     P1=0xbf;
     if(P1_7==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_7 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_7 = 1;
            for(i = 0; i < 50; i++);
            }
     }
     P1=0xdf;
    if(P1_6==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_6 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_7 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_6 = 1;
            P1_7 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xef;
    if(P1_5==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_5 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_6 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_5 = 1;
            P1_6 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xf7;
    if(P1_4==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_4 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_5 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_4 = 1;
            P1_5 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xfb;
     if(P1_3==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_3 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_4 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_3 = 1;
            P1_4 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xfd;
     if(P1_2==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_2 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_3 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_2 = 1;
            P1_3 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xfe;
     if(P1_1==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_1 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_2 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_1 = 1;
            P1_2 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xff;
     if(P1_0==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_0 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_1 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_0 = 1;
            P1_1 = 1;
            for(i = 0; i < 50; i++);
            }
        }
    if(P1_7==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_0 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_0 = 1;
            for(i = 0; i < 50; i++);
            }
    }         
}
/****************************************************************************/
rzmzy()  //走馬拖尾左移函數(shù)
{
     P1=0xfe;
     ys1ms(60);
     P1=0xfd;
     if(P1_0==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_0 = 0;
            for(i = 0; i < 10; i++);  //調(diào)節(jié)亮度高低
            P1_0 = 1;
            for(i = 0; i < 50; i++);
            }
    }         
     P1=0xfb;
     if(P1_1==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_1 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_0 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_1 = 1;
            P1_0 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xf7;
     if(P1_2==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_2 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_1 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_2 = 1;
            P1_1 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xef;
     if(P1_3==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_3 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_2 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_3 = 1;
            P1_2 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xdf;
     if(P1_4==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_4 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_3 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_4 = 1;
            P1_3 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xbf;
     if(P1_5==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_5 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_4 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_5 = 1;
            P1_4 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0x7f;
     if(P1_6==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_6 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_5 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_6 = 1;
            P1_5 = 1;
            for(i = 0; i < 50; i++);
            }
        }
     P1=0xff;
     if(P1_7==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_7 = 0;
            for(i = 0; i < 15; i++);  //調(diào)節(jié)亮度高低
            P1_6 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_7 = 1;
            P1_6 = 1;
            for(i = 0; i < 50; i++);
            }
        }
    if(P1_0==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //調(diào)節(jié)點(diǎn)亮?xí)r間
            {
            unsigned char i;
            P1_7 = 0;
            for(i = 0; i < 1; i++);  //調(diào)節(jié)亮度高低
            P1_7 = 1;
            for(i = 0; i < 50; i++);
            }
    }              
}
/****************************************************************************/
rlszy()    //流水左移函數(shù)
{
    unsigned char  a,i,led;    //聲明無字符整形變量a,i,led
    led=0xfe; //左移初始值定位
    P1=led;     //輸出
    ys1ms(120); //延時(shí)
    for(i=1;i<8;i++) //設(shè)置移動(dòng)7次
    {
        a=led<<i;//燈左移i位
        P1=a; //依次點(diǎn)亮
        ys1ms(120);
    }   
}
/***************************************************************************/
rlsyy()    //流水右移函數(shù)
{
    unsigned char  a,i,led;    //聲明無字符整形變量a,i,led
    led=0x7f; //左移初始值定位
    P1=led;     //輸出
    ys1ms(120); //延時(shí)
    for(i=1;i<8;i++) //設(shè)置移動(dòng)7次
    {
        a=led>>i;//燈右移i位
        P1=a; //依次點(diǎn)亮
        ys1ms(120);
    }   
}
/***************************************************************************/
rdlszy()    //倒流水左移函數(shù)
{
     P1=0xfe;
     ys1ms(60);
     P1=0xfd;
     ys1ms(60);
     P1=0xfb;
     ys1ms(60);
     P1=0xf7;
     ys1ms(60);
     P1=0xef;
     ys1ms(60);
     P1=0xdf;
     ys1ms(60);
     P1=0xbf;
     ys1ms(60);
     P1=0x7f;
     ys1ms(60);

     P1=0x7e;
     ys1ms(60);
     P1=0x7d;
     ys1ms(60);
     P1=0x7b;
     ys1ms(60);
     P1=0x6f;
     ys1ms(60);
     P1=0x5f;
     ys1ms(60);
     P1=0x3f;
     ys1ms(60);      

     P1=0x3d;
     ys1ms(60);
     P1=0x3b;
     ys1ms(60);
     P1=0x37;
     ys1ms(60);
     P1=0x2f;
     ys1ms(60);
     P1=0x1f;
     ys1ms(60);

     P1=0x1e;
     ys1ms(60);
     P1=0x1d;
     ys1ms(60);
     P1=0x1b;
     ys1ms(60);
     P1=0x17;
     ys1ms(60);
     P1=0x0f;
     ys1ms(60);

     P1=0x0e;
     ys1ms(60);
     P1=0x0d;
     ys1ms(60);
     P1=0x0b;
     ys1ms(60);
     P1=0x07;
     ys1ms(60);

     P1=0x06;
     ys1ms(60);
     P1=0x05;
     ys1ms(60);
     P1=0x04;
     ys1ms(60);
     P1=0x03;
     ys1ms(60);

     P1=0x02;
     ys1ms(60);
     P1=0x01;
     ys1ms(60);
     P1=0x00;

}
/***************************************************************************
rdlsyy()    //倒流水右移函數(shù),參考上面左移
{
   
}
/***************************************************************************/
rsdzmyy()  //3燈走馬右移函數(shù) ,可以參考單燈走馬加入拖尾
{
     P1=0x1f;
     ys1ms(60);
     P1=0x8f;
     ys1ms(60);
     P1=0xc7;
     ys1ms(60);
     P1=0xe3;
     ys1ms(60);
     P1=0xf1;
     ys1ms(60);
     P1=0xf8;
     ys1ms(60);
     P1=0xfc;
     ys1ms(60);
     P1=0xfe;
     ys1ms(60);
     P1=0xff;         
}
/****************************************************************************/
rsdzmzy()  //3燈走馬左移函數(shù), 可以參考單燈走馬加入拖尾
{
     P1=0xf8;
     ys1ms(60);
     P1=0xf1;
     ys1ms(60);
     P1=0xe3;
     ys1ms(60);
     P1=0xc7;
     ys1ms(60);
     P1=0x8f;
     ys1ms(60);
     P1=0x1f;
     ys1ms(60);
     P1=0x3f;
     ys1ms(60);
     P1=0x7f;
     ys1ms(60);
     P1=0xff;         
}
/****************************************************************************/
rzmnwyd()  //走馬內(nèi)外移動(dòng)函數(shù)
{     
     P1=0x7e;//
     ys1ms(90);
     P1=0xbd;
     ys1ms(90);
     P1=0xdb;
     ys1ms(90);
     P1=0xe7;
     ys1ms(90);
     P1=0xff;
     ys1ms(300);
     P1=0xe7;
     ys1ms(90);
     P1=0xdb;
     ys1ms(90);
     P1=0xbd;
     ys1ms(90);
     P1=0x7e;
     ys1ms(90);
     P1=0xff;
}
/****************************************************************************/
rlsnwyd()  //紅色流水內(nèi)外移動(dòng)函數(shù)
{     
     P1=0xe7;//
     ys1ms(90);
     P1=0xc3;
     ys1ms(90);
     P1=0x81;
     ys1ms(90);
     P1=0x00;
     rja();
     ys1ms(300);
     P1=0x7e;
     ys1ms(90);
     P1=0x3c;
     ys1ms(90);
     P1=0x18;
     ys1ms(90);
     P1=0x00;
     rja();
}
/****************************************************************************/
rtbyd()  //紅色跳變8模式移動(dòng)函數(shù)
{     
     P1=0x1f;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0xf8;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0xe7;
     ys1ms(180);
     P1=0xff;
     ys1ms(300);
/****************************************************************************/
     P1=0xfc;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0x3f;
     ys1ms(180);
     P1=0xff;
     ys1ms(300);
/****************************************************************************/
     P1=0x3c;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0x3c;
     ys1ms(180);
     P1=0xff;
     ys1ms(300);
/****************************************************************************/
     P1=0xc3;
     ys1ms(120);
     P1=0xff;
     ys1ms(120);
     P1=0xc3;
     ys1ms(120);
     P1=0xff;
     ys1ms(120);
/****************************************************************************/
     P1=0xf0;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0xf0;
     ys1ms(180);
     P1=0xff;
     ys1ms(300);
/****************************************************************************/
     P1=0xc3;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0xc3;
     ys1ms(300);
/****************************************************************************/
     P1=0x0f;
     ys1ms(180);
     P1=0xff;
     ys1ms(120);
     P1=0x0f;
     ys1ms(180);
     P1=0xff;
     ys1ms(300);
/****************************************************************************/
     rjl();     
     P1=0x00;
     ys1ms(100);
     P1=0xff;
     ys1ms(35);
     P1=0x00;
     ys1ms(100);
     P1=0xff;
     ys1ms(35);
     P1=0x00;
     ys1ms(100);
     P1=0xff;
     ys1ms(35);
     P1=0x00;
     ys1ms(100);
     P1=0xff;
     ys1ms(35);
     P1=0x00;
     ys1ms(100);
     P1=0xff;
     ys1ms(35);
     rja();     
     ys1ms(180);
     P1=0xff;
}
/**************單片機(jī)晶振為11.0592兆的1毫秒延時(shí)*************************/
void ys1ms(unsigned int s)       //定時(shí)器精確延時(shí)1毫秒函數(shù),改變S數(shù)值即改變時(shí)間
{
     TR0=1;
    while(s!=0)
    {
        TH0=-(7629/256);
        TL0=-(7629%256);
        while(TF0!=1);
        TF0=0;
        s--;
    }
    TR0=0;
}
/*****************************************************************************
int0_srv() interrupt 0 using 2     //外中斷函數(shù)
{
    unsigned char n,m;     //聲明無字符整形變量a和b
    unsigned int i;        //聲明無字符整形變量i
    for(i=0;i<5000;i++);  //延時(shí)50毫秒,防抖動(dòng)
    if (INT0==0)          //暫停
    {
        n=P1;              //保留狀態(tài)
        m=P2;
        P3=0xfb;          //保持暫停狀態(tài)
    }
    if(INT1==0)              //繼續(xù)運(yùn)行
    {
        P3=0xff;          //釋放暫停狀態(tài)
        P1=n;              //恢復(fù)運(yùn)行
        P2=m;
    }
}
/****************************************************************************/
rjl()  //漸亮函數(shù)
{   
    unsigned char a, b;//a控制延時(shí)長(zhǎng)度 b控制循環(huán)周期      
    P1 = 0xff;
    a = 0;   
    for (b=250; b>0; b--)   //循環(huán)周期設(shè)置
        {   
            a++;   
            zkb (a);      //延時(shí)長(zhǎng)度隨a而改變   
            P1 = 0xff;
            a = ~a;         //a值取反,決定燈滅時(shí)的占空比   
            zkb (a);   
            P1 = 0x00;
            a = ~a;         //a值取反 使a回到原值繼續(xù)循環(huán)
         }
}
/****************************************************************************/
rja()  //漸暗函數(shù)
{
    unsigned char a, b;//a控制延時(shí)長(zhǎng)度 b控制循環(huán)周期   
    P1 = 0x00;            //亮起LED
    a = 0;   
        for (b=250; b>0; b--)   
        {   
            a++;   
            zkb (a);   
            P1 = 0x00;
            a = ~a;   
            zkb (a);   
            P1 = 0xff;   
            a = ~a;   
        }
}
/****************************************************************************/
zkb(unsigned char d)   //占空比函數(shù),由d決定延時(shí)長(zhǎng)度   
{      
    unsigned char i;   
    while( --d != 0)   
    {   
        for(i = 0; i < 1; i++);   //占空比時(shí)間設(shè)置
    }                        
}
/****************************************************************************/  

回復(fù)

使用道具 舉報(bào)

ID:92231 發(fā)表于 2016-4-28 07:49 來自觸屏版 | 顯示全部樓層
用來控制建筑物的景觀燈或廣告招牌燈,很好
回復(fù)

使用道具 舉報(bào)

ID:88256 發(fā)表于 2016-4-28 09:15 | 顯示全部樓層
不錯(cuò)!可以加個(gè)24C02,流水花樣保存在其中,并且可以和電腦進(jìn)行串口通訊,由電腦編程流水花樣并下載,這樣靈活性更好
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表