STM32/STM8技术william hill官网
直播中

cirvis

9年用户 77经验值
擅长:MEMS/传感技术 嵌入式技术 模拟技术 光电显示 存储技术 接口/总线/驱动 控制/MCU
私信 关注
[资料]

心形流水灯设计全过程详细讲解(含程序、仿真、PCB)

/******************************************************************************************/
/*****************************心  型  流  水  灯******************************************/
/****************************************************************************************/
// 林芸
// 修改版
//如 有 不 足 之 处 请 多 多 指 教
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code tab[]={  0xFE,/*0*/0xFD,/*1*/0xFB,/*2*/0xF7,/*3*/0xEF,/*4*/0xDF,/*5*/0xBF,/*6*/0x7F,/*7*/  }; //单个亮
uchar code tab0[]={ 0x7F,/*8*/0x3F,/*7*/0x1F,/*6*/0x0F,/*5*/0x07,/*4*/0x03,/*3*/0x01,/*2*/0x00,/*1*/ };//从第8个亮,逐个+1
uchar code tab1[]={ 0x7E,0x7D,0x7B,0x77,0x6F,0x5F,0x3F,     //第8灯亮并循环
     0x3E,0x3D,0x3B,0x37,0x2F,0x1F,       //第78个灯亮并循环
     0x1E,0x1D,0x1B,0x17,0x0F,           //第678个灯亮并循环
     0x0E,0x0D,0x0B,0x07,              //第5678个灯亮并循环
     0x06,0x05,0x03,           //第345678个灯亮并循环
     0x02,0x01,
      };
***it HX=P0^0;
void delay(uint z);
void main()
{
uchar aa,ss,dd,ff,qq,ww,ee,rr,q,w,e,t,u,i,o,p,c,v,b,k,n,m,js0,js1,js2,js3,a,s,d,f,g,h,j;
  while(1)
{
/* s=3;
  while(s) //呼吸灯
  {
   s--;
   delay(50);
   k=0;
   for(i=0;i<=252;i++)
   {
    if(0==(i%5))
     k++;
    for(t=0;t<=16;t++)
    {
     P1=P0=P2=P3=0x00;
     for(j=0;j<=64;j++)
     {
      if(j==k)
        P1=P0=P2=P3=0xff;
     }
    }
   }
   k=51;
   for(i=0;i<=252;i++)
   {
    if(0==(i%5))
     k--;
    for(t=0;t<=16;t++)
    {
     P1=P0=P2=P3=0x00;
     for(j=0;j<=64;j++)
     if(j==k)
       P1=P0=P2=P3=0xff;
    }
    if(k==0)
    {
     P1=P0=P2=P3=0xff;
     i=253;
    }
   }
  }  
  s=3;
  while(s)    //一个灯呼吸
  {
   s--;
   k=0;
   for(i=0;i<=252;i++)
   {
    if(0==(i%5))
     k++;
    for(t=0;t<=16;t++)
    {
     HX=0x00;
     for(j=0;j<=64;j++)
     {
      if(j==k)
        HX=0xff;
     }
    }
   }
  }
  delay(650);   
  for(v=0;v<4;v++)  //心形中点闪烁
  {
   HX=0;
   delay(500);
   HX=1;
  }*/   
  aa=ss=dd=ff=0xfe;  
  for(q=0;q<8;q++)   //一个灯循环
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);
  }
  aa=ss=dd=ff=0xfc;    //两个灯循环
  for(w=0;w<6;w++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);

  }
  aa=ss=dd=ff=0xf8;    //三个灯循环
  for(e=0;e<5;e++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);     
  }
  aa=ss=dd=ff=0xf8;   //四个灯循环
  for(t=0;t<4;t++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);      
  }
  aa=ss=dd=ff=0xf0;   //四个灯循环
  for(u=0;u<8;u++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);      
  }
  P1=P2=P0=P3=0xe0;   //五个灯循环
  for(i=0;i<8;i++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);      
  }
  P1=P2=P0=P3=0xc0;   //六个灯循环
  for(o=0;o<8;o++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);      
  }
  P1=P2=P0=P3=0x80;   //七个灯循环
  for(p=0;p<8;p++)
  {
   P0=aa;
   P1=ss;
   P2=dd;
   P3=ff;
   delay(50);
   aa=_crol_(aa,1);
   ss=_crol_(aa,1);
   dd=_crol_(aa,1);
   ff=_crol_(aa,1);      
  }
  P1=P2=P0=P3=0xff;     //全部灯闪烁
  delay(300);
  P1=P2=P3=P0=0;
  delay(300);
  P1=P2=P0=P3=0xff;     
  delay(300);
  P1=P2=P3=P0=0;
  delay(300);
  P1=P2=P3=P0=0xff;
  g=b=h=n=js0=js1=js2=js3=0;
  m=40;
  while(m)
  {
   if(js0<24)
   {
    for(c=0;c<8;c++)
    {
     P0=tab[c];
     delay(30);
     }
     js0++;
     P0=0xff;   
   }
   if(js0>23&&js0<52)
   {
    P0=tab1[b];
    delay(30);
    b++;
    if(b==15)
    {
     js0=52;
     d=16;
    }   
   }
   if(js1<16)
   {
    for(v=0;v<8;v++)
    {
     P1=tab[v];
     delay(30);
     }
     js1++;
     P1=0xff;
   }
   if(js1>15)
   {
    if(m==24)
    {
     for(v=0;v<8;v++)
     {
      P1=tab1[n];
      n++;
     }
     P1=tab0[m-24];
    }
    if(m==23)
    {
     for(v=0;v<7;v++)
     {
      P1=tab1[n];
      n++;
     }
     P1=tab0[m-22];
    }
    if(m==22)
    {
     for(v=0;v<6;v++)
     {
      P1=tab1[n];
      n++;
     }
     P1=tab0[m-20];   
    }
    if(m==21)
    {
     for(v=0;v<5;v++)
     {
      P1=tab1[n];
      n++;
     }
     P1=tab0[m-18];
    }
    if(m==20)
    {
     for(v=0;v<4;v++)
     {
      P1=tab1[n];
      n++;
     }
     P1=tab0[m-16];   
    }
    if(m==18)
    {
     for(v=0;v<3;v++)
     {
      P1=tab1[n];
      n++;
     }
     P1=tab0[m-13];  
    }
    if(m==17)
    {
      for(v=0;v<2;v++)
      {
       P1=tab1[n];
      n++;
       }
       P1=tab0[m-11];
    }
    if(m==16)
    {
     P1=0;
    }
   }
   if(js2<8)
   {
    for(v=0;v<8;v++)
    {
     P2=tab[v];
     delay(30);
     }
     js2++;
     P2=0xff;
   }
   if(js2>7)
   {
    if(m==32)
    {
     for(v=0;v<8;v++)
     {
      P2=tab1[j];
      j++;
     }
     P2=tab0[m-32];
    }
    if(m==31)
    {
     for(v=0;v<7;v++)
     {
      P2=tab1[j];
      j++;
     }
     P2=tab0[m-30];   
    }
    if(m==30)
    {
     for(v=0;v<6;v++)
     {
      P2=tab1[j];
      j++;
     }
     P2=tab0[m-28];
    }
    if(m==29)
    {
     for(v=0;v<5;v++)
     {
      P2=tab1[j];
      j++;
     }
     P2=tab0[m-26];   
    }
    if(m==28)
    {
     for(v=0;v<4;v++)
     {
      P2=tab1[j];
      j++;
     }
     P2=tab0[m-24];   
    }
    if(m==27)
    {
     for(v=0;v<3;v++)
     {
      P2=tab1[j];
      j++;
     }
     P2=tab0[m-22];  
    }
    if(m==26)
    {
     for(v=0;v<2;v++)
     {
      P2=tab1[j];
      j++;   
     }
     P2=tab0[m-20];
    }
    if(m==25)
    {
     P2=0;   
    }
   }
   if(m==40)      //P3循环
   {
    for(v=0;v<8;v++)
    {
     P3=tab1[h];
     h++;
    }
    P3=tab0[m-40];
   }
   if(m==39)
   {
    for(v=0;v<7;v++)
    {
     P3=tab1[h];
     h++;
    }
    P3=tab0[m-38];   
   }
   if(m==38)
   {
    for(v=0;v<6;v++)
    {
     P3=tab1[h];
     h++;
    }
    P3=tab0[m-36];
   }
   if(m==37)
   {
    for(v=0;v<5;v++)
    {
     P3=tab1[h];
     h++;
    }
    P3=tab0[m-34];   
   }
   if(m==36)
   {
    for(v=0;v<4;v++)
    {
     P3=tab1[h];
     h++;
    }
    P3=tab0[m-32];   
   }
   if(m==35)
   {
    for(v=0;v<3;v++)
    {
     P3=tab1[h];
     h++;
    }
    P3=tab0[m-30];  
   }
   if(m==34)
   {
    for(v=0;v<2;v++)
    {
     P3=tab1[h];
     h++;
    }
   }

   if(m==33)
   {
    P3=0x00;   
   }
   m--;
   delay(30);
  }
  if(m==0&&d<28)
   for(v=0;v<11;v++)
   {
    delay(30);
    P0=tab1[d];
    d++;
   }
  delay(30);
  P0=0x01;
  delay(30);
  P0=0x00;
  delay(600);
  P1=P2=P3=P0=0xff;
  delay(300);
  a=0x7f;
  for(v=0;v<8;v++)
  {
   P3=a;
   delay(50);
   a=a>>1;
  }
  P3=0xff;
  a=0x7f;
  for(v=0;v<8;v++)
  {
   P2=a;
   delay(50);
   a=a>>1;
  }
  P2=0xff;
  a=0x7f;
  for(v=0;v<8;v++)
  {
   P1=a;
   delay(50);
   a=a>>1;
  }
  P1=0xff;
  a=0x7f;
  for(v=0;v<8;v++)
  {
   P0=a;
   delay(50);
   a=a>>1;
  }
  P0=0xff;
  a=3;
  while(a)
  {
   P1=~P1;
   P3=~P3;
   delay(300);     
   P1=~P1;
   P3=~P3;
   delay(300);     
   P0=~P0;
   P2=~P2;
   delay(300);     
   P0=~P0;
   P2=~P2;
   delay(300);
   a--;
   f=1;     

  }
   while(f)
  {
   delay(80);
   f--;
   qq=0xfe;
   ee=0x7f;
   for(v=0;v<8;v++)
   {
    P0=qq;
    P3=ee;
    delay(80);
    ee=ee>>1;
    qq=qq<<1;
   }
   ww=0xfe;
   rr=0x7f;
   delay(80);
   for(v=0;v<8;v++)
   {
    P1=ww;
    P2=rr;
    delay(80);
    ww=ww<<1;
    rr=rr>>1;
   }
   P0=P1=P2=P3=0xff;
   delay(80);
   qq=0xfe;
   ee=0x7f;
   for(v=0;v<8;v++)
   {
    P1=ee;
    P2=qq;
    delay(80);
    ee=ee>>1;
    qq=qq<<1;   
     
   }
   ww=0xfe;
   rr=0x7f;
   for(v=0;v<8;v++)
   {
    P0=rr;
    P3=ww;
    delay(80);
    rr=rr>>1;
    ww=ww<<1;   
   }
   P0=P1=P2=P3=0xff;
   delay(80);
  }
   P1=P2=P0=P3=0xaa;
   delay(1000);
   P1=P2=P0=P3=0x55;
   delay(800);
   P1=P2=P0=P3=0xaa;
   delay(600);
   P1=P2=P0=P3=0x55;
   delay(400);
   
}
}

void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}

回帖(5)

赵杰

2016-9-30 16:15:22
还可以
举报

平凡zero

2018-3-17 10:47:25
感谢分享,学习了
举报

黄伟

2018-3-28 16:02:14
感谢楼主的分享~
举报

郑艺楠

2018-4-21 08:43:07
谢谢楼主分享~谢谢谢谢
举报

jf_05481047

2019-7-6 14:26:35
感谢分享,make一下,感谢感谢
举报

更多回帖

发帖
×
20
完善资料,
赚取积分