基于51单片机炫酷彩灯设计

基于51单片机炫酷彩灯设计

(仿真+程序)

功能介绍

具体功能:

1.一共64个LED组成矩阵;

2.四种花样循环,从第一排亮到最后一排,再从最后一排亮到第一排,从第一列亮到最后一列,再从最后一列亮到第一列;

3.按键可以控制开始/暂停;

添加图片注释,不超过 140 字(可选)

程序

#include <reg51.h> 
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int 
/***微信公众号:木子单片机********/
sbit p30=P3^0;//开始暂停
sbit p31=P3^1;
sbit p32=P3^2;
uchar j,l=1,ll=1,lll=1;

uchar p,f,x;

uchar code taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar code tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};


uchar code donghua2[17][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80}, 
{0x0,0x0,0x0,0x0,0x0,0x0,0x80,0xC0},
{0x0,0x0,0x0,0x0,0x0,0x80,0xC0,0xE0},
{0x0,0x0,0x0,0x0,0x80,0xC0,0xE0,0xF0},
{0x0,0x0,0x0,0x80,0xC0,0xE0,0xF0,0xF8},
{0x0,0x0,0x80,0xC0,0xE0,0xF0,0xF8,0xFC},
{0x0,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE},
{0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF},
{0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF}, 
{0xC0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF},
{0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF},
{0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF},
{0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF},
{0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
{0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
};
uchar code lie2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar code donghua3[32][8]={
{0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xC0}, 
{0x0,0x0,0x0,0x0,0x0,0x0,0xC0,0xC0},
{0x0,0x0,0x0,0x0,0x0,0xC0,0xC0,0xC0},
{0x0,0x0,0x0,0x0,0xC0,0xC0,0xC0,0xC0},
{0x0,0x0,0x0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0x0,0x0,0x0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0x0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xE0,0xE0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0}, 
{0xF0,0xF0,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xF8,0xF8,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xFC,0xFC,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xFE,0xFE,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xFF,0xFF,0xC0,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xFF,0xFF,0xC3,0xC0,0xC0,0xC0,0xC0,0xC0},
{0xFF,0xFF,0xC3,0xC3,0xC0,0xC0,0xC0,0xC0},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC0,0xC0,0xC0}, 
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC0,0xC0},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC0},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC3,0xC3},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xC7,0xC7},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xCF,0xCF},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xDF,0xDF},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xFF,0xFF},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xF3,0xFF,0xFF}, 
{0xFF,0xFF,0xC3,0xC3,0xF3,0xF3,0xFF,0xFF},
{0xFF,0xFF,0xC3,0xF3,0xF3,0xF3,0xFF,0xFF},
{0xFF,0xFF,0xF3,0xF3,0xF3,0xF3,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xF3,0xF3,0xF3,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xF3,0xF3,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xFF,0xF3,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
};
uchar code lie3[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar code donghua4[9][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0xFF}, 
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xFF,0xE7,0xE7,0xFF,0xFF,0xFF},
{0xFF,0xFF,0xC3,0xC3,0xC3,0xC3,0xFF,0xFF},
{0xFF,0x81,0x81,0x81,0x81,0x81,0x81,0xFF},

};
uchar code lie4[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

void display1();
void display2();
void display3();
void display4();

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

void main(void)

{	
		TMOD=0x11;	
		TH0=(65536-5000)/256;
		TL0=(65536-5000)%256;
		TH1=(65536-5000)/256;
		TL1=(65536-5000)%256;
		ET1=1;
		ET0=1;
		EA=1;
		while(1)
		{	
				
			while((!p30)&&(!p31))
			{
	         if(p==0)
			{	
			
			display1();					
			if(p30==0)
			p=1;
			}

			if(p==1)
			{	
			
				TR0=1;
				display2();
				TR0=0;

			if(l==4)
			p=2;
			}
			
			if(p==2)
			{	

				TR1=1;
				display3();
				TR1=0;

			if(ll==4)
			p=3;

			}

			if(p==3)
			{	

				TR0=1;

				display4();
				TR0=0;

				if(lll==4)
				p=0;

			}
			}
			while((!p30)&&(p31))
			{
			
				

	         if(p==0)
			{	
			
			display1();					

			}

			if(p==1)
			{	
			
				TR0=1;
				display2();
				TR0=0;


			}
			
			if(p==2)
			{	

				TR1=1;
				display3();
				TR1=0; 
			}

			if(p==3)
			{	

				TR0=1;

				display4();
				TR0=0;



			}
			}
						

        }
}

void time0() interrupt 1 
{
uchar tt;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
        tt++;
		if(tt==20)
		{
			j++;
			f++;
			tt=0;
			}
					if(j==17)
					{
						j=0;
						l++;
						if(l==5)
						l=0;
					}
					if(f==9)
					{
						f=0;
						lll++;
						if(lll==5)
						lll=0;
					}
}

void time1() interrupt 3 
{
uchar tt;

TH1=(65536-5000)/256;
TL1=(65536-5000)%256;
        tt++;
		if(tt==20)
		{
			x++;
			tt=0;
		}
					if(x==32)
					{
						x=0;
						ll++;
						if(ll==5)
						ll=0;
					}

}


void display1()
{
	
		uchar i,jj;

      for(jj=0;jj<2;jj++) //from left to right 3 time

        {

          for(i=0;i<8;i++)

            {
              P2=0xff;
              P1=taba[i];
			  while(p30)
			{
				P2=0XFF;
				P1=0X00;
			}
			while(!p32)
				{	
					p=1;
			   	}
              delay(100);
            }
        }
	  delay(100);
      for(jj=0;jj<2;jj++) //from right to left 3 time

        {

          for(i=0;i<8;i++)

            {
              P2=0xff;
              P1=taba[7-i];
			  while(p30)
			{
				P2=0XFF;
				P1=0X00;
			}
			while(!p32)
				{	
					p=1;
			   	}
              delay(100);
            }
        }
	  delay(100);
      for(jj=0;jj<2;jj++) //from top to bottom 3 time

        {

          for(i=0;i<8;i++)

            {
              P1=0x00;
              P2=tabb[7-i];
			  while(p30)
			{
				P2=0XFF;
				P1=0X00;
			}
			while(!p32)
				{	
					p=1;
			   	}
              delay(100);
            }
        }
	  delay(100);
      for(jj=0;jj<2;jj++) //from bottom to top 3 time

        {
          for(i=0;i<8;i++)
            {
              P1=0x00;
              P2=tabb[i];
			  while(p30)
			{
				P2=0XFF;
				P1=0X00;
			}
			while(!p32)
				{	
					p=1;
			   	}
              delay(100);
            }
        }
	delay(100);
	
}

void display2()
{
	uchar i,m;	
			if((l==1)||(l==3))
			{
			for(i=0;i<8;i++)
			{	
				
				P2=donghua2[j][i];
				P1=lie2[i];
				while(p30)
			{
				P2=0XFF;
				P1=0X00;
				TR0=0;
			}
			while(!p32)
				{	
					p=2;
			   	}
				delay(1);
			}
			}
			if((l==0)||(l==2))
			{
			for(m=0;m<8;m++)
			{
				
				P2=donghua2[16-j][m];
				P1=lie2[m];
				while(p30)
			{
				P2=0XFF;
				P1=0X00;
				TR0=0;
			}
			while(!p32)
				{	
					p=2;
			   	}
				delay(1);
			}

			}
	

}


void display3()
{
	uchar i,m;	
			if((ll==1)||(ll==3))
			{
			for(i=0;i<8;i++)
			{	
				
				P2=donghua3[x][i];
				P1=lie3[i];
				while(p30)
			{
				P2=0XFF;
				P1=0X00;
				TR1=0;
			}
			while(!p32)
				{	
					p=3;
			   	}
				delay(1);
			}
			}
			if((ll==0)||(ll==2))
			{
			for(m=0;m<8;m++)
			{
				
				P2=donghua3[31-x][m];
				P1=lie3[m];
				while(p30)
			{
				P2=0XFF;
				P1=0X00;
				TR1=0;
			}
			while(!p32)
				{	
					p=3;
			   	}
				delay(1);
			}

			}

}

void display4()
{
	uchar i,m;	
			if((lll==1)||(lll==3))
			{
			for(i=0;i<8;i++)
			{	
				
				P2=donghua4[f][i];
				P1=lie4[i];
				while(p30)
			{
				P2=0XFF;
				P1=0X00;
				TR0=0;
			}
			while(!p32)
				{	
					p=0;
			   	}
				delay(1);
			}
			}
			if((lll==0)||(lll==2))
			{
			for(m=0;m<8;m++)
			{
				
				P2=donghua4[8-f][m];
				P1=lie4[m];
				while(p30)  
			{
				P2=0XFF;
				P1=0X00;
				TR0=0;
			}
			while(!p32)
				{	
					p=0;
			   	}
				delay(1);
			}

}
}

硬件设计

使用元器件:

单片机:AT89C51;

(注意:单片机是通用的,无论51还是52、无论stc还是at都一样,引脚功能都一样。程序也是一样的。)

设计资料

01仿真图

本设计使用proteus8.9版本设计!具体如图!

添加图片注释,不超过 140 字(可选)

02程序

本设计使用软件keil5版本编程设计!具体如图!

添加图片注释,不超过 140 字(可选)

03设计资料

        资料获取请关注同名公众号,全部资料包括程序(含注释)、仿真源文件等。具体内容如下,全网最全!!

添加图片注释,不超过 140 字(可选)

资料获取请观看前面演示视频!

点赞分享一起学习成长。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值