找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3851|回复: 2
收起左侧

stc12c2052ad 多样式流水灯

[复制链接]
ID:112693 发表于 2016-4-25 22:36 | 显示全部楼层 |阅读模式
#include <stc12c2052ad.h>  //头文件
rzmzy(); //红色走马左移声明
rlszy(); //红色流水左移声明
rlsyy(); //红色流水右移声明
rzmyy(); //红色走马右移声明
rzmnwyd(); //红色走马内外移动声明
rlsnwyd(); //红色流水内外移动声明
rtbyd(); //红色跳变移动声明
rsdzmyy(); //红色3灯走马右移声明
rsdzmzy(); //红色3灯走马左移声明
rjl();       //红色渐亮声明
rja();       //红色渐暗声明
rdlszy();    //倒流水左移函数
//rdlsyy();    //倒流水右移函数,还未加入
zkb(unsigned char d);
void ys1ms(unsigned int s);     //延时声明,修改s的数值,就可以改变时间
main() //主函数,由于模块化设计,只要修改下面各模块的排列顺序和时间,就可以实现各种变化模式
{
    EA=1;//打开中断,使用中断方便调试查看模式
    EX0=1; //允许外部中断0中断
    EX1=1; //允许外部中断1中断
    PX0=1; // 外部中断0位高优先级
    while(1)  //无限循环
    {
     rdlszy(); //倒流水左移
     rja();       //渐暗
     P1=0xff;
     ys1ms(300); //延时0.3秒
     //rdlsyy(); //    倒流水右移
     //P1=0xff;
     //ys1ms(300);
     rzmyy(); //走马右移
     P1=0xff;
     ys1ms(300);     
     rzmzy(); //走马左移
     P1=0xff;
     ys1ms(300);
     rjl();     //渐亮
     rja();     //渐暗
     P1=0xff;
     ys1ms(300);
     rzmnwyd(); //走马内外移动
     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(); //流水内外移动
      P1=0xff;
     ys1ms(300);
     rtbyd(); //跳变7种模式
     P1=0xff;
     ys1ms(300);
    }
}
rzmyy()  //走马拖尾右移函数
{
     P1=0x7f;
     ys1ms(60);
     P1=0xbf;
     if(P1_7==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //调节点亮时间
            {
            unsigned char i;
            P1_7 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_7 = 1;
            for(i = 0; i < 50; i++);
            }
     }
     P1=0xdf;
    if(P1_6==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //调节点亮时间
            {
            unsigned char i;
            P1_6 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_7 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_5 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_6 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_4 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_5 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_3 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_4 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_2 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_3 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_1 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_2 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_0 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_1 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_0 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            P1_0 = 1;
            for(i = 0; i < 50; i++);
            }
    }         
}
/****************************************************************************/
rzmzy()  //走马拖尾左移函数
{
     P1=0xfe;
     ys1ms(60);
     P1=0xfd;
     if(P1_0==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //调节点亮时间
            {
            unsigned char i;
            P1_0 = 0;
            for(i = 0; i < 10; i++);  //调节亮度高低
            P1_0 = 1;
            for(i = 0; i < 50; i++);
            }
    }         
     P1=0xfb;
     if(P1_1==1)
     {
            unsigned int a;
            for(a=0;a<350;a++)    //调节点亮时间
            {
            unsigned char i;
            P1_1 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_0 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_2 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_1 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_3 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_2 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_4 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_3 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_5 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_4 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_6 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_5 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_7 = 0;
            for(i = 0; i < 15; i++);  //调节亮度高低
            P1_6 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            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++)    //调节点亮时间
            {
            unsigned char i;
            P1_7 = 0;
            for(i = 0; i < 1; i++);  //调节亮度高低
            P1_7 = 1;
            for(i = 0; i < 50; i++);
            }
    }              
}
/****************************************************************************/
rlszy()    //流水左移函数
{
    unsigned char  a,i,led;    //声明无字符整形变量a,i,led
    led=0xfe; //左移初始值定位
    P1=led;     //输出
    ys1ms(120); //延时
    for(i=1;i<8;i++) //设置移动7次
    {
        a=led<<i;//灯左移i位
        P1=a; //依次点亮
        ys1ms(120);
    }   
}
/***************************************************************************/
rlsyy()    //流水右移函数
{
    unsigned char  a,i,led;    //声明无字符整形变量a,i,led
    led=0x7f; //左移初始值定位
    P1=led;     //输出
    ys1ms(120); //延时
    for(i=1;i<8;i++) //设置移动7次
    {
        a=led>>i;//灯右移i位
        P1=a; //依次点亮
        ys1ms(120);
    }   
}
/***************************************************************************/
rdlszy()    //倒流水左移函数
{
     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()    //倒流水右移函数,参考上面左移
{
   
}
/***************************************************************************/
rsdzmyy()  //3灯走马右移函数 ,可以参考单灯走马加入拖尾
{
     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灯走马左移函数, 可以参考单灯走马加入拖尾
{
     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()  //走马内外移动函数
{     
     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()  //红色流水内外移动函数
{     
     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模式移动函数
{     
     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;
}
/**************单片机晶振为11.0592兆的1毫秒延时*************************/
void ys1ms(unsigned int s)       //定时器精确延时1毫秒函数,改变S数值即改变时间
{
     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     //外中断函数
{
    unsigned char n,m;     //声明无字符整形变量a和b
    unsigned int i;        //声明无字符整形变量i
    for(i=0;i<5000;i++);  //延时50毫秒,防抖动
    if (INT0==0)          //暂停
    {
        n=P1;              //保留状态
        m=P2;
        P3=0xfb;          //保持暂停状态
    }
    if(INT1==0)              //继续运行
    {
        P3=0xff;          //释放暂停状态
        P1=n;              //恢复运行
        P2=m;
    }
}
/****************************************************************************/
rjl()  //渐亮函数
{   
    unsigned char a, b;//a控制延时长度 b控制循环周期      
    P1 = 0xff;
    a = 0;   
    for (b=250; b>0; b--)   //循环周期设置
        {   
            a++;   
            zkb (a);      //延时长度随a而改变   
            P1 = 0xff;
            a = ~a;         //a值取反,决定灯灭时的占空比   
            zkb (a);   
            P1 = 0x00;
            a = ~a;         //a值取反 使a回到原值继续循环
         }
}
/****************************************************************************/
rja()  //渐暗函数
{
    unsigned char a, b;//a控制延时长度 b控制循环周期   
    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)   //占空比函数,由d决定延时长度   
{      
    unsigned char i;   
    while( --d != 0)   
    {   
        for(i = 0; i < 1; i++);   //占空比时间设置
    }                        
}
/****************************************************************************/  

回复

使用道具 举报

ID:92231 发表于 2016-4-28 07:49 来自手机 | 显示全部楼层
用来控制建筑物的景观灯或广告招牌灯,很好
回复

使用道具 举报

ID:88256 发表于 2016-4-28 09:15 | 显示全部楼层
不错!可以加个24C02,流水花样保存在其中,并且可以和电脑进行串口通讯,由电脑编程流水花样并下载,这样灵活性更好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表