图3 DGUIS软件
除了DGUIS制作工具外,开发屏带了一个转接板,把屏上的接口转接出来,主要的接口有 AD接口,串口和GPIO口,这些接口可以供业务软件使用,扩展屏的功能,对于一些简易的应用,可以直接使用这些接口。COF屏主要的通讯是使用串口,病自带了一个USB转串口的芯片:xr21v141x,可以通过USB线插入电脑进行对屏进行串口通信。在迪文论坛可以找到这个芯片的驱动,安装驱动后,电脑系统理就多出来一个新的串口,就可以用通用的串口开发工具进行通讯,比如SSCOM5.1软件,这个软件也可以非常方便把常用的指令记录下来,快速的发送指令。另外可以安装官方提供的串口通讯软件ED4,如图4所示。这个软件按资料说明,可以读写地址数据,下载文件等功能,但实际使用时,多次出现电脑蓝屏。因此后续测试主要还是使用SSCOM软件。
图4 ED4软件主界面
应用测试描述
此次测试将针对这个屏除的HMO的DGUIS制作工具外,利用开发屏带的一个转接板把屏上处理器的接口转接出来加以测试。这些接口主要有 AD接口,串口和GPIO口,这些接口可以供业务使用并完成相关的电压检测,IO控制,PWM输出,串口通信等功能。
根据本COF屏特点,本次设计应用场景为酒店客房智能控制应用,主要测试场景为COF屏作为客房的客控,连接酒店中控一起完成客房终端智能控制和管理。作为客控首先需要把房间内设备的状态传输到中控,接受中控的指令完成对房间设备的控制。客控也需要单独接收客房客人对房间的控制。主要控制的设备为门锁,灯光,空调,网络,窗帘,影音设备等。
测试主要有COF触屏作为客控,采集客房环境数据:温度、湿度向中控传输报告。中控向客控发送控制指令,客控显示欢迎客人界面以及通过IO控制房间空调提前开启功能。在测试环境中采用IO控制LED的方式表示对外部设备的控制。
测试硬件连接
硬件连接如图5所示,这里使用联盛德德微W801作为模拟中控板系统,中控板通过uart1串口与COF屏uart2串口相连,同时COF屏使用W801开发板提供5V的供电。 W801使用UART0通过USB串口连接PC,用于打印中控接收到的信息,另外便于对COF屏测试收发指令,在中控里设计了特别的指令转发控制,指令转发可以让PC通过W801对COF屏下发指令,同时也可以在W801上完一些自动化的指令收发与解析,业务逻辑管理,对外wifi连接等扩展功能。这样可以使COF屏通过中控的wifi连入互联网网络,能够进一步提高其通信灵活性。
图5 测试硬件连接图
主要软件实现
首先通过DGUS设计界面交互组件。开始加入整体的主要页面,主要有1.欢迎页面;2.首页;3控制页;4.天气预报几个页面。界面图图6所示。
图6 智能客控界面图
第一屏设计为欢迎界面,显示酒店的外景图和实时时间以及欢迎入住的客户姓名和欢迎词。这里考虑需要汉字显示,并且尽可能比较美观的显示文字,采用了自定义字库的方式进行字库的使用。
自定义字库使用工具TS4.exe,在编码选择处选择GB2312,字体选择隶书,字号选择24,字模大小选择 32x32 ,其它默认选择即可,在选择字号后可以在左侧观察一下输出的字形的情况,如果有较大距锯齿可以增大字号或则减少字号,使字号输出的字和字模大小最匹配时就可以,不同字体的字号输出的字模大小不一样,因此需要对不同字体进行测试,如图7所示。
图7 自定义中文字库制作
在DGUS里选中第一个页面,分别放置 实时时空控件1以及文本显示控件2,文本控件里设置编码方式为GB2312,,文本长度,字库文件编号和变量地址。如图8所示。
图8 欢迎页面制作
第二屏设计为主导航界面,导航界面主要为客房控制的主要功能导航和现实酒店宣传的图片组,图片组这里采用了动画显示组件,是为了能够轮播多张图片,形成轮播图效果。下方是功能导航按钮。导航按钮使用一般基础触控组件,完成页面的跳转。如图9所示,其中动画组件显示的动画图片单独的打包设计,方式是使用DGUS 软件里提供的DWIN ICL工具,把所需要显示的图片单独放到一个目录下,然后再ICL 工具把这些图片所在目录选择上,右侧将自动显示目录下所有图片内容,图片支持bm,png,jpeg格式,图片名字按播放顺序加以编号,最后点生成ICL即可生成ICL资源文件,如图10资源文件也需要按最后的存储位置加以编号,此编号在DGUS制作工具右侧的图标文件里需要设定上,同时设定好图片的起始,结束的编号,这样多组动画图片可以打包到一个ICL文件里。
基础触控组件只要设置跳转的页面ID即可,还可以设置按下时按钮区域的图片变化,完成图片按钮按下的动画效果。
图9 主功能导航页面制作
图10 ICL 资源文件制作
第三屏设计为客房设备控制界面,控制界面由图标按钮组成,图标按钮区域使用按键返回控件,这样当客户按下设备控制按钮时,用户软件能够获得按键的信息,从而可以控制响应设备的运行和向中控按键的消息。同样中控也可以发送相同的按键信息达到客控与中控同时控制客房设备。客房控制界面如图11所示。在此界面分别设置好按键自动上传,键值以及变量地址即可。
图11设备控制页面制作
设计完各个界面后,检查各个组件的变量地址是否重叠,如果有重叠则会早后评上显示花屏乱码之类的问题。然后就是安排各个文件的烧写位置,CFO屏时以256K大小为一个块的单位,将界面制作生成的烧写文件写入屏中,具体烧写需要有以下操作,现在DGUS 软件里点击生成,则在DWIN_SET目录下会生成以下这些文件:
图12设备控制页面制作
其中0号文件即系统主字库,可由系统的带的0号字库文件生成工具生成。
图13 屏0号字库制作
13,14,22号文件是工具自动分配烧写位置号,其他文件则可以自行规划,总体的规划原则是,文件不能出现覆盖,比如0号文件3,082,752 Byte,则它将占用 3082752 / 262144 = 11.75..块,即它占用12块空间,烧写位置占用0~11号位置,下一个文件则只能从12号位置开始。一次类推,安排好所所有文件位置号后,进行对屏运行进行配置,通过配置生成工具完成屏的配置文件生成。如图14所示,在设置中需要按实际情况设置图中红圈部分。
图14 屏烧写配置文件设置
完成配置文件后,即可准备烧写,需要一张8G以内的TF卡,格式化为FAT32格式,在TF卡内创建DWIN_SET目录,再把上面的字库文件,bin文件以及配置访问复制到卡里,然后将卡插入转接板上,重新上电则会出现刷写界面如图15.
图15通过TF卡烧写工程到COF屏
上位机代码实现
中控即上位机上的代码如下,主要对串口完成了主要两个指令收发函数的实现,分别实现82/83写与读的操作。
int uart_send(char *send_str)
{
int i=0,j=0;
const char s[2] = " ";
char send[64] = " ";
char *token;
printf( "uart1 send:" );
j=0;
/* 获取第一个子字符串 */
token = strtok(send_str, s);
/* 继续获取其他的子字符串 */
while( token != NULL ) {
//printf( "%s |", token );
send[j]=0;
for(i=0;i<2;i++)
{
if(token>='a' &&token<='z')
token -='a'-'A';
if(token>='A' &&token<='F')
token-=7;
}
send[j] = (token[0]-0x30)* 0x10;
send[j] += (token[1]-0x30);
printf( "%.2X ", send[j] );
j++;
if(j>62) break;
token = strtok(NULL, s);
}
printf( "| len: %dn",j );
tls_uart_write(TLS_UART_1,send, j); /* output */
return 0;
}
int uart_output(char *send_dat, unsigned short len)
{
unsigned short i;
printf( " send:");
for(i=0; i
{
printf( "%.2X ",send_dat );
}
printf("n");
tls_uart_write(TLS_UART_1,send_dat, len); /* output */
return len;
}
void set_short_dat(short *addr, short dat)
{
unsigned char *_addr =(unsigned char *)addr;
_addr[1]= dat & 0xff;
_addr[0]= (dat & 0xff00) >> 8;
}
int read_t5l_data(short addr, short len)
{
char send[128]={0};
send[0]=0x5A;
send[1]=0xA5;
send[2]=0x04;
send[3]=0x83;
send[4]= (addr & 0xff00)>> 8;
send[5]= (addr & 0xff);
send[6]= (len & 0xff);
uart_output(send,7);
return 0;
}
int write_t5l_data(short addr, short* data, short len)
{
char send[128]={0};
unsigned short out_len;
int i,j;
send[0]=0x5A;
send[1]=0xA5;
send[2]=0x00;
send[3]=0x82;
send[4]= (addr & 0xff00)>> 8;
send[5]= (addr & 0xff);
for(i=0,j=0; j
{
send[6+i]= (data[j] &0xff00) >> 8;
i++;
send[6+i]= (data[j] &0xff);
}
send[2] = 3+i;
out_len = 6+i;
uart_output(send,out_len);
return 0;
}
配合中控软件,中控即可下COF屏下发通信指令,这些通信指令也可以先通过PC串口直接下COF屏的转接板下发做测试。对于一些扩展业务以及自动化的业务,则需要开发中控的软件来实现自动化的指令处理与收发。
这里主要收发有以下COF指令:
查看COF系统版本 :("5A A5 04 83 00 0F 01 ")
向本测试应用发送住客姓名:("5A A5 0a82 50 20 b3 c2 ba a3 b7 e5 20"),其中“20 b3 c2 ba a3b7 e5 20"为住客姓名的GB2312编码,
RTC实时时钟 :"5A A5 0B 82 00 1016 02 0f 00 11 25 30 00 " , 16为2022年,02月,0f为15号,11为17点,25为37分,30为48秒
RTC实际中应用,应通过i2C口接入cof屏,通过读取RTC芯片时钟向RTC地址内写入实时时间。
模拟点击屏幕,"5A A5 0B 82 00D4 5A A5 00 04 00 F0 01 78",可以通过远程发送此指令,完成远程点击界面的效果,点击坐标为 (0x0F0,0x178)
控制屏幕跳转到指令页面:5A A5 07 82 00 845A 01 00 01,可以远程通过指令,控制屏幕界面跳转到制定的页面,此处时跳转到 01 也页面
RESET 重置 COF屏指令 5A A5 07 82 00 04 55 AA 5A A5,相当于断电一下,当屏显需要复位时可以采用此方法。
调整屏幕背光亮度指令 : 5A A5 06 83 00 3101 5A 64,调节范围为 0x01~0x64
图16通过串口向屏传输控制指令与接受反馈数据
图17通过上位机向屏发送批量化指令
同时测试COF屏的C51代码开发,只要安装 keil5C51开发环境,Keil5工具安装完需要注册以下,不然编译的代码不允许超过800K. C51开发界面如图18所示,在新建工程时阅读C51代码开发指南,注意选择号MCU类型以及开始地址即可。
图18 Kell5 C51集成开发环境
下位机测试代码,即COF屏C51代码开发如下
- void main(void)
- {
- u16 itime1;
- InitCPU();
- StartTimer(1,500);
- Init_Rtc();
-
- printf("EntryMain!rn");
printf("Hello,T5Lrn");
SetPinOut(1,0);
- SetPinOut(1,1);
- SetPinOut(1,2);
- SetPinOut(1,3);
- SetPinOut(1,4);
- SetPinOut(1,5);
- SetPinOut(1,6);
delay_ms(1000);
- P1_0=0x01;
- P1_1=0x00;
- P1_2=0x01;
- P1_3=0x01;
- P1_4=0x01;
- P1_5=0x01;
- iTime1 = 0;
- delay_ms(1000);
- while(1)
- {
- Communication_CMD(2);//´¦Àí´®¿Ú8283ÃüÁîÊÕ·¢
RtcClock(); //´¦Àíi2CʱÖÓ
- ScanKeyPress();//´¦ÀíÆÁÄ»´¥Ãþ¼üÖµ
- iTime1++;
- if(iTime1%10==0)//100ms
- {
- P1_0=!P1_0; //Êä³öIO¿ØÖÆ
- P1_1=!P1_1; //Êä³öIO¿ØÖÆ
num+=2;
- num2+=num;
- write_dgus_vp(NUM_VP,(u8*)&num,1); //Êä³öUI¿ØÖÆ
- write_dgus_vp(NUM_VP2,(u8*)&num2,1);//Êä³öUI¿ØÖÆ
- if(num > 720)num=0;
if(num2 >65535) num2 = 12345;
}
-
- if(iTime1%20==0)//100ms
- {
- //printf("%x",P1_1);
- iTime1=0;
- }
- }
- }
复制代码
性能测试结果
最后对屏在工作中的性能做了简单测试:
工作输入电压位: 5.12V
屏100%亮度时,电压4.73V
屏100%亮度电流,210ma
屏10%亮度电流,46ma
全屏480x480 刷 jpeg 图时,能达到 30 fps.
应用评测总结
通过在COF屏完成一个测试应用场景,初步掌握了COF屏的开发流程和相关技巧,这款屏提供了大量的UI设计布局工具,设计工具里提供了很多常用的显示与交互组件,通过这些组件能够做出非常漂亮的界面出来,可谓是傻瓜式开发,对一些初级的交互界面,甚至不用编写代码即可完成一套UI的设计与实现。通过可视化的开发方式,大大减轻了UI开发中字库、坐标定位、UI布局、响应交互、图片处理等繁琐的底层工作,使开发者专注其自己的业务,利用工具即可完成所需的UI的设计,大大提高了UI开发的速度,同时屏带的接口可以对外通讯和提供一些基础的IO,AD,PWM功能,能够满足大智能互联下物联网应用的开发需求。
在开发中也发现要熟练的掌握COF智能屏的开发,有一些问题,主要问题为,这种完全依靠傻瓜式工具开发的模式,需要对很多开发中的背景知识,以及各种定义,术语进行完整的定义和说明,往往一个很简单的问题,因为开发资料含糊不清,而造成歧义。开发文档也需要更加完善,需要面向开发者思维,按开发流程组织开发使用书,而不能只提供一些数据指令手册,而对这些指令的使用条件,背景说明给忽略,另外因为这些细节可能用文字描述较为繁琐,建议可以提供一些视频的开发教程。对每个组提供一个开发示例。增加更多的C51代码示例,这样方便更多的开发者快速上手,从而达到在业界更广泛的应用。
在此次测试开发中得到了迪文工程师的大力帮助,在此对他们表示感谢。最后放一个基于COF只能屏的客控视频供欣赏。
几张实际产品效果照片: