有谁做过LED点阵屏的串口通信? (应该有人会吧) ( 积分: 50 )

  • 主题发起人 主题发起人 liuying1129
  • 开始时间 开始时间
L

liuying1129

Unregistered / Unconfirmed
GUEST, unregistred user!
内码条屏通讯协议
一,帧格式:
|<-8bytes控制信息->|<-90bytes 显示内容->|
|1|2|3|4|5|6|7|8|9|10|11|12|....................|103|
1: =(n+50h ) n为屏号
2: =(n+50h ) n为屏号
3: =(n+50h ) n为屏号
(发送第1,2,3字节时“奇偶位”=1,发送第4—103字节时“奇偶位”=0)
4: 帧标志
=7FH 起始帧帧标志
=7EH 数据帧帧标志
=7DH 结束帧帧标志
5: 0
6: 0
7: 到本幕结束标志
=0 还有其他幕
=1 到本幕结束
8: 幕与幕之间延时
=0---19(秒)
9: 动画
=0---4
10: 引入引出方式
11: 速 度
12: 追加方式
13—102:数据
103:累加和(4---102字节相加,溢出不管)

帧格式详细描述:
1:)
起始帧结构(共103个字节):
第一,二,三个字节为屏号:若接受屏为n号屏则第一,二,三个字节填充n+50h(十六进制)
第四个字节为起始帧帧标志7fh(十六进制)
第五,六,七个字节为0
第八个字节为幕间延时,既一幕数据在屏上的停留时间,取值为0到19,单位为秒。要使该 参数该值只有在第12个字节指定为暂停方式是才有效。
第九个字节指定该幕的动画方式,该值只有当第12个字节指定为动画方式时才有效。
动画方式(Cartoon)取值为:0:吃豆、1:射箭、2:举重、3:狮子、4:奔马
第十个字节为该幕的引入,引出方式。
该字节的高四位为引入方式,低四位为引出方式;
引入方式:
YingRu= 0:"右端-左端移入"
1:"左端-右端移入"
2:"下端-上端卷入"
3:"上端-下端卷入"
4:"右端-左端跳入"
5:"左端-右端展开"
6:"右端-左端展开"
7:"下端-上端展开"
8:"上端-下端展开"
9:"中间-两端展开"
10:"两端-中间展开"
11:"中间-上下展开"
12:"上下-中间展开"
13:"立 即 显 示"
14:"预 备"
15:"随 机"
引出方式:
YingChu= 0:"右端-左端移出"
1:"左端-右端移出"
2:"下端-上端卷出"
3:"上端-下端卷出"
4:"右端-左端跳出"
5:"左端-右端闭合"
6:"右端-左端闭合"
7:"下端-上端闭合"
8:"上端-下端闭合"
9:"中间-两端闭合"
10:"两端-中间闭合"
11:"中间-上下闭合"
12:"上下-中间闭合"
13:"立 即 消 失"
14:"预 备"
15:"随 机"
第十一个字节为速度:指定该幕移动的速度。取值为0到7,0最快。
第十二个字节为追加方式:
|动画|停止|分割|时间|连续|暂停| |闪烁|
(高位) (低位)
当相应的位为1时表明该种追加方式有效。
从第十三个字节到第102个字节为要发送的数据。数据格式如下:
当该字符为汉字时,一个字符占用四个字节:
|字体属性|区码|位码|0|
当为一个西文字符时,一个字符占用两个字节:
|字体属性|ASCII码|
单色条屏字体属性取值为:
08h(十六进制):细体正常
22h(十六进制):细体反白
28h(十六进制):粗体正常
02h(十六进制):粗体反白
双色条屏字体属性取值为:
|D7|D6|D5|D4|D3|D2|D1|D0| 00 black 00 black 00 black
| | | | | | | | 01 red 01 red 01 red
|__| |__| |__| |__| 10 green 10 green 10 green
| | | | 11 yellow 11 yellow 11 yellow
宽 套 主 背 套 主? 背
例: xx 01 00 00 -- green.yellow.red
xx 10 00 00 -- red.yellow.green?
第103个字节为累加和:该累加和为除屏号(既前三个字节)和最后一个字节(既第 103个字节)外该幕的其余字符的累加值。

2:)
数据帧结构(共103个字节):数据帧(7E帧)除帧标志为“7EH”外,其他与起始帧一样。
3:)
结束帧结构(共103个字节)。
第一,二,三个字节为屏号:
若接受屏为n号屏则第一个字节填充n+50h(十六进制)
第四个字节为结束帧帧标志7dh(十六进制)
第5个字节到第102个字节全为0
第103个字节为累加和:
该累加和为除屏号(既前三个字节)和最后一个字节(既第 103个字节)外该幕的其余字符的累加值。

二.发送方法:
1.起始帧+N个数据帧(0<=N<=199)+结束帧。必须最先发送起始帧,然后发送数据帧,最后发送结束帧。起始帧中包含第一幕数据。结束帧不包含数据。起始帧,数据帧的“到本幕结束标志”必须置“0”。
2.起始帧。但起始帧中的“到本幕结束标志”必须置“1”。
3.起始帧+N个数据帧(0<=N<=199)。其中最后一个数据帧中的“到本幕结束标志”必须置“1”。
说明:A,起始帧中包含第一幕数据,结束帧不包含数据。

三.RS-232通讯设置及注意事项:
波特率:2400bps。
格 式:1个起始位,8个数据位,1个奇偶位,1个停止位。
奇偶位:发送屏号时“奇偶位”=1,发送数据时“奇偶位”=0。
发送完“屏号”后要延时15ms。
每字节之间考虑设置“延时”(大部分情况下字节之间不需要延时)。
每帧之间一定考虑设置“延时”。

高手们能提供思路,如何做?
假如我要在屏上显示一个字母“K”,发送命令应如何写?
 
内码条屏通讯协议
一,帧格式:
|<-8bytes控制信息->|<-90bytes 显示内容->|
|1|2|3|4|5|6|7|8|9|10|11|12|....................|103|
1: =(n+50h ) n为屏号
2: =(n+50h ) n为屏号
3: =(n+50h ) n为屏号
(发送第1,2,3字节时“奇偶位”=1,发送第4—103字节时“奇偶位”=0)
4: 帧标志
=7FH 起始帧帧标志
=7EH 数据帧帧标志
=7DH 结束帧帧标志
5: 0
6: 0
7: 到本幕结束标志
=0 还有其他幕
=1 到本幕结束
8: 幕与幕之间延时
=0---19(秒)
9: 动画
=0---4
10: 引入引出方式
11: 速 度
12: 追加方式
13—102:数据
103:累加和(4---102字节相加,溢出不管)

帧格式详细描述:
1:)
起始帧结构(共103个字节):
第一,二,三个字节为屏号:若接受屏为n号屏则第一,二,三个字节填充n+50h(十六进制)
第四个字节为起始帧帧标志7fh(十六进制)
第五,六,七个字节为0
第八个字节为幕间延时,既一幕数据在屏上的停留时间,取值为0到19,单位为秒。要使该 参数该值只有在第12个字节指定为暂停方式是才有效。
第九个字节指定该幕的动画方式,该值只有当第12个字节指定为动画方式时才有效。
动画方式(Cartoon)取值为:0:吃豆、1:射箭、2:举重、3:狮子、4:奔马
第十个字节为该幕的引入,引出方式。
该字节的高四位为引入方式,低四位为引出方式;
引入方式:
YingRu= 0:"右端-左端移入"
1:"左端-右端移入"
2:"下端-上端卷入"
3:"上端-下端卷入"
4:"右端-左端跳入"
5:"左端-右端展开"
6:"右端-左端展开"
7:"下端-上端展开"
8:"上端-下端展开"
9:"中间-两端展开"
10:"两端-中间展开"
11:"中间-上下展开"
12:"上下-中间展开"
13:"立 即 显 示"
14:"预 备"
15:"随 机"
引出方式:
YingChu= 0:"右端-左端移出"
1:"左端-右端移出"
2:"下端-上端卷出"
3:"上端-下端卷出"
4:"右端-左端跳出"
5:"左端-右端闭合"
6:"右端-左端闭合"
7:"下端-上端闭合"
8:"上端-下端闭合"
9:"中间-两端闭合"
10:"两端-中间闭合"
11:"中间-上下闭合"
12:"上下-中间闭合"
13:"立 即 消 失"
14:"预 备"
15:"随 机"
第十一个字节为速度:指定该幕移动的速度。取值为0到7,0最快。
第十二个字节为追加方式:
|动画|停止|分割|时间|连续|暂停| |闪烁|
(高位) (低位)
当相应的位为1时表明该种追加方式有效。
从第十三个字节到第102个字节为要发送的数据。数据格式如下:
当该字符为汉字时,一个字符占用四个字节:
|字体属性|区码|位码|0|
当为一个西文字符时,一个字符占用两个字节:
|字体属性|ASCII码|
单色条屏字体属性取值为:
08h(十六进制):细体正常
22h(十六进制):细体反白
28h(十六进制):粗体正常
02h(十六进制):粗体反白
双色条屏字体属性取值为:
|D7|D6|D5|D4|D3|D2|D1|D0| 00 black 00 black 00 black
| | | | | | | | 01 red 01 red 01 red
|__| |__| |__| |__| 10 green 10 green 10 green
| | | | 11 yellow 11 yellow 11 yellow
宽 套 主 背 套 主? 背
例: xx 01 00 00 -- green.yellow.red
xx 10 00 00 -- red.yellow.green?
第103个字节为累加和:该累加和为除屏号(既前三个字节)和最后一个字节(既第 103个字节)外该幕的其余字符的累加值。

2:)
数据帧结构(共103个字节):数据帧(7E帧)除帧标志为“7EH”外,其他与起始帧一样。
3:)
结束帧结构(共103个字节)。
第一,二,三个字节为屏号:
若接受屏为n号屏则第一个字节填充n+50h(十六进制)
第四个字节为结束帧帧标志7dh(十六进制)
第5个字节到第102个字节全为0
第103个字节为累加和:
该累加和为除屏号(既前三个字节)和最后一个字节(既第 103个字节)外该幕的其余字符的累加值。

二.发送方法:
1.起始帧+N个数据帧(0<=N<=199)+结束帧。必须最先发送起始帧,然后发送数据帧,最后发送结束帧。起始帧中包含第一幕数据。结束帧不包含数据。起始帧,数据帧的“到本幕结束标志”必须置“0”。
2.起始帧。但起始帧中的“到本幕结束标志”必须置“1”。
3.起始帧+N个数据帧(0<=N<=199)。其中最后一个数据帧中的“到本幕结束标志”必须置“1”。
说明:A,起始帧中包含第一幕数据,结束帧不包含数据。

三.RS-232通讯设置及注意事项:
波特率:2400bps。
格 式:1个起始位,8个数据位,1个奇偶位,1个停止位。
奇偶位:发送屏号时“奇偶位”=1,发送数据时“奇偶位”=0。
发送完“屏号”后要延时15ms。
每字节之间考虑设置“延时”(大部分情况下字节之间不需要延时)。
每帧之间一定考虑设置“延时”。

高手们能提供思路,如何做?
假如我要在屏上显示一个字母“K”,发送命令应如何写?
 
简单,我专门调屏。qq:78291176
 
你的问题很简单,随便找个做串口通讯的就可以做。
 
给你个正确答案...........我......
 
我也做过LED,不过通信协议和你的不一样....
 
sim_might,可否留下qq,我们讨论一下
 
没时间按协议给你写!
留下mail 我给你传一个类似的 协议及 程序!
 
谢谢lijun_snut:
liuying1129@163.com
liuying7575367@163.com
 
串口的底层是什么啊!
 
谢谢lijun_snut,麻烦也给我一份:
hailer520@tom.com
 
我是这样写的,可是不行,请大侠们指点一下:
implementation
var
hComm:THANDLE;
DCB:tdcb;

{$R *.dfm}
procedure initcom(btl,STOPBITS,PARITY,BYTESIZE:integer);
begin
GETCOMMSTATE(hcomm,DCB);
DCB.BAUDRATE:=btl;
DCB.STOPBITS:=STOPBITS;
DCB.PARITY:=PARITY;
DCB.BYTESIZE:=BYTESIZE;
SETCOMMSTATE(hcomm,DCB);
end; //}

procedure outdata(b:byte);
begin
filewrite(hcomm,b,1);
end;//}

function disp(InStr,FontName,BitmapName:PChar;FontSize:byte;comm:byte;number:byte;btl:integer;x:integer;y:integer;mode:byte;speed:byte;delaytime:byte):byte;
const
ramadr=0;
Page=1;
pagecount=1;
colorswap=0;
rgswap=1;
refresh=1;
var
commstr:pchar;
begin
commstr:=pchar('com'+inttostr(comm));
hComm:=CreateFile(commstr,GENERIC_READ or GENERIC_WRITE,0,nil,Open_Existing,FILE_SHARE_DELETE,0);//打开串口
if hcomm=INVALID_HANDLE_VALUE then
begin
disp:=0;
exit;
end;

//起始帧 start
initcom(btl,1,1,8);//初始化串口
sleep(15);
outdata($50);//屏号 第1字节
//sleep(15);
outdata($50);//屏号 第2字节
//sleep(15);
outdata($50);//屏号 第3字节
sleep(15);
initcom(btl,1,0,8);//初始化串口
sleep(15);
outdata($7F);//帧标志字节 第4字节
outdata($00);// 第5字节
outdata($00);// 第6字节
outdata($FF);//到本幕结束标志字节 第7字节
outdata($02);//幕与幕之间延时字节 第8字节
outdata($00);//动画字节 第9字节
outdata($00);//引入引出方式字节 第10字节
outdata($00);//速度字节 第11字节
outdata($00);//追加方式字节 第12字节
//begin data
outdata(fontsize); //第13字节
outdata($70); //p //第14字节
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);//outdata($00);outdata($00);
//end data
outdata($F8); //第103字节
//起始帧 end

{sleep(50);

//数据帧 start
initcom(2400,1,1,8);//初始化串口
outdata(number+$50);//屏号 第1字节
sleep(15);
outdata(number+$50);//屏号 第2字节
sleep(15);
outdata(number+$50);//屏号 第3字节
sleep(15);
initcom(2400,1,0,8);//初始化串口
outdata($7E);//帧标志字节 第4字节
outdata($00);// 第5字节
outdata($00);// 第6字节
outdata($00);//到本幕结束标志字节 第7字节
outdata($01);//幕与幕之间延时字节 第8字节
outdata($01);//动画字节 第9字节
outdata($00);//引入引出方式字节 第10字节
outdata($00);//速度字节 第11字节
outdata($00);//追加方式字节 第12字节
outdata(fontsize); //第13字节
outdata($4B); //K //第14字节
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($7E+$00+$00+$00+$01+$01+$00+$00+$00+$08+$4B);
//end data
//数据帧 end //}

sleep(15);

//结束帧 start
initcom(btl,1,1,8);//初始化串口
sleep(15);
outdata($50);//屏号 第1字节
//sleep(15);
outdata($50);//屏号 第2字节
//sleep(15);
outdata($50);//屏号 第3字节
sleep(15);
initcom(btl,1,0,8);//初始化串口
sleep(15);
outdata($7D);//帧标志字节 第4字节
outdata($00);// 第5字节
outdata($00);// 第6字节
outdata($00);//到本幕结束标志字节 第7字节
outdata($00);//幕与幕之间延时字节 第8字节
outdata($00);//动画字节 第9字节
outdata($00);//引入引出方式字节 第10字节
outdata($00);//速度字节 第11字节
outdata($00);//追加方式字节 第12字节
outdata($00);
outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);//outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
//outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);outdata($00);
outdata($7D);
//结束帧 end
{/////////////////////begin data

fileclose(hcomm);

disp:=2;
end; //}
fileclose(hcomm);

disp:=2;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if disp('','','',$08,1,1,2400,100,100,1,1,15)=2 then
showmessage('发送成功!');
end;

end.
 
不用这么麻烦吧,用spcomm就可以了,很简单,我的程序都和三个厂家的屏配合过了
 
顶一下,关照中。。。
 
串口通讯重在自定义的通讯协议,帮你顶。。。。。。。。
 
我也需要 能发一份吗?
rommelma@126.com 谢谢
 
协议不够严谨
缺少转译
 
to lijun_snut:
能否给我一份,谢谢
goldstone2026@sina.com.cn
 
我没看明白,能否给我一份。smell29@sohu.com
 
后退
顶部