基于51的爱心水流灯源码

基于51的爱心流水灯源码

32颗LED的心形流水灯,是接触51跟C语言初期栋神送的,代码对新手来说还好,对高手貌似略乱点(目前没时间重写),不过影响不大~

基于51的爱心水流灯源码

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
void delays(uint xms)
{
    uint i,j;
    for(i=xms;i>0;i--)
       for(j=110;j>0;j--);
}
void main()
{
     uint i,j,n; uchar a,b,c,d; 
     for(i=0;i<1;i++)       //                                                               所有灯闪1下
     {
         P0=P1=P2=P3=0x00;delays(1000);
         P0=P1=P2=P3=0xff;delays(1000);
     }                       
                       P3=P2=0xff;                                                        //两边一起向下流水
                       for(j=0;j<=8;j++)
                       {
                           P1=0xff<<j;P0=0xff<<j;delays(40);
                       }
                       for(j=0;j<=8;j++)
                       {
                           P3=0xff<<j; P2=0xff>>j;delays(40);
                       }
                       P0=P1=P2=P3=0x00;delays(500);
                       for(j=0;j<8;j++)
                       {P3=0xff<<(7-j);P2=0xff>>(7-j);delays(40);
                       }
                      for(j=0;j<8;j++)
                       {
                           P0=0xff<<(7-j);P1=0xff<<(7-j);delays(40);
                       }                               
                                    P3=P2=0xff;           //两边 杂乱 闪烁
                                    for(j=0;j<=8;j++)
                                    {P1=0xff<<j; P0=0xff<<j; delays(40);
                                    }
                                    for(j=0;j<=8;j++)
                                    {P3=0xff>>j;P2=0xff<<j; delays(40);
                                    }
                                    P0=P1=P2=P3=0x00;delays(500);
                                    for(j=0;j<8;j++)
                                    {P1=0xff>>(7-j);P0=0xff>>(7-j);delays(40);
                                    }
                                    for(j=0;j<8;j++)
                                    {P2=0xff>>(7-j);P3=0xff<<(7-j);delays(40);
                                    }                                 
        P0=P1=P2=P3=0xff;    //一边向下流水
        for(j=0;j<=8;j++)
        { P1=0xff<<j;delays(30);
        }      
        for(j=0;j<=8;j++)
        {
              P3=0xff<<j;delays(30);
        }
        for(j=0;j<=8;j++)
        {
              P2=0xff<<j;delays(30);
        }
        for(j=0;j<=8;j++)
        {
              P0=0xff>>j;delays(30);
        }  
        P0=P1=P2=P3=0x00;
        delays(500)  ;
        for(j=0;j<8;j++)
        { 
              P0=0xff>>(7-j);delays(30);
        }
        for(j=0;j<8;j++)
        { 
              P2=0xff<<(7-j);delays(30);
        }
        for(j=0;j<8;j++)
        { 
              P3=0xff<<(7-j);delays(30);
        }
        for(j=0;j<8;j++)
        { 
              P1=0xff<<(7-j);delays(30);
        }
        P0=P1=P2=P3=0xff;
        for(j=0;j<=8;j++)
        {
              P0=0xff<<j; delays(30);
        }      
        for(j=0;j<=8;j++)
        {
              P2=0xff>>j; delays(30);
        }
        for(j=0;j<=8;j++)
        {
              P3=0xff>>j;delays(30);
        }
        for(j=0;j<=8;j++)
        {
              P1=0xff>>j;delays(30);
        }  
        P0=P1=P2=P3=0x00;
        delays(500)  ;
        for(j=0;j<8;j++)
        { 
              P1=0xff>>(7-j);delays(30);
        }
        for(j=0;j<8;j++)
        { 
              P3=0xff>>(7-j);delays(30);
        }
        for(j=0;j<8;j++)
        { 
              P2=0xff>>(7-j);delays(30);
        }
        for(j=0;j<8;j++)
        { 
              P0=0xff<<(7-j);delays(30);
        }  //2  
                                     P0=P2=P3=0xff ;
                       for(i=0;i<=8;i++)
         {   P1=0xff<<i;delays(50);
         } delays(800);
         for(i=0;i<8;i++)
         {   P1=0xff>>(7-i);delays(50);
         }  P0=P1=P2=0xff;
              for(i=0;i<=8;i++)
              {  P3=0xff<<i;delays(50);
              }   delays(800);
              for(i=0;i<8;i++)
              {   P3=0xff>>(7-i);delays(50);
              }P0=P1=P3=0xff; 
         for(i=0;i<=8;i++)
         {  P2=0xff<<i;delays(50);
                                       }   delays(800);
         for(i=0;i<8;i++)
                                       {   P2=0xff>>(7-i);delays(50);
                                       } P1=P2=P3=0xff;
              for(i=0;i<=8;i++)
              {  P0=0xff>>i;delays(50);
              }      delays(800);
              for(i=0;i<8;i++)
              {  P0=0xff<<(7-i);delays(50);
              } 
        P2=P3=0xff;for(i=0;i<=8;i++)
                   {
         P0=0xff<<i;P1=0xff<<i;delays(50);
    }delays(800);
    for(i=0;i<8;i++)
    {
         P0=0xff>>(7-i);P1=0xff>>(7-i);delays(50);     
    }P0=P1=0xff;
         for(i=0;i<=8;i++)
         {
             P3=0xff<<i;P2=0xff>>i;delays(50);
         }delays(800);
         for(i=0;i<8;i++)
         {
             P3=0xff>>(7-i);P2=0xff<<(7-i);delays(50);
         }
         for(i=0;i<3;i++)
         {
             P1=P3=P2=0xcc;P0=0x33;delays(500);P1=P3=P2=0x33;P0=0xcc;delays(500);
         }
                          P1=P3=P2=0xcc;   P0=0x33;           //首先逆时针
                                                        for(i=0;i<120;i++)
                                                        {    
                                                               delays(100);P0=_cror_(P0,1);P1=_crol_(P1,1);P3=_crol_(P3,1);P2=_crol_(P2,1);
                                                        }
                                                        delays(1500) ;
                                                        for(i=0;i<120;i++)
                                                        {    
                                                               delays(100); P0=_crol_(P0,1);P1=_cror_(P1,1);P3=_cror_(P3,1);P2=_cror_(P2,1);
                                                         } delays(1000);
    P1=P3=P2=0x0f;   P0=0xf0;           //首先逆时针
    for(i=0;i<80;i++)
     {    
        delays(120);P0=_cror_(P0,1);P1=_crol_(P1,1);P3=_crol_(P3,1);P2=_crol_(P2,1);
     }
     delays(1500) ;
      for(i=0;i<80;i++)
     {    
        delays(120); P0=_crol_(P0,1);P1=_cror_(P1,1);P3=_cror_(P3,1);P2=_cror_(P2,1);
     }  
                P1=P3=P0=0x77;P2=0xee;
                for(i=0;i<50;i++)    //四口来回转
                {    
                        delays(100);P0=_crol_(P0,1);P1=_crol_(P1,1);P3=_crol_(P3,1);P2=_cror_(P2,1);
                }     
  P0=P3=0xff;P1=P2=0xfe;
                        for(i=0;i<8;i++)
         {      delays(30);
                P1=_crol_(P1,1);P2=_crol_(P2,1); 
         }P1=P2=0xff;P3=0xfe;P0=0x7f;
         for(i=0;i<8;i++)
         {      delays(30);
                P3=_crol_(P3,1);P0=_cror_(P0,1);
         }P0=0xfe;P3=0x7f;a=0x7f;  b=0xfe;
      for(j=1;j<8;j++)
      {  c=0xff<<j;d=0xff>>j;
         P1=P2=0xfe;
                        for(i=0;i<=7;i++)
         {      delays(30);
                P1=_crol_(P1,1);P2=_crol_(P2,1);
         }P1=P2=0xff;               
                                                      for(i=0;i<7;i++)
                                                      {    
                P0=a&c;P3=b&d;delays(30);
                                                             a=_cror_(a,1);b=_crol_(b,1);                                                                
                                                      }
       } P0=P3=0x00;b=0xfe;
     for(j=1;j<8;j++)
     {  d=0xff>>j;
           for(i=0;i<7;i++)
           {
              P1=b&d;P2=b&d;delays(30);b=_crol_(b,1);
           }           
     }
  n=2;     while(n)
          {
             P1=P2=P3=0x7f;P0=0xfe;
             for(i=0;i<7;i++)
             {   delays(100);P1=_cror_(P1,1);P2=_cror_(P2,1);P3=_cror_(P3,1);P0=_crol_(P0,1);
             } delays(100);
             c=0xfe;d=0x7f;a=0x7f;b=0xfe; 
            for(j=0;j<9;j++)
            {               
               for(i=0;i<=8;i++)
               {  
                  P1=P2=P3=c&a;P0=b&d;delays(100);
   a=_cror_(a,1);b=_crol_(b,1);                    
               } c=_cror_(c,1);d=_crol_(d,1); a=c;b=d;
            }n--;
          }
                                     P3=P2=0xff;        //两边一起向下亮
                                     for(j=0;j<=8;j++)
                                     {
                                           P1=0xff<<j;P0=0xff<<j;delays(40);
                                     }
                                     for(j=0;j<=8;j++)
                                     {
                                           P3=0xff<<j; P2=0xff>>j;delays(40);
                                     }
while(1)                                                       //一心调频率接近的跳动
{
    P0=P1=P2=P3=0x00;delays(800);
    P0=P1=P2=P3=0xff;delays(800);
} 
}