上海靈信視覺A4控制板
資料準備:
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