51单片机【五】LED点阵屏

版权声明:欢迎转载请注明转自方辰昱的博客https://blog.csdn.net/viafcccy https://blog.csdn.net/viafcccy/article/details/84196376

关于显示器的分辨率,像素,清晰度这些概念不再赘述

讲一下pitch这个比较陌生的概念:指的是两个像素点的圆心之间的距离,通常默认单位是毫米 例如:p10指的是间距10毫米的led点阵

LED的P00-P07是直接接在处理器上但是因为处理器针脚有限所以需要下面的74HC595(处理器使用3个引脚经过这个芯片产生8个并行的信号等效于使用了8个引脚)

J13如果跳线OE和GND HC595将无法工作也为没有电压 而跳线OE和VCC才可以工作

74HC595是一个移位寄存器74HC595是将串行信号转为并行信号 其中P34是处理器输入串行信号 P36是串行时钟 P35是工作时钟 然后经过这个芯片处理生成8个并行的信号 接在LED点阵的D0-D7上 

这里这个芯片还可以控制一排LED是通过将图中的J14跳线帽连接后 LED一端为高电压另一端为HC595输出的8个串行的高低电压将LED点亮

void Hc595SendByte(u8 dat)
{
	u8 i = 0, j = 0;

	SCK = 0;				// 将SCK置为初始状态
	RCK = 0;				// 将RCK置为初始状态

	for (i=0; i<8; i++)     //使用for循环将数字信号分8次发送出去也就是一个串行信号
	{
		SER = dat >> 7;
		dat <<= 1;

		SCK = 1;
		j++;			  	// 延时代码,等同于nop指令
		j++;				// 延时代码,等同于nop指令
		SCK = 0;	
	}

	RCK = 1;
	j++;					// 延时代码,等同于nop指令
	j++;					// 延时代码,等同于nop指令
}

LED点阵显示图像原理与数码管动态显示类似

首先选择出每个要点亮的LED像素点 然后反复循环刷新即可

链接:https://pan.baidu.com/s/1-RGR0v9WUH7LWmOaUTpSbQ 
提取码:pmw2 


这是字模提取软件 也就是帮你选择那些LED管需要去点亮

注意的是:要管理员身份运行 
                  字模由光盘中:工具软件/88字模提取软件/LEDDOT V0.2.exe生成
                  注意取模软件菜单栏设置中,设置为:
                  字模显示方式:单行
                  字模提取方式:逐列
                  字模提取格式:C51格式

void main(void)
{
	MatrixDisplay(gZhu);		
}
void MatrixDisplay(u8 *zimo)
{
	u8 i = 0;

	while (1)
	{
		for(i=0;i<8;i++)
		{
			MATRIX_PORT = gLineCode[i];		  		// 位选
			Hc595SendByte(zimo[i]);		// 发送段选数据
			Hc595SendByte(0x00);  		// 消隐
		}	
	}
}


 

void Hc595SendByte(u8 dat)
{
	u8 i = 0, j = 0;

	SCK = 0;				// 将SCK置为初始状态
	RCK = 0;				// 将RCK置为初始状态

	for (i=0; i<8; i++)
	{
		SER = dat & (0x01);
		dat >>= 1;

		SCK = 1;
		j++;			  	// 延时代码,等同于nop指令
		j++;				// 延时代码,等同于nop指令
		SCK = 0;	
	}

	RCK = 1;
	j++;					// 延时代码,等同于nop指令
	j++;					// 延时代码,等同于nop指令
}

/*
// 由于取模软件只能选择横向纵向,但是不能选择纵向从上向下还是从下向上
// 实际测试取模软件的模式,适合先发LSB而不是MSB
void Hc595SendByte(u8 dat)
{
	u8 i = 0, j = 0;

	SCK = 0;				// 将SCK置为初始状态
	RCK = 0;				// 将RCK置为初始状态

	for (i=0; i<8; i++)
	{
		SER = dat >> 7;
		dat <<= 1;

		SCK = 1;
		j++;			  	// 延时代码,等同于nop指令
		j++;				// 延时代码,等同于nop指令
		SCK = 0;	
	}

这里和前面发送串行码的顺序不同 这个需要实际测试 因为这个顺序可能导致LED现实的字是反的

猜你喜欢

转载自blog.csdn.net/viafcccy/article/details/84196376