七(3)LED点阵的介绍

  点阵 LED 显示屏作为一种现代电子媒体,具有灵活的显示面积(可任意分割和拼装)、高亮度、长寿命、数字化、实时性等特点,应用非常广泛。 

  前边学了 LED 小灯和 LED 数码管后,学 LED 点阵就要轻松得多了。一个数码管是 8 个LED 组成,同理,一个 8*8 的点阵就是由 64 个 LED 小灯组成。图 7-1 就是一个点阵 LED 最小单元,即一个 8*8 的点阵 LED,图 7-2 是它的内部结构原理图。 

                                                                 

  从图 7-2 上可以看出,其实点阵 LED 点亮原理还是很简单的。在图中大方框外侧的就是点阵 LED 的引脚号,左侧的 8 个引脚是接的内部 LED 的阳极,上侧的 8 个引脚接的是内部LED 的阴极。那么如果我们把 9 脚置成高电平、13 脚置成低电平的话,左上角的那个 LED小灯就会亮了。下面我们就用程序来实现一下,特别注意,控制点阵左侧引脚的 74HC138是原理图上的 U4,8 个引脚自上而下依次由 U4 的 Y0~Y7 输出来控制。

 
  1. #include <reg52.h>  
  2.   
  3. sbit LED = P0^0;  
  4. sbit ADDR0 = P1^0;  
  5. sbit ADDR1 = P1^1;  
  6. sbit ADDR2 = P1^2;  
  7. sbit ADDR3 = P1^3;  
  8. sbit ENLED = P1^4;  
  9.   
  10. void main(){  
  11.     ENLED = 0;  //U3、U4 两片 74HC138 总使能  
  12.     ADDR3 = 0;  //使能 U4 使之正常输出  
  13.     ADDR2 = 0;  //经 U4 的 Y0 输出开启三极管 Q10  
  14.     ADDR1 = 0;  
  15.     ADDR0 = 0;  
  16.     LED = 0;  //向 P0.0 写入 0 来点亮左上角的一个点  
  17.     while(1);  //程序停止在这里  
  18. }   

  那么同样的方法,通过对 P0 的整体赋值我们可以一次点亮点阵的一行,那么这次我们用程序来点亮点阵的第二行,对应的就需要编号 U4 的 74HC138 在其 Y1 引脚输出低电平了。

 
  1. #include <reg52.h>  
  2.   
  3. sbit ADDR0 = P1^0;  
  4. sbit ADDR1 = P1^1;  
  5. sbit ADDR2 = P1^2;  
  6. sbit ADDR3 = P1^3;  
  7. sbit ENLED = P1^4;  
  8.   
  9. void main(){  
  10.     ENLED = 0;  //U3、U4 两片 74HC138 总使能  
  11.     ADDR3 = 0;  //使能 U4 使之正常输出  
  12.     ADDR2 = 0;  //经 U4 的 Y1 输出开启三极管 Q11  
  13.     ADDR1 = 0;  
  14.     ADDR0 = 1;  
  15.     P0 = 0x00;  //向 P0 写入 0 来点亮一行  
  16.     while(1);  //程序停止在这里  
  17. }  

   从这里我们可以逐步发现点阵的控制原理了。我们前面讲了一个数码管就是 8 个 LED 小灯,一个点阵是 64 个 LED 小灯。同样的道理,我们还可以把一个点阵理解成是 8 个数码管。经过前面的学习已经掌握了 6 个数码管同时显示的方法,那 8 个数码管也应该轻轻松松了。下面我们就利用定时器中断和数码管动态显示的原理来把这个点阵全部点亮。

 
  1. #include <reg52.h>  
  2.   
  3. sbit ADDR0 = P1^0;  
  4. sbit ADDR1 = P1^1;  
  5. sbit ADDR2 = P1^2;  
  6. sbit ADDR3 = P1^3;  
  7. sbit ENLED = P1^4;  
  8.   
  9. void main(){  
  10.     EA = 1;  //使能总中断  
  11.     ENLED = 0;  //使能 U4,选择 LED 点阵  
  12.     ADDR3 = 0;  //因为需要动态改变 ADDR0-2 的值,所以不需要再初始化了  
  13.     TMOD = 0x01; //设置 T0 为模式 1  
  14.     TH0 = 0xFC; //为 T0 赋初值 0xFC67,定时 1ms  
  15.     TL0 = 0x67;  
  16.     ET0 = 1;  //使能 T0 中断  
  17.     TR0 = 1;  //启动 T0  
  18.     while (1);  //程序停在这里,等待定时器中断  
  19. }  
  20. /* 定时器 0 中断服务函数 */  
  21. void InterruptTimer0() interrupt 1{  
  22.     static unsigned char i = 0; //动态扫描的索引  
  23.      
  24.     TH0 = 0xFC;  //重新加载初值  
  25.     TL0 = 0x67;  
  26.     //以下代码完成 LED 点阵动态扫描刷新  
  27.     P0 = 0xFF;  //显示消隐  
  28.     switch (i){  
  29.         case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=0x00; break;  
  30.         case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=0x00; break;  
  31.         case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=0x00; break;  
  32.         case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=0x00; break;  
  33.         case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=0x00; break;  
  34.         case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=0x00; break;  
  35.         case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=0x00; break;  
  36.         case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=0x00; break;  
  37.         default: break;  
  38.     }  
  39. }   
永不止步步 发表于01-28 10:22 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345327个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号