8X8 LED点阵显示原理与编程技术
1
.实验任务
在8X8 LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到 左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,女口 此循环下去。
2. 实验目的
掌握用单片机I/O 口进行LED点阵扫描显示。
3. 实验工具
PROTEUS6.9, Keil uVisio n2 软件
4. 原理图
5. 相关知识
1) LED点阵
八十年代以来出现了组合型IED点阵显示器,以发光二极管为像素,它用高 亮度发光二极管芯阵列组合后,环氧树脂和塑模封装而成。具有高亮度、功耗低、 引脚少、视角大、寿命长、耐湿、耐冷热、耐腐蚀等特点。点阵显示器有单色和 双色两类,可显示红,黄,绿,橙等。 LED点阵有4X 4、4X 8、5X 7、5X & 8
X & 16X 16、24X 24、40X 40 等多种;
根据像素的数目分为等,双基色、三基色等,根据像素颜色的不同所显示的 文字、图象等内容的颜色也不同,单基色点阵只能显示固定色彩如红、绿、黄等 单色,双基色和三基色点阵显示内容的颜色由像素内不同颜色发光二极管点亮组 合方式决定,如红绿都亮时可显示黄色,如果按照脉冲方式控制二极管的点亮时 间,则可实现256或更高级灰度显示,即可实现真彩色显示。图 1--5示出几种 LED点阵显示器的内部电路结构和外型规格, 其它型号点阵的结构与引脚可试验
获得。
2) LED点阵扫描驱动方案:
由LED点阵显示器的内部结构可知,器件宜采用动态扫描驱动方式工作,由 于見珈乩工柞膏
hnp: WTieKiinrcortvjianc aLlic ng
oooGofrc -0
口 c-d
LED管芯大多为高亮度型,因此某行或某列的单体LED驱动电流可选用窄脉冲, 但其平均电流应限制在20mA内.多数点阵显示器的单体LED的正向压降约在2V 左右•但大亮点为10的点阵显示器单体LED的正向压降约为6V。
大屏幕显示系统一般是将由多个LED点阵组成的小模块以搭积木的方式组合 而成的,每一个小模块都有自己的独立的控制系统, 组合在一起后只要引入一个 总控制器控制各模块的命令和数据即可, 这种方法既简单而且具有易展、 易维修 的特点。
3) LED点阵显示系统中各模块的显示方式:
有静态和动态显示两种。静态显示原理简单、控制方便,但硬件接线复杂, 在实际应用中一般采用动态显示方式, 动态显示采用扫描的方式工作, 由峰值较 大的窄脉冲驱动, 从上到下逐次不断地对显示屏的各行进行选通, 同时又向各列 送出表示图形或文字信息的脉冲信号, 反复循环以上操作, 就可显示各种图形或 文字信息。
LED点阵显示器单块使用时,既可代替数码管显示数字,也可显示各种中西 文字及符号•如5 x 7点阵显示器用于显示西文字母.5X 8点阵显示器用于显 示中西文, 8 x 8 点阵用于显示中文文字,也可用于图形显示。用多块点阵显示 器组合则可构成大屏幕显示器,但这类实用装置常通过微机或单片机控制驱动。
8X8点阵LED工作原理说明
8X8点阵LED结构如下图所示
从图中可以看出,8X8点阵共需要64个发光二极管组成,且每个发光二极管 是放置在行线和列线的交叉点上,当对应的某一列置 1 电平,某一行置 0电平, 则相应的二极管就亮;因此要实现一根柱形的亮法,如图 49 所示,对应的一列 为一根竖柱,或者对应的一行为一根横柱,因此实现柱的亮的方法如下所述:
一根竖柱:对应的列置 1,而行则采用扫描的方法来实现。
一根横柱:对应的行置 0,而列则采用扫描的方法来实现。
■iL 门川 匸作 idittp: liexun. con/ jiancailiong
6. C语言源程序
#in elude
taba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsigned char code
tabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/*void delay(void)
{
un sig ned char i,j; for(i=10;i>0;i--) for(j=248;j>0;j--);
}*/ void delay1(void)
unsigned char i,j,k;
for(k=10;k>0;k--)
for(i=20;i>0;i--) for(j=248;j>0;j--);
}
void main(void)
{ z
3
4
5
6
7
s
800000000
7OOO0O0CO
600000000
68OOOCC
4。cm
「口创lllAsld t
oooooooo
ooooooooAb
oooooooo OOOOOOOQ
ooo X
nnnn
unsigned char i,j;
while(1)
{
for(j=0;j<3;j++)//from left to right 3 time
{
for(i=0;i<8;i++)
{
P2=taba[i];
P0=0xff;
delay1();
}
}
for(j=0;j<3;j++)//from right to left 3 time
{
for(i=0;i<8;i++)
{
P2=taba[7-i];
P0=0xff;
delay1();
}
}
for(j=0;j<3;j++)//from top to bottom 3 time
{
for(i=0;i<8;i++)
{
P2=0x00;
P0=tabb[7-i];
delay1();
}
}
for(j=0;j<3;j++)//from bottom to top 3 time
{
for(i=0;i<8;i++)
{
P2=0x00;P0=tabb[i]; delay1();