资料准备:
1.LED Player上位机控制:
http://www.168led.com/AjaxFile/DownLoadFileNew.aspx?FilePath=/UpLoadFile/20170720/%E5%8D%95%E5%8F%8C%E8%89%B2%E5%8F%8A%E9%97%A8%E6%A5%A3%E5%85%A8%E5%BD%A9%E5%85%AD%E4%BB%A3%E8%BD%AF%E4%BB%B6%EF%BC%9ALED%20Player6.0(%E7%89%88%E6%9C%ACV6.1.5).zip&fileExt=file
2.LED第六版的二次开发资料:
http://www.168led.com/AjaxFile/DownLoadFileNew.aspx?FilePath=/UpLoadFile/20171206/%E5%85%AD%E4%BB%A3%E5%8D%95%E5%8F%8C%E8%89%B2%E5%8F%8A%E9%97%A8%E6%A5%A3%E5%85%A8%E5%BD%A9%E4%BA%A7%E5%93%81%E5%BC%80%E5%8F%91%E8%B5%84%E6%96%99201711.zip&fileExt=file
3.灵信视觉官网:
http://www.168led.com/ruanjianxiazai/
4.上位机操作教程:
http://www.168led.com/AjaxFile/DownLoadFileNew.aspx?FilePath=/UpLoadFile/20160901/%E5%8D%95%E5%8F%8C%E8%89%B2%E5%85%AD%E4%BB%A3%E8%BD%AF%E4%BB%B6%E8%A7%86%E9%A2%91%E6%95%99%E5%AD%A6.zip&fileExt=file
这几天在调上海灵信视觉的A4控制板,这个是控制LED屏用的。官方例程只给了java,C++等demo,只能在PC端跑,很头疼。像我们这样用单片机跑的就跪了。花了一整天的时间,看它第一版的协议,要疯了你知道吗。一共536个字节,我用串口发,串口接,把数据打印下来,一位一位地跟协议对照,看看是怎么写的。更恶心的是它还有应答命令。需要你在收到确认时,回复应答。这样用单片机跑就很麻烦了,本来单片机的速度就不快,要这样来回地接受应答几百字节将近一千字节的数据,并且串口的波特率规定在57600,CPU就吃不消了,除非你用DMA,总归感觉很麻烦。先把来回帧的数据打印给你们看看:
1.请求帧:(串口发送)
55 AA 00 00 03 01 00 DA 00 00 00 00 00 00 4F 02 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 40 00 20 00 02 01 00 00 00 00 00 00 00 00 00 31 02 00 00 01 00 00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 18 02 00 00 01 00 00 00 00 3F 00 1F 00 01 00 01 09 01 00 20 00 40 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF DE 9F FF FF FF FF FF FF DD E1 FF FF FF FF FF FF DB FD C0 87 87 87 87 87 07 FD BE 7B 7B 7B 7B 7B DE FD 7E 7B 7B 7B 7B 7B DD 81 7E 7B 7B 7B 7B 7B 5B ED 7E 87 87 87 87 87 8F ED 7E 7B 7B 7B 7B 7B D7 ED 7E 7B 7B 7B 7B 7B DB ED 7E 7B 7B 7B 7B 7B DD ED BE 7B 7B 7B 7B 7B DD EE C0 87 87 87 87 87 DC EE FF FF FF FF FF FF 42 EF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 0D 0A
2.应答帧:(串口接收)
55 AA 00 00 03 00 00 DA 00 00 00 00 00 00 04 00 00 00 04 00 00 00 00 00 00 00 0D 0A
3.确认帧:(串口发送)
55 AA 00 00 03 01 00 DA 00 00 01 00 00 00 4F 02 00 00 4F 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 0D 0A
4.应答帧:(串口接收)
55 AA 00 00 03 00 00 DA 00 00 01 00 00 00 04 00 00 00 04 00 01 00 00 00 00 00 0D 0A
也别数了,这么多数据我读就读了一两个小时,更别说写到程序里了。下面我看到了他的协议更新,发现几百位的数据被缩减到40-50位左右,还不需要用应答,立马弃了它的原协议。给你们看看他的新的协议:
55 AA 00 00 01 01 00 D9 00 00 00 00 00 00 00 00 00 00 00 00【数据】 00 00 0D 0A
前后32位是不需要改动的,只需要把你想要发的数据转成16进制数,加入到数据里去。给你们看一下例子:将LED显示“苏E12345”
55 AA 00 00 01 01 00 D9 00 00 00 00 00 00 00 00 00 00 00 00 //协议头
25 64 69 73 70 30 3a 30 //环境设置
cb d5 45 31 32 33 34 35 //要显示的数据
00 00 0D 0A //协议尾
将这个通过串口发送到LED显示屏上就可以了。这里有几点要注意的:
1.要先使用LED Player这个软件给屏幕下载字库:
2.要配置好屏参和节目区域,内码区域。
步骤:
a.用USB转RS232接到A4控制板,打开设置,对屏参进行设置。(看资料4的视频)
b.连接成功后,新建节目,新建内码,并且单机发送:
c.将字库下载到板子中:常用命令->加载字库->选择进制。(中文英文的都加载)
到这里,基本就可以使用A4控制卡了。将串口波特率设置为57600。单片机的代码我整理成.c和.h发出来看看。整个工程是用32写的,想看的,去我的博客上下载吧。
led.c:
#include "led.h"
#include "bsp_usart2.h" //野火的串口
uint8_t ledData[PROTOCOLLEDLEN];
void LED_Config(){
ledData[0]=0x55;
ledData[1]=0xaa;
ledData[2]=0x00;
ledData[3]=0x00;
ledData[4]=0x01;
ledData[5]=0x01;
ledData[6]=0x00;
ledData[7]=0xD9;
ledData[8]=0x00;
ledData[9]=0x00;
ledData[10]=0x00;
ledData[11]=0x00;
ledData[12]=0x00;
ledData[13]=0x00;
ledData[14]=0x00;
ledData[15]=0x00;
ledData[16]=0x00;
ledData[17]=0x00;
ledData[18]=0x00;
ledData[19]=0x00;
ledData[20]=0x25;
ledData[21]=0x64;
ledData[22]=0x69;
ledData[23]=0x73;
ledData[24]=0x70;
ledData[25]=0x30;
ledData[26]=0x3A;
ledData[27]=0x30;
ledData[36]=0x00;
ledData[37]=0x00;
ledData[38]=0x0D;
ledData[39]=0x0A;
}
void LED_Set(char* ch,int len){
int i=0;
for(i=0;i<len;i++)
ledData[i+28]=ch[i];
}
void LED_Display(u8* temp,u8 len){
int i=0;
for(i=0;i<len;i++)
USART2_Send_Char(temp[i]);//串口发送函数,野火库里有http://git.oschina.net/wildfireteam/wildfire_stm32_iso_mini.git
}
led.h:
#ifndef __LED_H_
#define __LED_H_
#include "stm32f10x.h"
#define PROTOCOLLEDLEN 40
void LED_Config();
void LED_Set(char* ch,int len);
void LED_Display(u8* temp,u8 len);
#endif