实现串口通讯,控制LED单行显示屏的显示,通讯协议下述,串口通讯部分以解决,现不知道写存储是否只能依靠汇编语言实现,如何与VB结合?显示屏通讯协议
1. 组帧:
   上位机与下位机要通讯的数据由4个字节的帧头加64字节的数据组成一帧。即:
0 1 2 3 4-67 68
屏号 帧类型 控制代码 控制代码 64 字节数据 累加和其中:屏号:表示显示屏编号,范围为:00H~FFH,以反码发送
  帧类型:表示帧的类型。
  控制代码:
    累加和:由帧头的帧类型开始累加,(即帧头第二个字节)
2.  代码帧格式。(显示的起始幕=00,幕数=最后一帧幕号+1,由屏内自动计数)
帧头:
0 1 2 3
屏号 03H 幕号低位 幕号高位数据:
0 1 2 3 4--63
字数 引入方式 引出方式 附加方式 字符代码3.  调时帧格式。(显示的起始幕=00,幕数=最后一帧幕号+1,由屏内自动计数)
帧头:
0 1 2 3
屏号 02H 00H 00H数据:
0-7 8 9 10 11
00H  秒 分 时 日
12 13 14 15 16
月 00H 星期 年高 年低
17-63
00H
注:时间数据均为BCD码
秒:00H--59H ;分:00H--59H; 时:00H--23H
日:01H--31H;   月:01H--12H; 年高:19H---20H;
年低:00H--99H; 星期:01H-07H
其中:星期一:01H,星期二:02H…..星期日:07H

通讯过程:波特率=9600bps,RS232协议
 1.联网通讯:(即一台电脑可带N个显示屏,屏号=90H--9FH)
通讯开始时,上位机自主的连续发送4字节帧头+64字节数据+1字节累加和,共发送69字节的数据,累加和从帧头的第二字节开始做累加。当第一帧数据发送后,上位机可重复上述过程发送第二帧数据,至所有数据发送完毕。
2.单机通讯:(即一台电脑带1个显示屏,屏号=0FFH)
通讯开始时,上位机先发1字节的屏号,当接收到下位机回传的相同屏号后,自主的连续发送3字节帧头+64字节数据+1字节累加和,共发送69字节的数据,累加和从帧头的第二字节开始做累加。当第一帧数据发送后,等待下位机回传的累加和,若累加和相同,上位机可重复上述过程发送第二帧数据,至所有数据发送完毕。否则重新发送上一帧数据。举例:(显示字型:全角=16x16点阵,半角=16x8 点阵)
若显示屏显示以下信息,且显示方式设定为:引入方式为↑移,引出方式为连续(既该幕的引出由下幕的引入确定),附加方式为停留,则数据代码为迪克希玛公司欢迎您!
地址 代码 注释
00H 0AH 字数为10个汉字
01H 0BH 引入方式为↑移
02H 0EH 引出方式为连续
03H 00H 附加方式为停留
04h 20h 属性
05H 0B5H “迪”的国标区号
06H 0CFH “迪”的国标位号
07h 20h
08H 0BFH “克”的国标区号
09H 0CBH “克”的国标位号
…… …… ……
…… …… ……
20h
0C4H “您”的国标区号
0FAH “您”的国标位号
20h
0A2H “!”全角国标区号
0A6H “!”全角国标位号   若显示屏显示以下信息,且显示方式设定为:引入方式为↑移,引出方式为连续(既该幕的引出由下幕的引入确定),附加方式为停留,则数据代码为  Dixima 欢迎您!     地址 代码 注释
00H 0EH 字数为14个全半角字
01H 0BH 引入方式为↑移
02H 0EH 引出方式为连续
03H 00H 附加方式为停留
04h 20h
05H 0A1H 全角空格国标区号
06H 0A1H 全角空格国标位号
07h 20h
08H 0A1H 全角空格国标区号
09H 0A1H 全角空格国标位号
0ah 21h
0bH 44H 半角“D”的ASC码
…… …… ……
21h
20H 半角空格的ASC码
20h
0BBH “欢”的国标区号
0B6H “欢”的国标位号
…… …… ……
20h
0C4H “您”的国标区号
0FAH “您”的国标位号
21h
21H 半角!的ASC码
20h
0A1H 全角空格的国标区号
0A1H 全角空格的国标位号

解决方案 »

  1.   

    联网通讯:比较简单 你把数据都装到一个数组上就可以了反正是定长的 
    mscomm .ouput=out(68)
    就发送一帧了
    当然你先要做一些mscomm的初始化单机通讯:先发送 
        loop 
        Do While True                                  '数据接收        DoEvents
            if flag=ture then exit do ‘ 当你接收到信息的时候就跳出
             if flag=ture then exit sub                               (你也可以加超时跳出)
        Loop
       mscomm .ouput=out(68)  发送你的帧
          然后再等待 返回的累加和
          对比咯
     我的想法是用oncome事件来接收的 在oncome事件上做一些判断来控制你跳出等待的信号 
      

  2.   

    多谢domhuang,我先试试,有问题还得请教!
      

  3.   

    很难吗?
    连接你的仪器先,然后Private Sub Command1_Click()
    Dim byteloop As Integer
    Dim strsend As String
    For byteloop = 1 To Len(Text1.Text) Step 2
        strsend = Mid$(Text1.Text, byteloop, 2)
        MSComm1.Output = Chr$("&h" + strsend)
    Next
    End Sub
    在text1.text中输入16进制的字符,如:祝您好运 是 D7A3C4FABAC3D4CB希望能帮到你一点