标题: 求助,这种LED点阵显示屏怎么使用?如何用MCU驱动 [打印本页]
作者: zxwdown 时间: 2020-7-11 13:24
标题: 求助,这种LED点阵显示屏怎么使用?如何用MCU驱动
求助,这种LED显示屏怎么使用?
从网上某店买了一块LED显示屏,样式如下:
买的时候忘了问有没有配套开发资料,想当然的认为理所当然会有这资料,结果买到后向店家索要开发资料,店家说只有以下资料,没有其他的资料。
我想在这块屏上滚动显示五个汉字,但由于没有必需的开发资料,无从下手,希望了解这种屏的人帮帮我,不胜感激!
作者: wc86110 时间: 2020-7-11 16:21
查看板上芯片型号及使用 MCU,对号入座搜 80*16 点阵屏程序
作者: zxwdown 时间: 2020-7-11 22:48
谢谢指点,我也想看板上是用了哪些芯片,但芯片太小,看不清楚,用手机拍照放大也还看不清。板上有两个16针接口,一个标OUT1,一个标IN1。
作者: angmall 时间: 2020-7-11 23:02
你这个是hub08接口 点阵屏
我给你来个资料可以参考一下
http://www.51hei.com/bbs/dpj-100285-1.html
http://www.51hei.com/bbs/dpj-31394-1.html
http://www.51hei.com/bbs/dpj-38426-1.html
- /*
- 08接口简单说明
- A 、B 、 C、 D:两片74HC138的输入信号
- EN: 74HC138的输出使能,低电平有效
- R1: 是74HC595的数据线,串行数据输入
- R2: 用不上
- G1: 用不上
- G2: 用不上
- LT:74HC595时钟
- SK:74HC595的存储控制线
- */
- //单片机:STC89C52
- //晶振:22.1184M,下载选择双倍时钟,否则会有闪烁!
- //显示屏:HUB08接口16X64单红点阵
- //显示方式:左移
- #include
- #include"zimo.h"
- #define uchar unsigned char
- #define uint unsigned int
- #define SPEED 5 //定义速度与数字成反比 数字小,速度快
- #define NUMBER 11 //定义要移动显示总16X16汉字个数,计算方法:NUMBER=汉字显示个数+4个空格
- uchar word=0,col=0,col1=0,disrow=0,move=0;//wor为要显字变量,col为位移变量,col1为字节偏移量,disrow为行变量
- uchar BUFF__UP[17]; //缓冲字节数取值=[2*板点阵宽度/8]+1比较保险,即两倍板的点阵字节数.
- uchar BUFF__UP0[12]; //上半屏显示缓冲
- sbit R1=P0^4;//红色数据1
- sbit R2=P3^3;//红色数据2
- sbit G1=P3^4;//绿色数据1
- sbit G2=P3^5;//绿色数据
- sbit CLK=P0^7; //595时钟端口
- sbit STB=P0^6; //595锁存端口
- sbit OE =P0^5;//74HC138使能:低有效
- //根据列指针由双字节合并为单字节的子程序模块
- //和点阵的取模方式有关:低位在前,高位在后,但是实际显示,高位在前,低位在后!
- uchar Combine_2byte(uchar h1,uchar h2)
- {
- uchar T_date,tempcol;
- tempcol=col1;
- T_date=(h1>>tempcol)|(h2<<(8-tempcol));
- return T_date;
- }
- //分别装屏点阵数据
- void Load_one_line(void) //多加4个16X16汉字的缓冲
- {
- BUFF__UP[0]=Table[word][disrow*2+0];//装载点阵数据
- BUFF__UP[1]=Table[word][disrow*2+1];
- BUFF__UP[2]=Table[word+1][disrow*2+0];
- BUFF__UP[3]=Table[word+1][disrow*2+1];
- BUFF__UP[4]=Table[word+2][disrow*2+0];
- BUFF__UP[5]=Table[word+2][disrow*2+1];
- BUFF__UP[6]=Table[word+3][disrow*2+0];
- BUFF__UP[7]=Table[word+3][disrow*2+1];
- BUFF__UP[8]=Table[word+4][disrow*2+0];
- BUFF__UP[9]=Table[word+4][disrow*2+1];
- BUFF__UP[10]=Table[word+5][disrow*2+0];
- BUFF__UP[11]=Table[word+5][disrow*2+1];
- BUFF__UP[12]=Table[word+6][disrow*2+0];
- BUFF__UP[13]=Table[word+6][disrow*2+1];
- BUFF__UP[14]=Table[word+7][disrow*2+0];
- BUFF__UP[15]=Table[word+7][disrow*2+1];
- }
- //发送屏一线点阵数据
- void Send_one_line(void)
- {
- char s;
- uchar temp,i,inc;
- if(col<8) inc=0;
- if(8<=col&&col<16) inc=1;
- for(s=0+inc;s<=8+inc;s++)
- {
- temp=Combine_2byte(BUFF__UP[s],BUFF__UP[s+1]);
- for(i=0;i<8;i++)
- {
- R1=~(temp>>i)&0x01;//取出最低位
- R2=0xff; //不显示
- G1=0xff;
- G2=0xff;
- CLK=0;
- CLK=1; //移位时钟
- }
- }
- }
- //左移函数
- void LEFT_MOVE()
- {
- uchar i;
- for(col=0;col<16;col++)//循环16次,点亮并移动一个汉字,步进是一位
- {
- col1=col%8;//一个字节移动位数
- for(i=0;i
- {
- for(disrow=0;disrow<16;disrow++)//扫描16行
- {
- Load_one_line();//装载一行点阵数据
- Send_one_line();//发送一行点阵数据
- OE=1;
- STB=1; // 输出锁存
- STB=0;
- P0=disrow; // 行扫描
- OE=0;
- }
- }
- }
- word=word+1;// 一个汉字移动后,指向下一个汉字
- if(word>=NUMBER)
- {
- word=0;//移动完NUMBER个汉字后重新开始
- }
- }
- //主函数入口
- void main(void)
- {
- R1=0;//数据初始化
- R2=0;
- G1=0;
- G2=0;
- while(1)
- {
- LEFT_MOVE(); //左移
- }
- }
- zimo.h
- unsigned char code Table[][32]=
- {
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x08,0x00,0xC8,0x7F,0x48,0x00,0x7F,0x00,0x48,0x3F,0x68,0x00,0xD8,0x7F,0x48,0x03,
- 0x4C,0x25,0x4B,0x65,0x48,0x19,0x48,0x11,0x28,0x11,0x28,0x65,0x1A,0x23,0x04,0x01,
- 0xFC,0x1F,0x00,0x0C,0x60,0x03,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0xFC,0x1F,
- 0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x10,0x84,0x10,0x84,0x10,0x84,0x14,0x04,0x08,
- 0x80,0x00,0x80,0x00,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0xFC,0x1F,
- 0x84,0x10,0x84,0x10,0x84,0x10,0xFC,0x1F,0x84,0x10,0x80,0x40,0x80,0x40,
- 0x00,0x7F,0x00,0x00,
- 0x00,0x00,0xFC,0x0F,0x00,0x04,0x00,0x02,0x00,0x01,0x80,0x00,0x80,0x00,
- 0x80,0x20,0xFF,0x7F,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,
- 0xA0,0x00,0x40,0x00,
- 0x00,0x01,0x00,0x01,0x3F,0x01,0xA0,0x7F,0xA1,0x20,0x52,0x12,0x14,0x02,
- 0x08,0x02,0x18,0x02,0x18,0x06,0x24,0x05,0x24,0x09,0x82,0x18,0x61,0x70,
- 0x1C,0x20,0x00,0x00,
- 0x02,0x00,0x84,0x01,0x6C,0x3E,0x24,0x22,0x20,0x22,0x20,0x22,0x27,0x22,
- 0x24,0x22,0xA4,0x22,0x64,0x2A,0x24,0x12,0x04,0x02,0x04,0x02,0x0A,0x00,
- 0xF1,0x7F,0x00,0x00,
- 0x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,
- 0x45,0x0A,0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,
- 0x04,0x01,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空白
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- };
复制代码
作者: hhdsdy 时间: 2020-7-11 23:25
仅仅看芯片型号没用吧?真要搜索80*16 点阵屏程序应该极难搜索到,板上应该都是级联的,只要能够点亮一个字剩下的都简单了。我觉得还是搞清楚用些什么集成块及电路的接法,搜索相应接法的程序,只要能够局部点亮,剩下的自己再改
作者: zxwdown 时间: 2020-7-12 09:59
经楼上指点,本人找了一个放大镜,仔细查看板上所用芯片,终于有所收获,看到板上好象有
FMTC5020A芯片5片,
SM74HC138D芯片2片,
SM74HC04芯片2片,
SM245TS芯片2片,
以及好象是4953芯片8片。
根据FMTC5020A芯片这一型号,本人在百度查到一些资料、程序等,但是本人这块板标注很简略,两个数据接口及一个电源接口都没任何标注,电源还好办,但数据接口没任何标注,甚至连针脚号都没有,不知哪个引脚该对应哪个信号,有些不清,望高手指导。下面是本人所买的板的数据接口图:
作者: zxwdown 时间: 2020-7-12 13:28
非常感谢,有找时间试试。
作者: zxwdown 时间: 2020-7-12 13:30
是的,只要能准确点亮一排灯就有办法啦
作者: angmall 时间: 2020-7-12 16:13
你这个是LED点阵08标准接口
LED显示屏的接口形式有04接口、08接口、12接口几种
12接口多用于户外屏,例如P10/P16/P13.3单色或者双色。
08接口多用于室内屏,例如F3.0/3.75/5.0等规格的点阵。
判断方法:一个户外屏用的,一个是室内屏用的,就看你的屏是户外的还是室内的就知道了。
看看显示屏单元板排阵两侧 标注的字母 ,对照上表 就可知道,一般常用的室内F5.0/F3.75为08接口,室外的P10为12接口,特殊除外。。。。
LED点阵08标准接口
GND 接地
EN 使能也用OE描述
A\B\C\D 行信号,过138由二进制转十进制
R1\R2\G1\G2 是指颜色代号,R是红色red的简称,G是绿色greed的简称
LT SK 是指时钟、锁存
扫描信号目前有三种常见的接线方式:直通译码扫描,串行译码扫描和最常见的138译码扫描方式,其中138译码的原理就是利用138译码芯片实现译码,ABCD信号共可以译出16扫;
OE信号对应通用ON/OFF芯片的OE脚,例如MBI的5024,对应PWM芯片就是GCLK,例如MBI5050等
其中,管脚LA、LB、LC、LD表示行信号;管脚R1、R2、G1、G2表示列信号;管脚EN表示使能信号;管脚SCK表示时钟信号;管脚STB表示锁存信号;管脚GND表示接地。
那么,管脚LA、LB、LC、LD是如何来控制行信号,从而实现1/16扫描方式的。其实很简单,这是通过两个3-8译码器74HC138芯片来实现,通过这两个芯片可以实现如下的功能:
当管脚LD、LC、LB、LA的输出分别为0000时,LED显示屏的第一行被选中;
当管脚LD、LC、LB、LA的输出分别为0001时,LED显示屏的第二行被选中;
当管脚LD、LC、LB、LA的输出分别为0010时,LED显示屏的第三行被选中;
......
当管脚LD、LC、LB、LA的输出分别为1111时,LED显示屏的第十六行被选中。
现在,我们已经知道如何通过08接口的四个行信号LA、LB、LC、LD来控制LED显示屏的每一行了。将08接口的四个列信号都接地,循环给四个行信号输入0000到1111,就可以点亮整个LED显示屏了。
但是要在LED显示屏上显示出汉字或是图形,仅仅对行信号进行控制是远远不够的,我们还需要对列信号进行控制。
驱动这种矩阵LED屏真心没有什么难的,最简单的方法,就是先把你要显示的字按16*16的阴码取字模, 然后取4个字的第1行字模数据移入到8个595中,再片选这一行(就是38译码器输出1),延时个1ms,取消片选,再取第2行字模,移入595,片选第2行,延时,取消片选,重复此过程16遍,便把一行字的字模码全显了,然后就是不停循环,便可刷出一行字了.第二行是同样的道理.
作者: zxwdown 时间: 2020-7-12 16:45
非常感谢!
作者: zxwdown 时间: 2020-7-12 16:53
经您指点,我有信心点亮这块屏啦,明后天找个时间试试你给我的程序,定会有惊喜出现。
作者: zxwdown 时间: 2020-7-13 23:27
在您的指导下,经过一个周末的折腾,终于把字显示在LED屏上了,本人采用整字滚动的办法,没有用单一象素滚动的方法,这样比较简单实用。
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |