编号:39
基于51单片机的16x16点阵广告牌设计
功能描述:
本设计由51单片机系统+4路74LS595++1路按键16*16点阵屏组成
1、主控采用89C52单片机
2、利用74LS595芯片驱动 16*16点阵模块显示
3、可实现汉字上移、下移、左移、右移显示,通按键进行切换状态。
4、默认显示汉字“我们毕业了”,可通过取模软件自行改字。
Proteus7.8以上版本均可使用
视频演示链接:
39、基于51单片机的16x16点阵广告牌设计
仿真图:
电路图:
实物图:
程序源码:
//主函数
void main()
{
EA=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
ET0=1;
TR0=1;
//595c初始化
Init595_l1();
Init595_l2();
Init595_c1();
Init595_c2();
//循环演示
while(1) //循环
{
if(flag==1)
{
for(k=0;k<5;k++) //更改k能改变速度
{
for(i=1;i<17;i++) //一个for循环,分别选中16个列
{
if(flag==1)
{
Write_byte595_l1(0xff);
Write_byte595_l2(0xff);
if(i<9)
{
Write_byte595_c1(a[i-1]);
Write_byte595_c2(0x00);
}
else
{
Write_byte595_c2(a[i-9]);
Write_byte595_c1(0x00);
}
Write_byte595_l1(H1[i*2-2+2*X]);
Write_byte595_l2(H1[i*2-1+2*X]); //显示内容
delay(7);
}
}
}
} //左移函数
if(flag==2)
{
for(k=0;k<5;k++)
{
for(i=1;i<17;i++) //一个for循环,分别选中16个列
{
if(flag==2)
{
Write_byte595_l1(0xff);
Write_byte595_l2(0xff);
if(i<9)
{
Write_byte595_c1(a[i-1]);
Write_byte595_c2(0x00);
}
else
{
Write_byte595_c2(a[i-9]);
Write_byte595_c1(0x00);
}
Write_byte595_l2(H2[i*2-1-2*X+32*(zishu+1)]); //32乘以要显示的汉字加1
Write_byte595_l1(H2[i*2-2-2*X+32*(zishu+1)]); //32乘以要显示的汉字加1
delay(7);
}
}
}
} //右移函数
if(flag==3)
{
for(k=0;k<5;k++)
{
for(i=1;i<17;i++) //一个for循环,分别选中16个列
{
if(flag==3)
{
Write_byte595_c1(0x00);
Write_byte595_c2(0x00);
if(i<9)
{
Write_byte595_l1(b[i-1]);
Write_byte595_l2(0xff);
}
else
{
Write_byte595_l2(b[i-9]);
Write_byte595_l1(0xff);
}
Write_byte595_c1(H3[i*2-2+2*X]);
Write_byte595_c2(H3[i*2-1+2*X]);
delay(7);
}
}
}
} // 上移函数
if(flag==4)
{
for(k=0;k<5;k++)
{
for(i=1;i<17;i++) //一个for循环,分别选中16个列
{
if(flag==4)
{
Write_byte595_c1(0x00);
Write_byte595_c2(0x00);
if(i<9)
{
Write_byte595_l1(b[i-1]);
Write_byte595_l2(0xff);
}
else
{
Write_byte595_l2(b[i-9]);
Write_byte595_l1(0xff);
}
Write_byte595_c1(H4[i*2-2-2*X+32*(zishu+1)]); //32乘以要显示的汉字加1
Write_byte595_c2(H4[i*2-1-2*X+32*(zishu+1)]); //32乘以要显示的汉字加1
delay(7);
}
}
}
} //下移函数
if(flag==5)
{
for(j=1;j<(zishu+2);j++) //字数+2(加1时是正好都显示,为了显示完显示一个空格,所以此处加2)
{
for(k=0;k<20;k++) //调速
{
for(i=1;i<17;i++) //一个for循环,分别选中16个列
{
if(flag==5)
{
Write_byte595_l1(0xff);
Write_byte595_l2(0xff);
if(i<9)
{
Write_byte595_c1(a[i-1]);
Write_byte595_c2(0x00);
}
else
{
Write_byte595_c2(a[i-9]);
Write_byte595_c1(0x00);
}
Write_byte595_l1(H1[i*2-2+0x20*j]);
Write_byte595_l2(H1[i*2-1+0x20*j]); //显示内容
delay(7);
}
}
} //逐次显示
Write_byte595_c1(0x00);
Write_byte595_c2(0x00);
Write_byte595_l1(0xff);
Write_byte595_l2(0xff);
delay(70);
}
}
X++; //显示左移
if(X==16+16*zishu) //16加16乘以要显示的汉字数
X=0; //从头开始
}
}