最近由于一个大作业的需要,买了一块16*16的点阵模块研究了一番,实物图如下:
这个模块有高配版本是可以显示两个颜色的,我买的是只有一个颜色的,所以有一部分芯片没焊。
用到的主要芯片有:74HC138、74HC595、APM4953
74HC138
也就是我们常说的38译码器,原理图如下:
通过对ABC三位二进制的译码,在Y0-Y7中对应的端口输出,低电平有效。其中E1#、E2#和E3为使能端,给相应的电平则使能芯片。利用使能端可以实现38译码器的拓展,这里就使用了这样的拓展方法,再加一D管脚接第一片的E1#,同时加一非门接第二片的E1#,这样当D管脚给高电平时使能第二片,低电平时使能第一片,就实现了4-16译码器。
APM4953
双P沟道MOSFET,内部电路如下图:
内部包括两个独立的、P沟道金属氧化物场效应管。它有超低的导通电阻RDS(ON),适合用LED显示屏,LED显示器驱动,也可用来做负载开关或PWM开关。
特点:耐用性和可靠性极强,耐高温,低稳等恶劣工作环境。
应用领域:LED显示屏,LED显示器等,负载开关或者PWM开关。
74HC595
74HC595和74hc164一样是在单片机系统中常用的芯片之一他的作用就是把串行的信号转为并行的信号,常用在各种数码管以及点阵屏的驱动芯片, 使用74HC595可以节约单片机mcu的io口资源,用3个io就可以控制8个数码管的引脚,他还具有一定的驱动能力,可以免掉三极管等放大电路,所以这块芯片是驱动数码管的神器.应用非常广泛。
74HC595中文资料:http://www.51hei.com/f/74HC595中文资料.pdf
管脚说明:
点阵模块的原理
由A,B,C,D四个管脚接两片38译码器进行位选,确定点亮的行。由管脚SCK接74HC595的SCK将这一行的点亮数据串行输入,再由QA-QH输出。使用APM4953做开关提升带负载能力。
stm32驱动程序:
void InputByte( unsigned char DataR1) //写一个字节
{
unsigned char i;
for(i=8; i>0; i--)
{
R1 = !(DataR1&0x01);
SCK = 0;
SCK = 1;
DataR1 = DataR1 >> 1;
}
}
点阵显示:
void Lattice_Display(void)
{
LAT=0; //释放锁存
InputByte(hztest[0][FLAG]); //写入数据
InputByte(hztest[0][FLAG+1]);
OE=1; //关闭使能,防止鬼影
LAT=1; //锁存数据
A=COUNT&0x01; //取位选数据
B=(COUNT&0x02)>>1;
C=(COUNT&0x04)>>2;
D=(COUNT&0X08)>>3;
OE=0; //使能显示
COUNT++; //数据更新
FLAG+=2;
if(COUNT==16) //逐行访问
{
COUNT=0;
}
if(FLAG==32) //每行两个字节数据共32字节
{
FLAG=0;
}
}
我将显示函数放在定时器中断中,这样提高中断频率即可利用视觉的暂留效应得到需要的图像。
其中显示数据可以使用取模软件得到:
这里要注意设置好参数: