好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

LED显示屏通讯协议.doc

7页
  • 卖家[上传人]:ss****gk
  • 文档编号:208866504
  • 上传时间:2021-11-08
  • 文档格式:DOC
  • 文档大小:235.22KB
  • / 7 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • VisionShow ffl示屏控制器通讯协议■通讯方式♦ RS-232C波特率: 9600, 14400, 19200, 38400, 57600, 115200可选(巾控制软件进行设置) 数据长度:8位 校验位:无 停止位: 1位流控制: 无♦ RS-485与RS-232C相同♦ 10/100M以太网可支持局域网或Internet,如需远程校制可采用外置CDMA模块进行无线通讯■数据结构及数据组织格式显示数据由以下的结构组成:根节点(Root)| 页而(Leaf)I 页而I 字符串(String)数据结构特点:♦根节点下只能由页面节点构成,不能出现其他节点 ♦页而节点下只能巾各种对象节点构成,不能岀现根节点及页而节点 ♦第一个页而的计算公式为:leaf=(PLeaf)((DWORD)root+sizeof(TRoot));♦第一个对象的计算公式为:object=(PObject)((DWORD)leaf+sizeof(TLeaf));♦下一对象的计算公式为:leaf=(PLeaf)((DWORD)leaf+leaf->size) object=(Pobject)((DWORD)object+object->size)数据结构的C语言形式:♦根节点(Root)#defineROOT PLAYOxll#dcfincROOT_DOWNLOAD0x12#defineSCREEN UNICOLOR0x00#defi neSCRERN_COLOR0x01#defineSCREEN_GRAY0x02#dcfincSCREEN EULLCOLOR0x03typedef struct ROOT{WORD id; //数据流类型 WORD count; //页而数FIDWORD size; //整个数据流字节数(包含数据字节数和该元素本身字节数之和) WORD type; //要求的显示屏类型(单色、双色、全彩)WORD Reserved; }TRoot, *PRoot;数据结构说明:id: 表明数据流的类型,有两种数据类型ROOT_PLAY及ROOT_DOWNLOADsize:表明该结构及下属数据的长度之和(特别注意:所有数据结构中的Size字段都必须是4字节对 齐,如果数据不是4字节对齐,必须在数据之后填充0)type:表明数据流所要求的显示屏类型(SCREEN UNICOLOR, SCREEN COLOR…)♦页面节点(Leaf)#define OBJECTJLEAF 0x30typedef struct LEAF{WORDid;//页面标识WORDcount;//对象数0DWORDtime;//页面显示时间单位为毫秒DWORDReserved;DWORDsize;//对象字节数}TLeaf,*PLeaf;数据结构说明:id:固定为 OBJECT LEAF♦对象结构林 define OBJECT_STRING 0x33typedef struct RECT{/*以左上角为原点*/shortleft;shorttop;shortright;shortbottom;}TRect,*PRect;typedefstruct OBJECT{WORDid;//对象标识,固定为OBJECT_STRINGWORDflicks;//闪烁次数DWORDsize;//对象字节数TRectrect;//对象显示区域}TObject;typedef struct STRING{TObjectobject;//对象的一般定义WORDmethod;//显示方式WORDspeed;//显示速度DWORDReserved [2]DWORDcolor;//字符颜色:Oxff=红色0xFF00=绿色0xFF0000=蓝色DWORDfontset;//字符集(一般情况0=16点阵1=24点阵)}TString,*PString;字符串数据结构说明:如果需要显示屏显示一个字符串,应该按如下步骤组织一个字符串:1. 分配一段A存,A存的长度为:TString数据结构长度+字符串长度+12. 填写TString数据结构3. 将字符串拷贝到TString数据结构之后(字符串必须以NULL结尾(0x00)) ithod: StK方式1.立即显示3.连续上滚5.中间叫两边展开7.向左移入9.从左向右展开11.右上角移入13.左上角移入15.从上向下移入17.闪烁2. 左滚显不4. 中间向上下展开6. 中间14四周展开8. 向右移入 10. 从右向左展开12.右下角移入 14.左下角移入 16. 从下向上移入■数据组织实例假定需要向显示屏发送字符串“人民万岁abc”,需进行如下操作:1. 填写Root数据结构(假定已分配了足够的内存,root已指向分配的内存)root->id=ROOT_PLEAY;root->count=0;root->$ize=$izeof(TRoot);root->type=SCREEN_COLOR;2. 填写Leaf数据结构leaf=(PLeaf)((DW ORD)root+sizeof(TRoot)); leaf->id=OBJECT_LEAF;leaf->size=sizeof(TLeaf);leaf->count=0;leaf->time=1000;root->count++; //此处需回填root对象,表明增加了一个页而root->size+=Ieaf->size; //同样root所下属的数据长度己增加3. 填写String数据结构 string=(PString)((DWORD)leaf+sizeof(TLeaf)); string->object.id=OBJECT_STRING;$tring->object.rect.left=0;string->object.rect.top=0; string->object.rect.right= 128;string->object.rect.bottom=32;"表明字符串显示在(0,0,128,32)这个区域内 string->object.flicks=5; //表明需闪烁 5 次string-〉method= 17; //显示方式为闪烁string->speed=8; //8个吋钟周期闪烁一次(吋钟周期为控制卡设置中的单步吋间)string->color=OxFFFF; //Oxff=红色 0xFF00=绿色 0xFF0000=蓝色,此处力黄色string->fontset=0; //字符集,0=16点阵宋体1=24点阵宋体4. 拷贝数据str=4‘中国人民万岁abc”;memcpy((char *)((DWORD)string+sizeof(TString)),str,strlen(str));*((char *)((DWORD)string+sizeof(TString)+strlen(str)))=NULL;(特别注意:每个字符串都必须以 NULL 结尾) string->object.size=sizeof(TString)+strlen(str);//处理对象4字节对齐模式if (string->object.size & 3) string->object.size=(string->object.size & 〜3)+4;//冋填Leaf对象及Root对象 leaf-〉count++;leaf-〉size+=string-〉object.size; root-〉size+=string-〉object.size;上面的过程执行完成后,显示数据己经组织完毕,下面就是将数据组织起来发送出去■数据发送数据发送是将上而形成的数据发送到控制器,巾于发送过程可能产生错误、超时、溢岀等错误,为了解决这些问 题,必须制定有效的数据组织方式,使接收方能校验数据的正确性。

      ♦数据发送流程红色表示在这个流程中属于关键的部分♦发送过程数据结构及常量#define PKC_BEGIN 0#define PKC_END 1#define PKC_DATA 2#define PKC.RESPOND 3#define PKP.LEADER 0x55 #define PKP SUFFIX OxAA#define PKP_FILLCH OxBB#define PKPJLENGTH 512#define PKP_MAX_LENGTH PKP_LENGTH*2+sizeof(TPKG_Header)*2typedef struct PKG_HEADER{ WORD Command;BYTE srcAddr;BYTE dstAddr;DWORD SerialNo;}TPKG_Header, *PPKG_Header;typedef struct PKG_RESPOND {TPKG_Header Header;WORD Command;WORD Result;)TPKG_Respond, *PPKG_Respond;上面流程中提到的发出连接命令、发送数据帧、发送结朿帧按如下方式构造TPKG_Header header;//连接命令header.Command=PKC_BEGIN;header.srcAddr=O;header.dstAddr=O;header.SerialNo=0;//数据帧header.Command=PKC_DATA;header.srcAddr=O;header.dstAddr=O;header.SerialNo=当前数据帧序列号(从1开始顺序递增)if (SerialNo*PKP_LENGTH

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.