本帖最后由 xiaos 于 2015-4-11 17:27 編輯
視頻:
程序源代碼如下:
- include<reg51.h>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- uchar code zou[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//單個從0到7
- uchar code you[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//單個從7到0
- uchar code liang0_7[]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff}; // 逐個點亮0~7
- uchar code liang7_0[]={0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; // 逐個點亮7~0
- uchar code mie0_7[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00}; // 逐個滅0~7
- uchar code mie7_0[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00}; // 逐個滅7~0
- /***********************************************************/
- void delay(uint t); //延時
- void zg(uint t,uchar a);//兩邊逐個亮
- void qs(uint t,uchar a);//全部閃爍
- void zgxh(uint t,uchar a); // 逆時針逐個點亮
- //void zgxh1(uint t,uchar a); // 順時針逐個點亮
- void djs(uint t,uchar a); //對角閃
- void lbzgm(uint t,uchar a);//兩邊逐個滅
- //void sszgm(uint t,uchar a); // 順時針逐個滅
- void nszgm(uint t,uchar a); // 逆時針逐個滅
- void sztl(uint t,uchar a);//順時逐個同步亮
- void nztl(uint t,uchar a);//逆時逐個同步亮
- void sztm(uint t,uchar a);//順時逐個同步滅
- void nztm(uint t,uchar a);//逆時逐個同步滅
- void hwzjl(uint t,uchar a); //橫往中間亮
- void hwzjm(uint t,uchar a); //橫往中間滅
- //void swzjl(uint t,uchar a); //豎往中間亮
- //void swzjm(uint t,uchar a); //豎往中間滅
- void nzdl(uint t,uchar a); //逆時逐段亮
- void nzdgl(uint t,uchar a); //逆時逐段一個點亮
- void jgs(uint t,uchar a); //間隔閃
- /**********************************************************/
- void zg(uint t,uchar a)//兩邊逐個亮
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- P0=0x01;
- delay(t);
- for(i=0;i<7;i++)
- {
- P0=liang0_7[i+1];
- P3=liang7_0[i];
- delay(t);
- }
- P3=0xff;P1=0x01;
- delay(t);
- for(i=0;i<7;i++)
- {
- P1=liang0_7[i+1];
- P2=liang7_0[i];
- delay(t);
- }
- P2=0xff;delay(t);
- }
- }
- void qs(uint t,uchar a) //全部閃爍
- {
- uchar j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- delay(t);
- P0=P1=P2=P3=0xff;
- delay(t);
- }
- }
- void zgxh(uint t,uchar a) // 逆時針逐個點亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for (i=0;i<8;i++)
- {
- P3=liang7_0[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P2=liang7_0[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P1=liang7_0[i];
- delay(t);
- }
- for(i=0;i<8;i++)
- {
- P0=liang7_0[i];
- delay(t);
- }
- }
- }
- void nszgm(uint t,uchar a) // 逆時針逐個滅
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for (i=0;i<8;i++)
- {
- P3=mie7_0[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P2=mie7_0[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P1=mie7_0[i];delay(t);
- }
- for (i=0;i<8;i++)
- {
- P0=mie7_0[i];delay(t);
- }
- }
- }
- void djs(uint t,uchar a) //對角閃
- {
- uchar j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- P0=P3=0xff;
- delay(t);
- P0=P1=P2=P3=0x00;
- P1=P2=0xff;
- delay(t);
- }
- }
- void lbzgm(uint t,uchar a)//兩邊逐個滅
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- P3=0x7f;delay(t);
- for(i=0;i<7;i++)
- {
- P3=mie7_0[i+1];
- P0=mie0_7[i];
- delay(t);
- }
- P0=0x00;
- P2=0x7f;delay(t);
- for(i=0;i<7;i++)
- {
- P2=mie7_0[i+1];
- P1=mie0_7[i];
- delay(t);
- }
- P1=0x00;delay(t);
- }
- }
- void sztl(uint t,uchar a)//順時逐個同步亮
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=liang0_7[i];
- P1=P2=P3=liang0_7[i];
- delay(t);
- }
- }
- }
- void nztl(uint t,uchar a)//逆時逐個同步亮
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=liang7_0[i];
- P1=P2=P3=liang7_0[i];
- delay(t);
- }
- }
- }
- void sztm(uint t,uchar a)//順時逐個同步滅
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=mie0_7[i];
- P1=P2=P3=mie0_7[i];
- delay(t);
- }
- }
- }
- void nztm(uint t,uchar a)//逆時逐個同步滅
- {
- uchar i,j;
- for(j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=mie7_0[i];
- P1=P2=P3=mie7_0[i];
- delay(t);
- }
- }
- }
- void hwzjl(uint t,uchar a) //橫往中間亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=P2=liang0_7[i];
- P1=P3=liang7_0[i];delay(t);
- }
- }
- }
- void hwzjm(uint t,uchar a) //橫往中間滅
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0xff;
- for(i=0;i<8;i++)
- {
- P0=P2=mie0_7[i];
- P1=P3=mie7_0[i];delay(t);
- }
- }
- }
- void nzdl(uint t,uchar a) //逆時逐段亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P0=liang0_7[i];
- delay(t);
- }
- P0=0x00;
- for(i=0;i<8;i++)
- {
- P1=liang0_7[i];
- delay(t);
- }
- P1=0x00;
- for(i=0;i<8;i++)
- {
- P2=liang0_7[i];
- delay(t);
- }
- P2=0x00;
- for(i=0;i<8;i++)
- {
- P3=liang0_7[i];
- delay(t);
- }
- P3=0x00;
- }
- }
- void nzdgl(uint t,uchar a) //逆時逐段一個點亮
- {
- uchar i,j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x00;
- for(i=0;i<8;i++)
- {
- P3=liang7_0[i];
- delay(t);
- }
- P3=0x00;
- for(i=0;i<8;i++)
- {
- P2=liang7_0[i];
- delay(t);
- }
- P2=0x00;
- for(i=0;i<8;i++)
- {
- P1=liang7_0[i];
- delay(t);
- }
- P1=0x00;
- for(i=0;i<8;i++)
- {
- P0=liang7_0[i];
- delay(t);
- }
- P0=0x00;
- }
- }
- void jgs(uint t,uchar a) //間隔閃
- {
- uchar j;
- for (j=0;j<a;j++)
- {
- P0=P1=P2=P3=0x55;
- delay(t);
- P0=P1=P2=P3=0xaa;
- delay(t);
- }
- }
- void main()
- {
- uchar i;
- while(1)
- {
- zg(100,1); //兩邊逐個亮
- lbzgm(100,1); //兩邊逐個滅
- jgs(300,10);
- djs(100,20); //對角閃
- ////////////////////////////////////////////
- P1=P2=P3=0x00;
- for(i=0;i<3;i++)
- {
- P0=0xff;delay(800);
- P0=0x00;delay(800);
- }
- P0=0xff;
- for(i=0;i<3;i++)
- {
- P1=0xff;delay(800);
- P1=0x00;delay(800);
- }
- P1=0xff;
- for(i=0;i<3;i++)
- {
- P2=0xff;delay(800);
- P2=0x00;delay(800);
- }
- P2=0xff;
- for(i=0;i<3;i++)
- {
- P3=0xff;delay(800);
- P3=0x00;delay(800);
- }
- P3=0xff;
- qs(500,3);
- /////////////////////////////////////////////
- for(i=0;i<6;i++)
- {
- zgxh(50,1);
- nszgm(50,1);
- }
- djs(100,20); //對角閃
- for(i=0;i<3;i++)
- {
- zg(100,1); //兩邊逐個亮
- lbzgm(100,1); //兩邊逐個滅
- }
- qs(200,10);djs(100,50);
- for(i=0;i<5;i++)
- {
- sztl(200,1); //順時逐個同步亮
- nztm(200,1);
- nztl(200,1);
- sztm(200,1); //順時逐個同步滅
- }
- djs(300,10); //對角閃
- nzdgl(300,10); //逆時逐段一個點亮
- jgs(300,10); //間隔閃
- for(i=0;i<3;i++)
- {
- zgxh(100,1);
- nszgm(100,1);
- }
- nzdl(200,3); //逆時逐段亮
- jgs(50,100); //間隔閃
- nzdgl(50,40); //逆時逐段一個點亮
- for(i=0;i<4;i++)
- {
- zg(100,1);qs(100,10);
- lbzgm(100,1);
- }
- // djs(50,100); //對角閃
- for(i=0;i<3;i++)
- {
- zgxh(100,1);
- nszgm(100,1);
- }
- djs(1000,10);
- for(i=0;i<10;i++)
- {
- hwzjl(200,1); //橫往中間亮
- hwzjm(200,1); //橫往中間滅
- }
- djs(300,10); //對角閃
- for(i=0;i<5;i++)
- {
- zgxh(100,1);
- nszgm(100,1);
- }
- djs(100,20); //對角閃
- zg(300,1);
- lbzgm(300,1);
- for(i=0;i<5;i++)
- {
- sztl(200,1); //順時逐個同步亮
- nztm(200,1);
- nztl(200,1);
- sztm(200,1); //順時逐個同步滅
- }
- djs(500,20); //對角閃
- djs(100,30); //對角閃
- djs(50,50); //對角閃
- // djs(10,100); //對角閃
- delay(1000);
- }
-
- }
- void delay(uint t)
- {
- uint x,y;
- for (x=t;x>0;x--)
- {
- for (y=120;y>0;y--);
- }
- }
復(fù)制代碼
|