显示-光电 > 详情

led点阵的引脚及应用

发布时间:2023-11-20 发布时间:
|

led点阵的引脚

led点阵的引脚图如下:

测量方法:用能把LED点亮的万用表量,大多数的数字万用表可以点亮LED,只是非常暗淡,有些用两只1.5V电池的指针万用表可以把LED点得很亮,只用一个1.5V电池的指针万用表不能点亮LED,其实最简单的方法是用5V电源,串个1K电阻,就可以判断清楚LED点阵。也可以用数字表中的二极管档,直接测结压降,通常正向时,结压降会有显示(此时LED可能会被点亮),反向时,结压降基本上是无穷大(万用表测不出来),这种点阵一般是8X8矩阵。

led点阵的应用

led点阵的应用

1、在8X8LED点阵上显示柱形,让其先从左到右平滑移动三次,其次从右到左平滑移动三次,再次从上到下平滑移动三次,最后从下到上平滑移动三次,如此循环下去。

分析:此任务是比较简单的,最基础的LED点阵显示应用。只需设置显示的起始地址(即起始状态),列出LED行扫描、列扫描的顺序输出,再设置一个延时即可循环显示。

源程序:

#include《AT89X52.H》

unsignedcharcodetaba[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//行扫描显示编码

unsignedcharcodetabb[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//列扫描显示编码

voiddelay(void)//设置延时

{

unsignedchari,j;

for(i=10;i》0;i--)

for(j=248;j》0;j--);

}

voiddelay1(void)

{

unsignedchari,j,k;

for(k=10;k》0;k--)

for(i=20;i》0;i--)

for(j=248;j》0;j--);

}

voidmain(void)

{

unsignedchari,j;

while(1)

{

for(j=0;j《3;j++)//从左向右三次

{

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

{

P3=taba;

P1=0xff;

delay1();

}

}

for(j=0;j《3;j++)//从右向左三次

{

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

{

P3=taba[7-i];

P1=0xff;

delay1();

}

}

for(j=0;j《3;j++)//从上向下三次

{

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

{

P3=0x00;

P1=tabb[7-i];

delay1();

}

}

for(j=0;j《3;j++)//从下向上三次

{

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

{

P3=0x00;

P1=tabb;

delay1();

}

}

}

}

2、数字0-9点阵循环显示

分析:重点是数字0-9点阵显示代码的形成:

如下图所示,假设显示数字“0”

12345678

00003E4141413E00

因此,形成的列代码为00H,00H,3EH,41H,41H,3EH,00H,00H;只要把这些代码分别送到相应的列线上面,即可实现“0”的数字显示。

同理,其他数字的显示代码可以由上可得。

实验程序框图:


源程序

#include《AT89X52.H》

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

unsignedcharcodedigittab[10][8]={{0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00},//0

{0x00,0x00,0x00,0x00,0x21,0x7f,0x01,0x00},//1

{0x00,0x00,0x27,0x45,0x45,0x45,0x39,0x00},//2

{0x00,0x00,0x22,0x49,0x49,0x49,0x36,0x00},//3

{0x00,0x00,0x0c,0x14,0x24,0x7f,0x04,0x00},//4

{0x00,0x00,0x72,0x51,0x51,0x51,0x4e,0x00},//5

{0x00,0x00,0x3e,0x49,0x49,0x49,0x26,0x00},//6

{0x00,0x00,0x40,0x40,0x40,0x4f,0x70,0x00},//7

{0x00,0x00,0x36,0x49,0x49,0x49,0x36,0x00},//8

{0x00,0x00,0x32,0x49,0x49,0x49,0x3e,0x00}//9

};

unsignedintTImecount;

unsignedcharcnta;

unsignedcharcntb;

voidmain(void)

{

TMOD=0x01;//启用定时器方式1

TH0=(65536-3000)/256;//定时3ms

TL0=(65536-3000)%256;

TR0=1;

ET0=1;

EA=1;

while(1)

{;

}

}

voidt0(void)interrupt1using0

{

TH0=(65536-3000)/256;

TL0=(65536-3000)%256;

P3=tab[cnta];

P1=digittab[cntb][cnta];

cnta++;

if(cnta==8)

{

cnta=0;

}

TImecount++;

if(TImecount==333)

{

TImecount=0;

cntb++;

if(cntb==10)

{

cntb=0;

}

}

}
 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
LCD与LED有什么不同?显示原理来分析