7寸视频&串口显示模组调试技巧之1——层切换效果
0赞7寸视频&串口显示模组调试技巧之1——层切换效果
题记:
历经一年,终于完成了视频&串口模组的开发和研制,目前已经开始向部分客户小批量供货了。从最原始的5.7寸640*480的视频采集模组,到5.7寸640*480的视频&串口模组,再到今天7寸800*480的视频&串口模组,特权花费了很大的心血,尤其是第一台原型样机的开发调试。
这款7寸的视频&串口模组(型号:M070AS26)也有机会搬上台面与各位网友见面。特权同学希望藉着后面一系列的开发指南、应用参考和调试技巧,能够帮助各位全方面的了解她。若是正好项目中能够用上类似产品,那就正好考察一下这台模组的功能、性能。
大家若对后续的文章有任何看法见解或是建议要求,特权同学都愿意洗耳恭听——或许您的一句话就会带来我们下一款产品的创新和超越。
在《7寸串口&视频液晶显示模组使用说明书.pdf》的指令集中有如下说明:
当叠加层色彩为0x0000时,当前显示视频层图像;当叠加层色彩为0xffff时,则当前显示图片层图像;否则,当前像素将显示叠加层数据所表示的相应色彩。
这句说明作何理解呢?实际上,晶奥科技的串口系列显示模组通常有两层,带视频功能的模组则有三层。所谓两层或三层又到底是怎么回事呢?下面特权同学将带大家领会其中的奥妙。
层的概念
先来了解一下层的概念及不同层的用处。串口&视频模组是一款智能模组,它包括了叠加层、图片层和视频层。所谓叠加层,顾名思义,就是可以把一些色彩值叠加到本身显示为图片或视频的当前显示画面中,一般能够在叠加层显示的指令(或者确切的说可以操作叠加层数据变化的指令)如表1所示,包括文本显示、置点、多线段连线、画圆和区域操作。叠加层最大的特点是用户可以直接的访问读写,即通常说是的“所见即所得”,用户所送出的值即最终的显示色彩(但0x0000和0xffff两个保留值是例外)。
表1 叠加层操作指令
分类 |
功能 |
指令 |
指令参数 |
描述 |
文本显示 |
16X16点阵GB2312国标简体汉字 |
0x54 |
Xadd(2Byte) + Yadd(2Byte) + String |
(Xadd,Yadd)为当前字符串显示的启示坐标。String为多个需要显示的国标码值。每个国标码为两个字节,其中高字节在前、低字节在后。若显示ASIIC码,则直接送ASIIC码值即可。 |
32X32点阵GB2312国标简体汉字 |
0x55 |
|||
64X64点阵GB2312国标简体汉字 |
0x6e |
|||
置点 |
背景色显示多个点 |
0x50 |
Xadd(2Byte)+Yadd(2Byte) +…… |
(Xadd,Yadd)为当前需要显示背景色像素点的坐标。若显示n个点,则连续送n次的X和Y坐标值。该指令主要用于删除点。 |
前景色显示多个点 |
0x51 |
(Xadd,Yadd)为当前需要显示前景色像素点的坐标。若显示n个点,则连续送n次的X和Y坐标值。 |
||
多线段连线 |
多个指定点用线段进行连接(前景色) |
0x56 |
Xadd(2Byte)+Yadd(2Byte) +…… |
(Xadd,Yadd)为当前需要用前景色连线的像素点坐标。若连接n个点,则送n次X和Y坐标值。 |
多个指定点用线段进行连接(背景色) |
0x6d |
(Xadd,Yadd)为当前需要用背景色连线的像素点坐标。若连接n个点,则送n次X和Y坐标值。该指令主要用于删除点。 |
||
频谱显示 |
0x75 |
X0add(2Byte)+Y0add(2Byte)+Hmax+h1+h2+…… |
X0add为x轴坐标起点,Y0add为频谱水平起点,Hmax(1Byte)为谱线的最大高度。hi(0=0,1,2……)为单根谱线的高度(1Byte),每增加一个i值,x轴坐标自动增1。谱线显示前景色,比hi值大的区域显示背景色。 |
|
画圆 |
画圆弧 |
0x57 |
Type(1Byte) + xadd(2Byte) + yadd(2Byte) + r(1Byte) |
Type=0x00:背景色画圆;Type=0x01:前景色画圆。以(xadd,yadd)为圆心,画半径为r的圆弧。 |
区域操作 |
区域清屏(背景色填充) |
0x64 |
X0add2Byte) + Y0add(2Byte) + X1add2Byte) + Y1add(2Byte) |
对起始坐标(X0add,Y0add)到结束坐标(X1add,Y1add)的矩形区域使用背景色填充。 |
整屏清屏 |
0x52 |
无 |
背景色填充整屏显示。 |
图片层即用于存取当前显示图片的存储区,这个层和叠加层略有不同,不是用户可以直接读写访问的。当用户使用图片调用指令时,模组内部自动将原本存储在非易失存储器(如flash)中的图片数据加载到该层中。用户通常会使用一幅漂亮的图片作为界面背景,也可以使用一些小图片拼凑出一幅完美的显示界面,这些图片显示方式都为我们的所模组支持。如表2所示,为该模组的图片层相关指令。
表2 图片层指令
分类 |
功能 |
指令 |
指令参数 |
描述 |
图 片 显 示 |
满屏区 |
0x70 |
Photo_num(1Byte) |
显示Flash中预存的第Photo_num(0-49)幅满屏图片。 |
小图区 |
0x9c |
Photo_num(1Byte) + xadd(2Byte) + yadd(2Byte) |
在以(xadd,yadd)为起点的位置显示Flash中预存的第Photo_num(0-191)幅小图片。 |
最后是视频层,这个层也非叠加层一样是用户可以直接操作的。用户可以通过相关指令控制该层的显示与否,也可以缩放或任意位置摆放该层的显示图像。视频层相关的操作指令如表3所示。
表3 视频层指令
分类 |
功能 |
指令 |
指令参数 |
描述 |
AV显示控制 |
拍照指令 |
0x80 |
0x40 + page(1Byte) |
执行一次拍照操作,page表示拍照存储页,可取值为1-7。 |
拍照显示 |
0x41 + page(1Byte) |
执行拍照显示,page表示显示的拍照页,可取值为1-7,当希望返回正常实时AV显示时,设置page = 0即可。 |
||
视频显示模式 |
0x88 |
Dis_mode(1Byte) + Xpos(2Byte) + Ypos(2Byte) |
Dis_mode为视频缩放控制寄存器:0—640*480; 1--480*360; 2—400*300; 3—320*240;Xpos和Ypos为视频显示起始坐标,高字节在前。 |
|
AV芯片配置功能 |
0x8f |
ADDR(1Byte) + DATA(1Byte) |
具体功能定义查看说明⑧ |
层的切换
再从硬件结构上来理解层的区别,对于液晶显示屏上的任意像素点而言,它对应着16位的色彩数据。通常在模组处于工作状态时,叠加层、图片层、视频层三个层同时分别输出相同像素点的16位色彩数据,而此时液晶屏上只能显示其中的一个数据。我们通过控制叠加层中的数据来切换不同的层(即决定是显示叠加层、图片层还是视频层的数据)。如图1所示,每个液晶像素点在显示时,同时输出叠加层、图片层和视频层数据,而叠加层的数据取值决定了图片层数据显示与否,叠加层和图片层数据共同决定了视频层数据显示与否。对于叠加层而言,它所输出的0xffff和0x0000这两个数据是保留作为层切换数据(相应在叠加层就无法显示0xffff和0x0000的色彩了),也即通常所说的透明层。在模组内部会判断叠加层的数据,如果为0xffff,则当前像素点显示的数据来自图片层,而此时图片层的数据不一定就是最终显示的数据,若图片层数据为0x0000,则最终显示为视频图像;如果叠加层不为0xffff,则还需要判断叠加层数据是否为0x0000,若是,则显示视频层,否,则显示叠加层本身。
图1 层显示原理
效果演示
说了这么多,也许大家还是犯傻,到底是怎么回事啊?说起来好像蛮轻巧的,实现起来到底效果又如何?下面就有带大家来领略一下对层的妙用。
如图2所示,就是叠加层中带上图片显示的效果。如何实现的呢?我们先发送清屏指令(清屏色彩为红色),液晶屏就会满屏红色。接着发送小图片显示指令(包括该图片的具体位号和显示位置),调出图2所示的一个飞行扫描界面,但是发送完该指令后发现图片并没有马上出现,为什么?回顾“层的切换”小节内容,原来是因为当前叠加层满屏红色(对应数据为0xf800),而图片层需要显示的一个前提是叠加层数据为0xffff,那么若要让图2的图片显示出来,则还需要对图片所在矩形区域进行清屏(清屏色彩为0xffff)。
图2 图片层和叠加层
图片层和视频层显示的效果如图3所示。首先发送叠加层清屏为0xffff指令,将终端显示的主动权交给图片层。对于图片层,若是显示数据为0x0000,那么相应的显示色彩为视频层数据。图3中就是充分利用这一技巧,作了一幅带坐标指示并且部分底色为0x0000的图片,透过图片的0x0000色彩,最终显示就看到了视频图像。
图3 图片层和视频层
如图4所示,“晶奥”两字是处于叠加层,前景色为黄色,背景色则为显示图片层的0xffff,那么最终就实现了图片层上叠加字符的效果。实际上,如图3的实现方式,因为图片层中嵌入了视频层的现实,因此叠加层若为数据0xffff就能够同时也叠加到由图片层决定的视频层上。而通常情况下,若想在视频层上叠加字符(点、线、圆等其他相关指令类似),则可以送前景色为字符色彩,背景色为显示视频层的0x0000。
图4 叠加层和图片层/视频层
公司链接: