16x64LED点阵模块驱动记录(一)简单实现

驱动记录链接:

 

1、本文

2、16x64LED点阵模块驱动记录(二)左移实现

3、16x64LED点阵模块驱动记录(三)字库读取并显示

4、16x64LED点阵模块驱动记录(四)SST29EE020 GB2312汉字库读取

5、16x64LED点阵模块驱动记录(五)DS1302时钟

6、16x64LED点阵模块驱动记录(六)PYTHON上位机串口通信并显示

7、16x64LED点阵模块驱动记录(七)像画布一样操作点阵屏

前言

        某宝志鑫家入手一款16x64点阵模块,此类模块常见于停车场等户外场地,用于动态显示车牌号天气时间等信息。模块显示面板由16个8*8点阵屏拼为16x64点阵,主控芯片为STC89C52,行扫描为1个74HC154(4-16译码器),列扫描为8个74HC595(8位串行输入、并行输出的位移缓存器)。板上还有1块flash存储芯片sst29ee020(256k*8,感觉是字库),配合它工作的是74hc573锁存器(隔离sst29ee020输入输出,复用MCU IO);另外还有1个DS1302时钟芯片。

        模块功能较多,不是单纯的点阵显示模块。将模块理解为带MCS、存储、时钟、显示的多功能开发板可能更为合适。

        本文描述显示功能简单实现方法。并且希望可以通过进一步研究,将其他功能也开发出来。

        另外,74HC154做行扫描,为以后做左移效果增加了难度。74HC154是输出低电平有效,也就是点阵行扫描低电平有效,共阴?74HC154虽然是低电平有效,但到点阵屏应该做了电平转换。并且595的列扫描是低电平有效。所以还是共阳。

        sst29ee020较老,地址总线占了MCU18个IO口,STC89C52外部存储寻址最大为64k,52要驱动256k的存储,程序上控制要复杂一些。主要是现在都串行驱动存储了,这种方式应该都淘汰了吧。

eb5a18a88e1745129598cff6ba7ad368.jpeg


 

一、原理图

e05fc43d26844d478869a4b1767d4d9f.bmp

        简单地画了下原理图,为了仿真并没有完成照搬实物,图中的CD1602和几个LED在实物中并不存在。 proteus中没有sst29ee020的模型,找了个其他容量小一些的存储代替,但是存储是不能仿真的。

二、源码

main.c(就一个文件)

#include <STC89C5xRC.H>

sbit SH_CP = P1^5;
sbit DS = P2^7;
sbit ST_CP = P1^6;


//PCtoLCD2002
//
unsigned char code Table_row[] = {


//这个调了好久,现在贴的不知道是不是实际跑的字模了
//阳码,顺向,逐行式,C51,左右反转
0xFE,0xFF,0xFE,0xFF,0xFE,0xC0,0xC0,0xDF,0xDF,0x5F,0xEF,0x6D,0xFD,0xAB,0xFD,0xD7,
0xFD,0xF7,0xFA,0xEB,0xFA,0xDB,0xF7,0x5D,0xF7,0x7E,0xEF,0xBF,0xDF,0xDF,0xBF,0xEF,/*"欢",0*/
0xFF,0xFF,0xFE,0xFB,0xC3,0x37,0xDB,0xB7,0xDB,0xBF,0xDB,0xBF,0xDB,0xB0,0xDB,0xB7,
0xDB,0xB7,0xD2,0xB7,0xEB,0x37,0xFB,0xB7,0xFB,0xF7,0xFB,0xEB,0x80,0x1D,0xFF,0xFF,/*"迎",1*/
0xFF,0x7F,0xEF,0x7B,0xEF,0x77,0xF7,0x6F,0xFB,0x6F,0xFF,0x7F,0x80,0x00,0xFD,0xDF,
0xFD,0xDF,0xFD,0xDF,0xFD,0xDF,0xBD,0xEF,0xBD,0xEF,0xBD,0xF7,0x83,0xFB,0xFF,0xFC,/*"光",2*/
0xFE,0xEF,0xFE,0xEF,0xFE,0xEF,0x80,0x6D,0xFD,0x6D,0xFB,0xAD,0xFB,0xCD,0xFF,0xED,
0xC0,0x6D,0xDB,0x6D,0xDB,0x6D,0xDB,0x6D,0xDB,0x6D,0xC0,0x6F,0xDF,0x6F,0xFF,0xEF,/*"临",3*/

};

/*
void delayms(unsigned int m)
{
	int i,j;
	for(i=0; i<m; i++)
		for(j=0; j<120; j++);
}
*/

void HC595(unsigned char dat)
{
	unsigned char j;
	for(j=0;j<8;j++)
	{
		SH_CP = 0;	//为移位准备
		DS = dat & 0x01;	//先低位
		dat=dat>>1;
		SH_CP =1;  	//上升沿,移位
	}
}


void Matrix16x16(unsigned char num)
{
	unsigned char k,i;
	unsigned int m,n;
	unsigned char Char_num=num*32;
	
	for(m=0;m<Char_num;m++)    //为移动预留
	{
		for(n=0;n<16;n++)//控制显示速度,防止闪烁
		{
			for(k=0;k<16;k++)	//行扫描
			{
				for(i=0;i<num;i++)   //控制第几个字
				{
					HC595(Table_row[(32*i+2*k+1)]);		//
					HC595(Table_row[(32*i+2*k+0)]);		//													
			    }
			    ST_CP = 0;
			    ST_CP = 1; //并行输出
			    //P1=k;    //P1低4位为74HC154输入,高4位未使用
                P1=16-k;    //从左往右显示
			    //delayms(2);//可以不用delay,89C52已经够慢了
			}
		}
	}
}

void main(){
	while(1){
		Matrix16x16(4);
	}
}

a1509f6b87144006b0757799a3a74856.jpg

 烧录孔焊上了排针,顺序vcc rxd txd gnd

5d99e00875de46009ad14c15de177a97.jpg

84820b2b76e64f9a8021ac0b86aca4e0.jpg


 

三、注意事项

        用STC-ISP下载程序时,选择使能6T(双倍速)模式,这样显示效果会提高一些。

       板上12V的3.96mm接口是电源。

       另外一个3.96mm接口的(5V,LED)就是普通的TTL串行接口,可以接下载器的5V和TXD,实测可以做串口接收。3.96mm接口后面接光耦,光耦输出端到MCU的RXD。光耦负责隔离,提高可靠性。串口通讯的例子很多,不再赘述

       关于本模块的认识前三篇处在探索阶段,到第(四)篇基本完成,可以通过下面链接直达(四):       16x64LED点阵模块驱动记录(四)SST29EE020 GB2312汉字库读取_修充电器上瘾的博客-CSDN博客接上文《16x64LED点阵模块驱动记录(三)字库读取并显示》。上文主要实现了对SST29EE020外部存储的读取,证实了这个外部存储确实是个字库IC。在没有证实之前这都只是猜测。那么下一步应该研究如何正确地读取字库中字模。虽然这方面的例子很多,但我还是走了一两天弯路。走弯路的原因其实很简单。我尝试使用GB2312字库的读取实现方法,但是发现手头的模块似乎并非全部支持此方法,导致部分汉字无法正确读取。在我的漫长尝试中,我开始怀疑程序是否存在问题。经过一晚尝试,我依旧没有找到答案。https://blog.csdn.net/weixin_44067125/article/details/130251835

        “感觉之前商家好像卖过这款模块,还有红、蓝两种可选,但是我看到时只剩8块多的故障品了,就没下手。”

        “这次果断入坑,看来有得研究了”

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值