title: 8x8点阵驱动原理
date: 2020-07-24
tags: 51单片机
什么是8x8点阵屏?
8x8点阵屏是由64个LED组成的发光点阵,可以显示简单的图案或字符,如果要显示汉字一块8x8点阵屏是不够的,至少需要4块8x8点阵屏,点阵屏运用比较广泛的是店铺前滚动的广告字幕。8x8点阵屏有共阴款和共阳款,在我看来无非是引脚定义不同,只要驱动电路稍加改动使用是一样的,通俗区分共阴、共阳款只要看点阵屏①脚,是共阴接的就共阴款的,共阳接的是共阳款的。
8x8共阳&共阴点阵屏电路
自制点阵屏模块
由于我的开发板是c51的最小系统板,没有集成点阵屏模块,而此时我又没有模块,这还怎么玩呢。我看了点阵屏驱动电路也很简单,手头上原件也有,于是就自己搭建点阵屏模块。我用的是共阴款的点阵屏,下面也是我基于共阴款的设计的驱动电路,只要明白原理,电路稍加修改就可以完美驱动共阳款点阵屏的。
-
成品
-
模块原理图
驱动原理
使用9012PNP型三级管,利用三级管的开关原理驱动LED灯。驱动过程就拿8x8点阵屏的13脚来说,单片机和 x-con中
X-0
相连的端口输出低电平,其他相连的端口为高电平,这样控制13脚的三极管就打开,+5v加在13脚,其他端口为0v。单片机和Y-con中的y-0
相连的端口输出低电其他相连端口为高电平,这样左上角LED灯就被点亮了。要显示图案也很简单了,这里就通过对Y-con引脚逐次选中,然后把对应X-con要点亮的引脚打开,只要刷新低于1mm就能显示出稳定的图案。(这里要说下为什么不把8x8点阵直接和单片机端口相连直接驱动,这是因为单片机端口输出高低信号,但是驱动能力很弱,每个端口允许通过电流很小只有几十mA,总共端口电流加起来也就100mA以内,而每个LED正常工作电流大概8mA,那一条支路8颗LED也就64mA,这样远远超过单片机单个端口允许的电流范围,而64颗LED同时工作电流512mA那么直接加在单片机上显然会出问题。我这里只在LED的阳极加了驱动三级管,保险起见在LED共阴处也应加上三级管。)
驱动程序
//******************************************************************//
//*8x8点阵屏简单驱动程序 //
//*博客地址:www.joulink.top //
//*by:亦别 //
//*****************************************************************//
#include<reg52.h>
unsigned char code image[] = { //爱心图案编码
0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7
};
unsigned char code RF[] = { //刷新编码
0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F
};
void main()
{
EA = 1; //使能总中断
TMOD = 0x01; //定时1ms
TH0 = 0xFC;
TL0 = 0x67;
ET0 = 1; //使能T0中断
TR0 = 1; //启动T0
while(1);
}
/*定时器0中断服务函数*/
void InterruptTimer0() interrupt 1
{
static unsigned char i = 0;
TH0 = 0xFC; //重新加载初始值
TL0 = 0x67;
P2 = 0xFF; //显示消影
switch(i)
{
case 0: P0 = RF[0]; i++; P2 = image[0]; break;
case 1: P0 = RF[1]; i++; P2 = image[1]; break;
case 2: P0 = RF[2]; i++; P2 = image[2]; break;
case 3: P0 = RF[3]; i++; P2 = image[3]; break;
case 4: P0 = RF[4]; i++; P2 = image[4]; break;
case 5: P0 = RF[5]; i++; P2 = image[5]; break;
case 6: P0 = RF[6]; i++; P2 = image[6]; break;
case 7: P0 = RF[7]; i=0; P2 = image[7]; break;
default: break;
}
}