title: 8x8点阵驱动原理
date: 2020-07-24
tags: 51单片机

什么是8x8点阵屏?

8x8点阵屏是由64个LED组成的发光点阵,可以显示简单的图案或字符,如果要显示汉字一块8x8点阵屏是不够的,至少需要4块8x8点阵屏,点阵屏运用比较广泛的是店铺前滚动的广告字幕。8x8点阵屏有共阴款和共阳款,在我看来无非是引脚定义不同,只要驱动电路稍加改动使用是一样的,通俗区分共阴、共阳款只要看点阵屏①脚,是共阴接的就共阴款的,共阳接的是共阳款的。
O1CN01cusYdd1UOFUBkOa8K_!!72762507.jpg

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;
		}
	}

效果图

请添加图片描述

请添加图片描述