16x16点阵广告牌.docx
- 文档编号:5399249
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:21
- 大小:417.35KB
16x16点阵广告牌.docx
《16x16点阵广告牌.docx》由会员分享,可在线阅读,更多相关《16x16点阵广告牌.docx(21页珍藏版)》请在冰点文库上搜索。
16x16点阵广告牌
LED点阵广告牌的设计
摘要:
目前,由于LED显示屏可以显示变化的数字、文字、图形图像;不仅可以用于室环境还可以用于室外环境,具有投影仪、电视墙、液晶显示屏无法比拟的优点,所以市面上已经存在许多由LED点阵扩展的多款应用,LED的发展前景极为广阔,目前正朝着更高亮度、更高耐气候性、更高的发光密度、更高的发光均匀性,可靠性、全色化方向发展。
本文所介绍的作品并不难实现,重要是详细介绍LED点阵的工作原理与硬件,从而细化相关专业知识。
关键词:
点阵,单片机,74HC595芯片
一、设计目的与要求
1.设计一款能够显示不同字符的LED点阵广告牌;
2.设计不同的字符切换效果(如闪烁,静止,平移等);
3.设计控制按钮,可以在不同的效果间切换。
二、所用元器件介绍
1.元器件清单
元器件
数量
8x8点阵M2882SYGWA/S530-E2
4
74HC595
4
最小系统板
一块
三极管
16
1K电阻
16
导线
若干
2.主要元器件介绍
(1)点阵
单独的一个点阵实际上就是64个单独的led灯排列为8行8列,点阵显示字符都是动态的,和多位的数码管一样,并不是一次就显示行或列,而是一次只显示1行,在很短的时间将8行分别显示出来。
由于时间很短,我们的眼睛是看不出来是分开显示的。
本设计采用的是型号为M2882SYGWA/S530-E2,以下是单个8x8的部图
由上图可知,单个点阵的部连线图的行与列并不是按照管脚排列顺序而依次排列的,所以在硬件焊接之前需要清楚了解各点阵管脚所相对应控制的行与列,再画出相应的原理图,以下是相应4个8x8点阵(即16x16点阵)的原理图,其中L1—L16是列,H1—H16是行,在硬件焊接中,相对应的一样行列管脚要连在一起进行统一外接。
其工作原理是LED阵列采用共阳的接法可以看出8X8点阵共需要64个发光二极管组成且每个发光二极管是放置在行线和列线的交叉点上。
要实现显示图形或字体只需考虑其显示方式通过编程控制各显示点对应LED阳极和阴极端的电平就可以有效的控制各显示点的亮灭。
当采用按行扫描按列控制的8X8点阵驱动方式时,LED显示屏8行的同名列共用一套列驱动器。
行驱动器一行的行线连接到电源的一端列驱动器一列的列线连接到电源的另一端。
应用时还应在各条行线或列线上接上限流电阻。
扫描中控制电路将行线的1到8轮流接通高电位使连接到各该行的全部LED器件接通正电源,但具体是哪一个LED导通还要看它的负电源是否接通,而这就是列控制的任务了。
当对应的某一列置0电平,则相应的二极管就亮反之则不亮。
如果想使屏幕左上角LED点亮左下角LED熄灭的话在扫描到第一行时第一列的电位就应该为低而扫描到第八行时第一列的电位就应该为高。
这样行线上一行一行的轮流导通列线上进行通断控制实现了行扫描列控制的驱动方式。
(2)74HC595芯片
A.芯片特点
8位串行输入/输出或者并行输出移位寄存器,具有高阻关断状态。
其特点是8位串行输入8位串行或并行输出,存储状态寄存器具备三种状态,而输出寄存器可以直接清除100MHz的移位频率,其输出能力是并行输出,总线驱动;串行输出;标准中等规模集成电路
B.74HC595引脚说明
GND-8串行数据输出,SRCLR-10主复位低电平,SRCLK-11移位寄存时钟输入,RCLK-12存储寄存时钟输入,CE-13输出有效低电平,SER-14串行数据输入,VCC-16电源。
移位后的各位信号出现在各移位寄存器的输出端,也就是输出锁存器的输入端。
RCK是输出锁存器的打入信号,其上升沿将移位寄存器的输出打入输出锁存器。
引脚G是输出三态门的开放信号只有当其为低时锁存器的输出才开放否则为高组态。
SCLR信号是移位寄存器清零输入端,当其为低时移位寄存器的输出全部为零。
由于SCK和RCK两个信号是互相独立的所以能够做到输入串行移位与输出锁存互不干扰。
芯片的输出端为QAQH,最高位QH可作为多片74HC595级联应用时向上一级的级联输出。
但因为QH受输出锁存器的打入控制,所以还从输出锁存器前引出QH,作为与移位寄存器完全同步的级联输出。
将4片74HC595进行级连可共用一个移位时钟SCK与数据锁存信号RCK。
这样当第一行需要显示的数据经过8x8=64个SCK时钟后便可将其全部移入74HC595中,此时还将产生一个数据锁存信号RCK将数据锁存在74HC595中,并在使能信号G的作用下使串入数据并行输出,从而使与各输出位对应的场驱动管处于放大或截止状态,同时由行扫描控制电路产生信号使第一行扫描管导通,相当于第一行LED的正端都接高,显然第一行LED管的亮灭就取决于74HC595中的锁存信号。
此外,在第一行LED管点亮的同时,再在74HC595中移入第二行需要显示的数据随后将其锁存同时由行扫描控制电路,将第一行扫描管关闭而接通第二行,使第二行LED管点亮。
以此类推,当第十六行扫描过后再回到第一行,这样只要扫描速度足够高就可形成一幅完整的文字或图像。
以下是74HC595在本次设计中的原理图。
(1)连接列的两个74HC595原理图
(2)通过三极管放大,1K电阻限流连接行的两个74HC595原理图
以上就是16×16点阵LED电子显示屏系统硬件部分的各功能模块分述,经过合理的设计论证后,就可以整体结合在一起。
再根据设计配备好各元器件实物,通过组装后,在单片机的程序存储器里放入编制好的程序即可成为一个完
整的应用系统。
上图是整个设计的原理图,里面已经清楚地注明各线接口与其连接去向,从图中我们可以清晰地了解整个设计作品的部结构,进而更全面地掌握16x16LED点阵广告牌的硬件原理。
三、成品实图
1.正面
2.背面
四、软件流程图
五、源程序清单
#include"send_LCDarray_data.h"
#include"delay.h"
/*显示汉字“二”*/
ucharcodetable_Hh8[]=
{
0xFF,0xFF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0xDF,0x9F,0xDF,0xFF,0xFF,0xFF
};
ucharcodetable_Hl8[]=
{
0xFF,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xF7,0xE7,0xF7,0xFF
};
/*显示汉字“三”*/
ucharcodetable1_HH8[]=
{
0xFF,0xDF,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xDE,0xDF,0xFF,0xFF
};
ucharcodetable1_HL8[]=
{
0xFF,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFB,0xFF
};
/*用于消余晖*/
ucharcodetable_Lh8[]=
{
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
};
ucharcodetable_Ll8[]=
{
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe
};
ucharcodeRtable1[]={0xFF,0xF7,0xFF,0xF7,0xE0,0x37,0x6D,0xB7,0xAD,0xB7,0xCD,0xB7,0xED,0xB7,0xE0,0x00,
0xED,0xB7,0xCD,0xB7,0xAD,0xB7,0x6D,0xB7,0xE0,0x37,0xFF,0xF7,0xFF,0xF7,0xFF,0xFF};/*"单",0*/
ucharcodeRtable2[]={0xFF,0xFF,0xFF,0xFE,0xFF,0xF9,0x80,0x07,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,0xFB,0xBF,
0xFB,0xBF,0x03,0xBF,0xFB,0x80,0xFB,0xFF,0xFB,0xFF,0xFB,0xFF,0xFF,0xFF,0xFF,0xFF};/*"片",1*/
ucharcodeRtable3[]={0xF7,0xDF,0xF7,0x3F,0xF4,0xFF,0x00,0x00,0xF6,0xFF,0xF7,0x3E,0xFF,0xF9,0x80,0x07,
0xBF,0xFF,0xBF,0xFF,0xBF,0xFF,0x80,0x03,0xFF,0xFD,0xFF,0xFD,0xFF,0xE1,0xFF,0xFF};/*"机",2*/
ucharcodeRLtable[]={0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0xfe,0xff,
0xff,0x7f,0xff,0xbf,0xff,0xdf,0xff,0xef,0xff,0xf7,0xff,0xfb,0xff,0xfd,0xff,0xfe};//右移列扫描端
ucharcodeRempty[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//清屏显示
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
ucharcodeLupdown1[]={0xEF,0xEF,0xF7,0xDF,0xFB,0xBF,0xC0,0x07,0xDE,0xF7,0xDE,0xF7,0xC0,0x07,0xDE,0xF7,
0xDE,0xF7,0xC0,0x07,0xFE,0xFF,0xFE,0xFF,0x00,0x01,0xFE,0xFF,0xFE,0xFF,0xFE,0xFF};/*"单",0*/
ucharcodeLupdown2[]={0xFF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xEF,0xBF,0xE0,0x03,0xEF,0xFF,0xEF,0xFF,
0xEF,0xFF,0xE0,0x1F,0xEF,0xDF,0xEF,0xDF,0xEF,0xDF,0xDF,0xDF,0xDF,0xDF,0xBF,0xDF};/*"片",1*/
ucharcodeLupdown3[]={0xEF,0xFF,0xEE,0x0F,0xEE,0xEF,0xEE,0xEF,0x02,0xEF,0xEE,0xEF,0xCE,0xEF,0xC6,0xEF,
0xAA,0xEF,0xAA,0xEF,0x6E,0xEF,0xEE,0xED,0xEE,0xED,0xED,0xED,0xED,0xF1,0xEB,0xFF};/*"机",2*/
uintflag=0;
uchara=0,b=0,c=0;
voidsend_data1(uchardat)
{
ucharj,temp1,temp2;
RCK=0;
temp1=table_Hh8[dat];
temp2=table_Lh8[dat];
for(j=0;j<8;j++)
{
SCK=0;
DS1=temp1&0x80;
DS2=temp2&0x80;
temp2<<=1;
temp1<<=1;
SCK=1;
}
temp1=table_Hl8[dat];
temp2=table_Ll8[dat];
for(j=0;j<8;j++)
{
SCK=0;
DS1=temp1&0x80;
DS2=temp2&0x80;
temp2<<=1;
temp1<<=1;
SCK=1;
}
RCK=1;
}
voidsend_data2(uchardat)
{
ucharj,temp1,temp2;
RCK=0;
temp1=table1_HH8[dat];
temp2=table_Lh8[dat];
for(j=0;j<8;j++)
{
SCK=0;
DS1=temp1&0x80;
DS2=temp2&0x80;
temp2<<=1;
temp1<<=1;
SCK=1;
}
temp1=table1_HL8[dat];
temp2=table_Ll8[dat];
for(j=0;j<8;j++)
{
SCK=0;
DS1=temp1&0x80;
DS2=temp2&0x80;
temp2<<=1;
temp1<<=1;
SCK=1;
}
RCK=1;
}
voidSendlight(void)
{
uchari;
while
(1)
{
OE=1;
for(i=0;i<16;i++)
{
OE=1;
send_data2(i);
OE=0;
delay
(1);
}
delay(70);
for(i=0;i<16;i++)
{
OE=1;
send_data2(i);
OE=0;
delay
(1);
}
delay(80);
if(flag>=400)
{
flag=0;
break;
}
}
}
voidSendword(void)
{
uchari;
while
(1)
{
OE=1;
for(i=0;i<16;i++)
{
OE=1;
send_data1(i);
OE=0;
delay
(1);
}
if(flag>=400)
{
flag=0;
break;
}
}
}
voidSendwyk(void)
{
/*------------------显示“单片机”左移----------------*/
sendWordL(Rempty,Rtable1,RLtable);
sendWordL(Rtable1,Rtable2,RLtable);
sendWordL(Rtable2,Rtable3,RLtable);
sendWordL(Rtable3,Rempty,RLtable);
/*--------------------------右移--------------------------------*/
sendWordR(Rempty,Rtable1,RLtable);
sendWordR(Rtable1,Rtable2,RLtable);
sendWordR(Rtable2,Rtable3,RLtable);
sendWordR(Rtable3,Rempty,RLtable);
}
voiddishi_init()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
}
voidmain()
{
dishi_init();
while
(1)
{
if(KEY0==0)
{
delay(10);
if(KEY0==0)
{
Sendlight();
}
}
if(KEY1==0)
{
delay(10);
if(KEY1==0)
{
Sendword();
}
}
if(KEY2==0)
{
Sendwyk();
}
}
}
voidser()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
flag++;
}
**
#include"delay.h"
voiddelay(unsignedintz)
{
unsignedintx,y;
for(x=0;x for(y=0;y<110;y++); } ** #include"send_LCDarray_data.h" #include"delay.h" /*-------------------16*16LED点阵屏方向移动显示驱动----------------*/ /*-----------------------给595送16位字节函数----------------------*/ voidsendData(ucharHdata,ucharLdata,ucharH,ucharL) { ucharj; RCK=0; for(j=0;j<8;j++) { SCK=0; DS1=Hdata&0x80; DS2=H&0x80; Hdata<<=1; H<<=1; SCK=1; } for(j=0;j<8;j++) { SCK=0; DS1=Ldata&0x80; DS2=L&0x80; Ldata<<=1; L<<=1; SCK=1; } RCK=1; } /*------------------------字符显示右移函数-------------------------*/ voidsendWordR(uchar*former_word,uchar*later_word,uchar*lie) { ucharj,k,tempH,tempL,lieH,lieL,i; for(j=0;j<16;j++) { i=10; while(i-)//循环显示10次,使其显示停留时间长一点 { for(k=0;k { OE=1; tempH=later_word[30-2*k];//传入第一个字高位数据 tempL=later_word[31-2*k];//传入第二个字低位数据 lieH=lie[2*(j-k)]; lieL=lie[2*(j-k)+1]; sendData(tempH,tempL,lieH,lieL); OE=0; delay (1); } for(k=0;k<15-j;k++) { OE=1; tempH=former_word[2*k];//传入第二个字高位数据 tempL=former_word[2*k+1];//传入第二个字低位数据 lieH=lie[2*(j+1+k)]; lieL=lie[2*(j+1+k)+1]; sendData(tempH,tempL,lieH,lieL); OE=0; delay (1); } } } } /*------------------------字符显示左移函数-------------------------*/ voidsendWordL(uchar*former_word,uchar*later_word,uchar*lie) { ucharj,k,tempH,tempL,lieH,lieL,i; for(j=0;j<16;j++) { i=10; while(i-)//循环显示10次,使其显示停留时间长一点 { for(k=0;k { OE=1; tempH=later_word[2*k];//传入第一个字高位数据 tempL=later_word[2*k+1];//传入第二个字低位数据 lieH=lie[30-2*(j-k)]; lieL=lie[31-2*(j-k)]; sendData(tempH,tempL,lieH,lieL); OE=0; delay (1); } for(k=0;k<15-j;k++) { OE=1; tempH=former_word[2*(j+k+1)];//传入第二个字高位数据 tempL=former_word[2*(j+k+1)+1];//传入第二个字低位数据 lieH=lie[2*k]; lieL=lie[2*k+1]; sendData(tempH,tempL,lieH,lieL); OE=0; delay (1); } } } } 六、改进意见 本次设计由于焊接时点阵出现错误,所以导致后期需要多加模块进行纠正,所以以后还需在焊接前做好检查,减少工作量。 同时最终结果点阵的接触效果并不是很理想,下次焊接需加固,提高显示效果。 七、收获与体会 本次课程设计可谓感触良多,经过了近一个月的制作与调试,才把最终成品做出来,刚开始在硬件方面焊接还是比较顺利的,只是布线比较复杂,所以比较费时间。 但在后期发现有虚焊的显现,但这不是大问题,容易纠正。 主要是我在刚开始焊接的时候没有看清楚点阵引脚的位置,导致到最后测试发现是乱码的时候才知道每个点阵的引脚被我逆时针90度焊反了,导致后期需要再加多块纠正版,这在时间与精力上又浪费了很多。 而更严重的是后来发现纠正板也有错,所以最后只能通过排线引出各个引脚,最后才成功。 通过这次课程设计,我发现我的细心度并不够,这是在以后所急需改进的。 同时在软件方面我也攻克了许多难关,总体来讲,我还是比较满意本次课程设计的,也正是这次课程设计,才让我发现自身在硬件与软件方面的知识漏洞,这也使我在单片机的应用技术这一方面长进了不少! 参考文献: [1]格鲁德.《点阵LCD驱动显控原理V2.0》[M].科学,2009-03 [2]新强.《点阵LED驱动显控原理与实践》[M].航空航天大学,2010-03 [3]龙汉.《单片机原理与应用》[M].,2004-10 [4]万隆,巴奉丽《单片机原理与应用技术》[M].清华大学,2010-03 课程论文成绩评定表 指导老师评语: 成绩评定: 指导教师签名:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 16 x16 点阵 广告牌