基于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 字(可选)
资料获取请观看前面演示视频!
点赞分享一起学习成长。