点阵 LED 显现屏作为一种现代电子媒体,具有灵敏的显现面积(可任意切割和组装)、高亮度、长寿命、数字化、实时性等特色,使用十分广泛。
前边学了 LED 小灯和 LED 数码管后,学 LED 点阵就要轻松得多了。一个数码管是 8 个LED 组成,同理,一个 8*8 的点阵便是由 64 个 LED 小灯组成。图 7-1 便是一个点阵 LED 最小单元,即一个 8*8 的点阵 LED,图 7-2 是它的内部结构原理图。
图 7-1 8*8LED 点阵外观
图 7-2 8*8 点阵结构原理图
从图 7-2 上能够看出,其实点阵 LED 点亮原理仍是很简单的。在图中大方框外侧的便是点阵 LED 的引脚号,左边的 8 个引脚是接的内部 LED 的阳极,上侧的 8 个引脚接的是内部LED 的阴极。那么假如咱们把 9 脚置成高电平、13 脚置成低电平的话,左上角的那个 LED小灯就会亮了。下面咱们就用程序来完结一下,特别注意,操控点阵左边引脚的 74HC138是原理图上的 U4,8 个引脚自上而下顺次由 U4 的 Y0~Y7 输出来操控。
#include
sbit LED = P0^0;
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
ENLED = 0; //U3、U4 两片 74HC138 总使能
ADDR3 = 0; //使能 U4 使之正常输出
ADDR2 = 0; //经 U4 的 Y0 输出敞开三极管 Q10
ADDR1 = 0;
ADDR0 = 0;
LED = 0; //向 P0.0 写入 0 来点亮左上角的一个点
while(1); //程序中止在这儿
}
那么相同的办法,通过对 P0 的全体赋值咱们能够一次点亮点阵的一行,那么这次咱们用程序来点亮点阵的第二行,对应的就需求编号 U4 的 74HC138 在其 Y1 引脚输出低电平了。
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
ENLED = 0; //U3、U4 两片 74HC138 总使能
ADDR3 = 0; //使能 U4 使之正常输出
ADDR2 = 0; //经 U4 的 Y1 输出敞开三极管 Q11
ADDR1 = 0;
ADDR0 = 1;
P0 = 0x00; //向 P0 写入 0 来点亮一行
while(1); //程序中止在这儿
}
从这儿咱们能够逐渐发现点阵的操控原理了。咱们前面讲了一个数码管便是 8 个 LED 小灯,一个点阵是 64 个 LED 小灯。相同的道理,咱们还能够把一个点阵了解成是 8 个数码管。通过前面的学习现已把握了 6 个数码管一起显现的办法,那 8 个数码管也应该轻轻松松了。下面咱们就使用守时器中止和数码管动态显现的原理来把这个点阵悉数点亮。
#include
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main(){
EA = 1; //使能总中止
ENLED = 0; //使能 U4,挑选 LED 点阵
ADDR3 = 0; //由于需求动态改动 ADDR0-2 的值,所以不需求再初始化了
TMOD = 0x01; //设置 T0 为形式 1
TH0 = 0xFC; //为 T0 赋初值 0xFC67,守时 1ms
TL0 = 0x67;
ET0 = 1; //使能 T0 中止
TR0 = 1; //发动 T0
while (1); //程序停在这儿,等候守时器中止
}
/* 守时器 0 中止服务函数 */
void InterruptTimer0() interrupt 1{
static unsigned char i = 0; //动态扫描的索引
TH0 = 0xFC; //从头加载初值
TL0 = 0x67;
//以下代码完结 LED 点阵动态扫描改写
P0 = 0xFF; //显现消隐
switch (i){
case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=0x00; break;
case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=0x00; break;
case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=0x00; break;
case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=0x00; break;
case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=0x00; break;
case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=0x00; break;
case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=0x00; break;
case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=0x00; break;
default: break;
}
}
『本文转载自网络,版权归原作者一切,如有侵权请联络删去』