缘缘学单片—经验手记——8、LED,点点滴滴全是爱

  • 缘缘
  • LV3工程师
  • |      2013-07-16 22:22:41
  • 浏览量 14806
  • 回复:140

LED变身记二——LED点阵初解!

     我们讲了几节的LED,这节讲什么呢,缘缘感觉还是再说说LED吧,听到这里,估计亲们会喷的,说:“你到底会不会啊,天天拿个LED来说事,对不起啊,因为缘缘喜欢玩LED的,缘缘在这里发誓,以后再不说LED,如果后面再说LED,那么缘缘……,还没想好呢,等想好了再说吧!

      跟着缘缘看了这么多的LED,是不是有点喜欢LED了呢,我们看看我们的LED在前面是怎么变形的:


 


      我们看到,一个LED变成了多个LED,多个LED经过重新的排列变成数码管,数码管再加几个,就变成了8位数码管,这一系列的变化,操作的方法就是把一个LED点亮或关闭的过程,那么,如果我们用8列这样的LED,关把它们整整齐齐地排列到一起,这样成了啥样子了?


 

 

       这就是LED点阵了,看起来是不是有点像前面说过的8位数码管的原理呢,其实,它们是排列不一样了,但显示原理是一样的,只不过变样了而已:

      那么它是怎么工作的呢,比如,让它显示一个固定的字母或是形状,这时,我们发现,决定这个的显示是行和列两种端口决定的,这种显示原理我们可以参照数码显示的原理,我们上节有个人视觉残留效应,如果我们利用这个效应,让它显示的速度足够快,这样是不是就能达到我们要显示的要求呢,我们一步步来看吧:

     

我们看到,当我们把所有的列都选通上电的时候,它们的每一行都显示的不一样,但所有的行不可能是同时显示的,这里,我们在人视觉残留效应的时间内先让第一行亮,依次地显示第二行——第8行,这样,就会达到我们的要求,显示出一个我们要求的字母来或是文字、图形来:

      是不是很好玩啊,那么我们如何去实现上述显示过程呢,那么就跟着缘缘一起来做个这样的实验块子,我们弄几个程序玩玩,在这之前,先了解一下它的显示处理,也称扫描方法:

点阵LED一般采用扫描式显示,实际运用分为三种方式:即点扫描、行扫描和列扫描了。

    若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即可。

    若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。
     看了这些,是不是想和缘缘一起玩玩LED点阵了,那就
跟着缘缘DIY吧:

      准备的材料:8针的排针2组,1针的一个(电源正极接口),LED点阵一块,电阻8个,三极管8个,单排插口一条(为了方便,转接LED点阵)。

先用以前说过的方法找到LED点阵的行与列的针脚端口,(列是正极,行是负极):

这是通过找到的LED点阵的针脚定义:

      在合适的地方放置好其它的元件并焊接,LED点阵的接脚要与LED点阵去测量的,按上面的针脚定义,在所有列的端口上面把电阻串连上,缘的LED点阵是大块子,所以缘选的电阻小一些,只有75欧。

把三极管也焊接到上面,所集电极全部接到一起,最后接到单独的那一根针上,发射极按到电阻上基极按上面的针脚定义,接到左边的那一组排针上,把剩下的没有接电阻的管脚依据上图的针脚定义,接到右边的排针上:

        焊接完成后,把LED插上,如下图,开始我们的激情实验吧:

好了,我们的实验板算是做好了,我们先看看我们的实验板能正常工作不,我们就把它所有的行与列全部打开,这里,我们定义P0为列,P2为行,我们写一个这样的测试程序:

结果发现我们的LED点阵全亮了:

为了验证是不是有错误,我们先把行定义为全开,把列逐条显示,怎么去显示这个列呢,我们记得以前用过数码管的位选代码,就用它吧:(延时中有个错误,后面是加号,缘缘写成了减号了

 

再把列固定全开了,让行逐条显示,只是把两个P口换一下,其它的保持不变哦:

当我们同时进行列与行的扫描时,我们发现,变成了一个个的点了,为了直观的感觉,我们就原用上面的代码:

当我们把延时弄的很小的时候,这些点就连成一条线了:

现在我们基本上明白了LED的三种工作方式,即行扫描,列扫描和点扫描,那么如何让它显示一个固定的形状呢,缘缘为了方便大家理解,我们就用其中的一种——行扫描来说明:

      前面我们固定了列的显示,即不管那一行显示,列的显示是一个数值,在列全开的情况下,我们看到的是一行行地显示:

如果我们减小延时,加快显示的速度,我们就看到了显示的是全部的LED,即整块的点阵全亮了:

明白了这点,那么我们看看之前的这个N是怎么显示的,我们用的是逐行扫描的方式,即第一行(1111 1110)打开的时候,我们让列的第一列全部显示(0000 0000)打开,换算成编码是:

列为:0x00;行为0xfe,这样,通过8次,就会把8条列与行配合显示完,扫描速度过快的话就变成了N的图形了,为了方便编码,我们找个这样的软件来——8*8点阵取模软件(软件上传到网盘了,地址在后面),如下图所示,因为行的编码我们用以前固定的,这里我们就用列的编码就行了:

为了达到视觉残留效应,我们把延时做到了500US显示一次,显示效果如下图:

通这这种方法,我们就会显示更多的东西来,如这个笑脸:

 

 

如A:

 

这样,我们就学会用LED点阵显示图形与字母或是数字了,亲们,你们懂了吗,那么下面的例程就交给亲们完成吧,很好弄的哦。

实验一:让LED点阵显示0—9这几个数字和26个英文字母

实验二:让LED点阵显示汉字

实验三:让LED点阵显示图形

综合实例:送给情人节的礼物

做这个例子,我们要弄个动态显示的,那么如何实现动太显示呢,我们要做一个表格函数,在表格函数的里面再做个子表格函数,方法如下:

这里我们看到有两个号,其中前面一个是指在这个表格函数下有多少个子函数,而后面的一个是指每个子函数有多少个值,如这个表格就是有18个了表格函数,每个子函数包含8个值,为了显示动态,我们让一个时间去定这个显示的东西,用另一个时间去定这个显示时的扫描值,这样就做成了动态的效果了,为了方便使用,不用延时函数,用的是列扫描哦,其程序如下:

 

#include< reg51.h >

unsigned char code tab={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,};  //列选通控制   


unsigned char code digittab={
{0xFF,0xC3,0xBD,0x7E,0x7E,0xBD,0xC3,0xFF},//0
{0xFF,0xFE,0xBE,0x7E,0x00,0xFE,0xFE,0xFF},//1
{0xFF,0xCC,0xBA,0x7A,0x76,0x76,0x8E,0xFF},//2
{0xFF,0xD9,0xBE,0xB6,0xB6,0xC9,0xFF,0xFF},//3
{0xFF,0xC7,0xB7,0x77,0x00,0xF7,0xF7,0xFF},//4
{0xFF,0x0D,0x6E,0x5E,0x5E,0x5D,0x63,0xFF},//5
{0xFF,0xC1,0xB6,0x6E,0x6E,0x76,0x99,0xFF},//6
{0xFF,0xBF,0xBF,0xB0,0xAF,0x9F,0xBF,0xFF},//7
{0xFF,0xC9,0xB6,0xB6,0xB6,0xC9,0xFF,0xFF},//8
{0xFF,0x9D,0x6E,0x6E,0x6E,0x81,0xFF,0xFF},//9
{0xC7,0x83,0x81,0xC0,0xC0,0x81,0x83,0xC7},//实心
{0xDF,0xBB,0xBD,0xDE,0xDE,0xBD,0xBB,0xDF},//笑脸
{0xDF,0xBB,0xBD,0xDE,0xDE,0xBD,0xBB,0xDF},//空心
{0xFF,0xC3,0xDB,0xDB,0x00,0xDB,0xDB,0xC3},//中
{0x00,0x7E,0x54,0x40,0x54,0x54,0x7A,0x00},//国
{0xFF,0x80,0xB6,0xB6,0xB6,0xB6,0x80,0xFF},//日
{0xFE,0xFD,0x03,0x57,0x55,0x56,0x01,0xFF},//月
{0xDD,0x88,0xD5,0xE3,0xD5,0x88,0xDD,0xFF},//图案
};

unsigned int timecount1 , timecount2;  //定义的变量

unsigned char cntx , cnty ;  //cntx列控制数的变量   cnty用来控制 字符与字符之间的切换

void main(void)
{
  cnty=0;
 
while(1)

{
   if(cnty<18)
  {
   
    P2=tab;  // 列线
    P0=digittab;   // 行线
  }
 

 //用于控制动态扫描的速度
  if(++timecount1>=50)
  {
    timecount1=0;
    if(++cntx>=8) cntx=0;
  }

 
 //用于控制动字符间的切换速度
  if(++timecount2>=60000)
  {
    timecount2=0;
    if(++cnty>=36)cnty=0;
  }

}

}

 

下载试试吧,程序很简单的,也是别人家的程序,我改了下自己处理的图形,完了想显示什么,就把那些子函数变了就行了,一定要记得在大括号后面加个小豆号哦,现在,用这个加上以前我们弄过的那个流水灯,用两块单片做个情人节的礼物肯定是不错的哦 ,如果谁现在做一个送给缘缘,缘缘决定嫁给他,但时间是下辈子……

      为了方便大家使用,缘缘将一些有关的单片机软件上传到网盘中,有需要的就去下载哦:http://pan.baidu.com/share/link?shareid=2202576570&uk=2248845538 

       


       对于LED基本上算是说完了,亲们,不知道你们会了没有,其实LED更大的延伸是光立方和LED点阵的屏幕广告或点阵墙,但不管怎么变化,它们都是以8*8的点阵为基础的,这里只要熟悉8*8的点阵就行了,以后的需要借助芯片才能完成,所以有机会再去讲解更复杂的运用,下一节我们看看两个常用的芯片吧。

 

 

      

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:127
2016大圣 2017-02-23
学习了,谢谢了!
0   回复
举报
发布
abc345 2016-12-25
谢谢分享
0   回复
举报
发布
石头 2016-12-22
讲的太棒了,我自己都可以独立开发了
0   回复
举报
发布
lanshou 2016-11-15
很好啊,赞一个
0   回复
举报
发布
wangkeqiang 2016-11-15
写的太详细了,真是新手必备啊!良心制作
0   回复
举报
发布
telo 2016-06-04
赞歌:D:D:D
0   回复
举报
发布
lennon 2016-06-03
支持,讲的明白易懂,这样学习单片机就容易多了
0   回复
举报
发布
SingleYork 2015-12-14
写的真的很详细……
0   回复
举报
发布
SingleYork 2015-12-14
这个可以有,哈哈……
0   回复
举报
发布
精风 2015-11-27
继续学习,好样的。
0   回复
举报
发布
查看更多
x
收藏成功!点击 我的收藏 查看收藏的全部帖子