《LED显示屏通讯协议.docx》由会员分享,可在线阅读,更多相关《LED显示屏通讯协议.docx(6页珍藏版)》请在课桌文档上搜索。
1、VisionShow显示屏掌握器通讯协议通讯方式 RS-232C波特率:9600,14400,19200,38400,57600,115200可选(由掌握软件进展设置)数据长度:8位校验位:无停顿位:1位流掌握:无 RS-485与RS-232C一样 10/100M以太网可支持局域网或Intemet,如需远程掌握可承受外置CDMA模块进展无线通讯数据构造及数据组织格式显示数据由以下的构造组成:根节点(RoOt)1 一一页面(Leaf)2 -页面I字符串(String)数据构造特点: 根节点下只能由页面节点构成,不能消灭其他节点 页面节点下只能由各种对象节点构成,不能消灭根节点及页面节点 第一个页
2、面的计算公式为:leaf=(PIeaf)(DWORD)root+sizeof(TRoot); 第一个对象的计算公式为:Object=(PObject)(DWORD)1eaf+Sizeof(TLeaf); 下一对象的计算公式为:Ieaf=(PLeaf)(DWORD)leaf+leaf-size)object=(Pobject)(DWORD)object+object-size)数据构造的C语言形式:根节点(Root)#defineROOT_PLAYOxll#defineROOTJ)OWNLOAI)0x12#defineScreenjnicolorOxOOdefineSCREEN_COLOROxO
3、l#defineSCREEN_GRAY0x02#defineSCREE)CFULLCOLoR0x03typedefstructROOTWORDid;数据流类型WORD.count;页面数目DWORDsize;整个数据流字节数(包含数据字节数和该元素本身字节数之和)WORDtype;要求的显示屏类型(单色、双色、全彩)WORDReserved;)TRoot,*PRoot;数据构造说明:id:说明数据流的类型,有两种数据类型ROOT_PLAY及RoOT.DOWNLOADsize:说明该构造及下属数据的长度之和(特别留意:全部数据构造中的Size字段都必需是4字节对齐,假设数据不是4字节对齐,必需在
4、数据之后填充0)type:说明数据流所要求的显示屏类型(SCREENJJNICOLOR,SCREEN_COLoR)页面节点(Leaf)ttdcfineOBJECT_LEAF0x30typedefstructLEAFWORDid;页面标识WORDcount;对象数目DWORDtime;页面显示时间单位为亳秒DWORDReserved;DWORDsize;对象字节数TLeaf,*PLeaf;数据构造说明:id:固定为OBJEeT_LEAF对象构造#defineOBJECT.STRING0x33typedefstructRECT*以左上角为原点*/shortleft;shorttop;shortri
5、ght;shortbottom;TRectf*PRect;typedefstructOBJECTWORDid;对象标识,固定为OBJECT.STRINGWORDflicks;闪耀次数DWORDsize;对象字节数TRectrect;对象显示区域TObject;typedefstructSTRINGTObjectobject;对象的一般定义WORDmethod;显示方式WORDspeed;显示速度DWORDReserved2DWORDcolor;字符颜色:OXff=红色OXFFOO=绿色OXFFoOoO=蓝色DWORDfontset;字符集(一般状况0=16点阵1=24点阵)TString,*P
6、String;字符串数据构造说明:假设需要显示屏显示一个字符串,应当按如下步骤组织一个字符串:1.安排一段内存,内存的长度为:TString数据构造长度+字符串长度+12.填写TString数据构造3.将字符串拷贝到TString数据构造之后(字符串必需以NULL结尾(OXOO)method:显示方式1.马上显示2.左滚显示3.连续上滚4.中间向上下开放5.中间向两边开放6.中间向四周开放7.向左移入8.向右移入9.从左向右开放10.从右向左开放11.右上角移入12.右下角移入13.左上角移入14.左下角移入15.从上向下移入16.从下向上移入17.闪烁数据组织实例假定需要向显示屏发送字符串“
7、中国人民万岁abc”,需进展如下操作:1 .填写ROot数据构造(假定已安排了足够的内存,root已指向安排的内存)root-id=ROOT_PLEAY;root-count=0;root-size=sizeof(TRoot);root-type=SCREEN.COLOR;2 .填写Leaf数据构造leaf=(PLeaf)(DWORD)root+sizeof(TRoot);leaf-id=OBJECT_LEAF;leaf-size=sizeof(TLeaf);leaf-count=0;Ieaf-Ximc=100O;root-count+;此处需回填root对象,说明增加了一个页面root-si
8、ze+=leaf-size;同样root所下属的数据长度已增加3 .填写String数据构造String=(PString)(DWORD)Ieaf+Sizeof(TLeaf);string-object.id=OBJECT.STRING;string-objcct.rect.left=0;string-objcct.rect.top=0;string-objcct.reel.right=128;string-object.rect.bottom=32;说明字符串显示在(0,0128,32)这个区域内string-object.flicks=5;说明需闪耀5次string-method=17;显
9、示方式为闪耀string-speed=8;/8个时钟周期闪耀一次(时钟周期为掌握卡设置中的单步时间)string-color=OxFFFF;string-fontset=0;4.拷贝数据Str=中国人民万岁abc”;memcpy(char*)(DWORD)str*(char*)(DWORD)string+sizstring-object.sizc=sizeof(TStri处理对象4字节对齐模式if(string-oect.size&3)0Xff=红色OXFFoo=绿色OXFFOOOo=蓝色,此处为黄色字符集,0=16点阵宋体1=24点阵宋体ing+sizeof(TString),str,str
10、len(str);wf(TString)+strIcn(str)=NULL;(特别留意:每个字符串都必需以NULL结尾)ng)+strlcn(str);string-object.size=(string-object.size&-3)+4;回填Leaf对象及Root对象leaf-count+;leaf-size+=string-object.size;root-size+=string-oect.size;上面的过程执行完成后,显示数据已经组织完毕,下面就是将数据组织起来发送出去数据发送数据发送是将上面形成的数据发送到掌握器,由于发送过程可能产生错误、超时、溢出等错误,为了解决这些问题,必需
11、制定有效的数据组织方式,使接收方能校验数据的正确性。数据发送流程红色表示在这个流程中属于关键的局部发送过程数据构造及常量# dcfinePKC_BEGIN0# dcfinePKC_END1# definePKC.DATA2#dcfinePKcLRESPoND3#dcfincPKP_LEADER0x55#dcfinePKPSUFFIXOxAA#dcfinePKP_FILLCHOxBB#dcfinePKP.LENGTH512#definePKP_MAX_LENGTHPKP_LENGTH*2+sizeof(TPKG_Header)*2typedcfstructPKG_HEADERWORDComman
12、d;BYTEsrcAddr;BYTEdstAddr;DWORDScrialNo;TPKG_Hcadcr,*PPKG_Header;typedefstructPKG.RESPONDTPKG_HeaderHeader;WORDCommand;WORDResult;TPKG_Respond,*PPKG_Respond;上面流程中提到的发出连接命令、发送数据帧、发送完毕帧按如下方式构造TPKG_Headerheader;连接命令headermand=PKC.BEGIN;header.srcAddr=O;hcadcr.dstAddr=O;header.SerialNo=0;数据帧headermand=PKC.DATA;header.srcAddr=O;header.dstAddr=O;header.SerialNo=当前数据帧序列号(从1开头挨次递增)if(SerialNo*PKP_LENGTHOxBB,用OXBB和字符+1替代例:原始数据为:0x55,OxAA,OxBB,替换后的数据为:OxBB,0x56,OxBB,OxAB,OxBB,OxBC具体实现可参考例如程序中的PaCk函数及dePack函数