7寸视频&串口显示模组开发指南之3——指令集
0赞7寸视频&串口显示模组开发指南之3——指令集
题记:
历经一年,终于完成了视频&串口模组的开发和研制,目前已经开始向部分客户小批量供货了。从最原始的5.7寸640*480的视频采集模组,到5.7寸640*480的视频&串口模组,再到今天7寸800*480的视频&串口模组,特权花费了很大的心血,尤其是第一台原型样机的开发调试。
借着2011年EDN创新奖的“东风”,这款7寸的视频&串口模组(型号:M070AS26)也有机会搬上台面与各位网友见面。特权同学希望藉着后面一系列的开发指南、应用参考和调试技巧,能够帮助各位全方面的了解她。也希望各位看官能够不吝惜手中的鼠标,轻轻一点投上一票。若是正好项目中能够用上类似产品,那就正好考察一下这台模组的功能、性能。
大家若对后续的文章有任何看法见解或是建议要求,特权同学都愿意洗耳恭听——或许您的一句话就会带来我们下一款产品的创新和超越。
(公司链接:www.lcdsoc.com)
7寸视频&串口显示模组预留给客户一条符合RS232电平标准的串口收发信号,用户只要使用这条串口通道给模组传送指令即可实现所有功能。这个串口通道通常有两个用途:一是用户的最终应用(用户嵌入式系统的串口与模组互连);二是下载用户的界面图片到模组中(PC机与模组互连)。
本文重点介绍模组的指令集以及实现的效果,后续文章会详细讨论如何使用PC机或是单片机系统与模组通信,以实现图片下载或终端应用。按照前面的分类,模组支持的指令集主要也分为两大类,一类是用户的最终应用,另一类是图片字库等的下载交互。由于后者的功能都集成在了晶奥科技提供的“晶奥串口模组集成开发工具”软件中,用户也无需深入了解指令集的详细内容,因此本文不详细论述和讨论。而对于用户终端应用(与单片机、ARM或DSP等相接口)的指令集本文要详细论述。该视频&串口模组的主要可用指令如表1所示。
表1 7寸视频&串口指令集
分类 |
功能 |
指令 |
指令参数 |
描述 |
系统 |
握手指令 |
0x00 |
在初始化时,单片机不断发送完整的握手指令(包括帧头和帧尾),若接收到正确的返回数据(0xaa+version(1Byte版本号)),表示系统初始化完成,可以执行其它操作。 |
|
显示参数配置 |
设置调色板 |
0x40 |
Fcor(2Byte) + Bcor(2Byte) |
设置前景色(Fcor)和背景色(Bcor)。 |
设置字符显示间距 |
0x41 |
Xdis(1Byte) + Ydis(1Byte) |
文本显示时,Xdis为相邻左右字符的间距,Ydis为相邻上下字符的间距(Ydis目前暂时无效,以0x00,0x00代替)。 |
|
文本显示 |
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 |
无 |
背景色填充整屏显示。 |
|
图片显示 |
满屏区 |
0x70 |
Photo_num(1Byte) |
显示Flash中预存的第Photo_num(0-49)幅满屏图片。 |
小图区 |
0x9c |
Photo_num(1Byte) + xadd(2Byte) + yadd(2Byte) |
在以(xadd,yadd)为起点的位置显示Flash中预存的第Photo_num(0-191)幅小图片。 |
|
背光控制 |
背光开启/关闭 |
0x5e |
On_off(1Byte) |
0xff—开启,0x00—关闭。上电默认关闭。开启背光的同时PWM被设置为100。 |
背光PWM调节 |
0x5f |
Pwm(1Byte) |
Pwm取值1-100,上电默认为100。 |
|
触摸屏控制 |
校准模式 |
0xe4 |
0x55+0xaa+0x5a+0xa5 |
MCU发送该指令后,液晶屏四个角上出现蓝色矩形框,用户需要用触摸笔依次点击“左上角”、“左下角”、“右下角”、“右上角”。点击相应位置并保持几十ms后该区域变成绿色,表示该点校准成功。 |
开关控制 |
0x66+0x99+0x69+0xff |
开启触摸屏控制 |
||
0x66+0x99+0x69+0x00 |
关闭触摸屏控制,上电后默认关闭 |
|||
触摸屏按下后位置上传 |
0x73 |
Xpos(2Byte) + Ypos(2Byte) |
该指令为串口模组发送给MCU。Xpos为X坐标值,Ypos为Y坐标值,均为16位,且高字节在前传送。 |
|
串口控制 |
波特率设置寄存器 |
0xe0 |
Bps_set(1Byte) |
Bps_set值用于设置串口波特率,上电后模组默认串口波特率为9600bps。如果需要更改波特率,则在9600bps波特率下发送相应指令。指令译码见特别说明。 |
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) |
具体功能定义查看说明⑧ |
特别说明
- 串口波特率可调,上电默认为9600bps。
- 帧头0xaa,帧尾0xcc,0x33,0xc3,0x3c。
- “文本显示”前需要设置好“显示参数配置”选项。
- 当叠加层色彩为0x0000时,当前显示视频层图像;当叠加层色彩为0xffff时,则当前显示图片层图像;否则,当前像素将显示叠加层数据所表示的相应色彩。
- 控制器内部串口缓冲区为128Byte,建议用户一次串口指令发送数据总量不要超过128Byte。
- 对于某些指令,如清屏指令需要耗费比较长的执行时间,用户在使用中需要在一定延时后才可再次发送其它指令。
- 串口波特率设置指令译码(建议实际应用中波特率不要超过115200bps,以保证系统长期正常稳定工作):
Bps_set指令值 |
0x00 |
0x01 |
0x02 |
0x03 |
0x04 |
0x05 |
0x06 |
0x07 |
波特率 |
1200 |
2400 |
4800 |
9600 |
19200. |
38400 |
57600 |
115200 |
Bps_set指令值 |
0x08 |
0x09 |
0x0a |
0x0b |
0x0c |
0x0d |
0x0e |
0x0f |
波特率 |
28800 |
76800 |
62500 |
125000 |
250000 |
230400 |
345600 |
691200 |
- 图片区存储说明:满屏区(位号0-49可用),该区主要用于存储满屏(800*480)图片。小图区(位号0-191可用),小图区又分为多个不同大小的图片存储块,通常建议用户根据所用图片实际大小将图片放置到对应的存储区块中,这样更有利于存储空间的利用和优化。图片存储量的计算公式为:图片X分辨率*图片Y分辨率*2(单位Byte)。例如,一张分辨率为160*30的图片存储量为160*30*2=9600Byte。
大区 |
小区(可用位号) |
图片存储量范围 |
|
最小 |
最大 |
||
满屏区 |
0-49 |
满屏(800*480*2Byte) |
满屏(800*480*2Byte) |
小图区 |
0-63 |
0 |
满屏(800*480*2Byte) |
64-127 |
0 |
382Kbyte |
|
128-191 |
0 |
126Kbyte |
- AV芯片配置功能
该指令用于配置AV芯片的相关寄存器。该指令的配置数据有两个字节:第一个字节为AV芯片配置地址,第二个字节为AV芯片配置数据。
AV芯片配置可操作的地址和数据如下表所示。
功能 |
配置地址(ADDR) |
配置数据(DATA) |
设置对比度 |
0x05 |
(默认0x80) |
设置亮度 |
0x06 |
(默认0x00) |
设置色调 |
0x07 |
(默认0x80) |
设置饱和度 |
0x08 |
(默认0x88) |
低功耗关断 |
0x04 |
0x18 |
正常工作 |
0x04 |
0x10 |
彩色显示 |
0x0b |
0x23 |
黑白显示 |
0x0b |
0xa3 |
选择VIN1 |
0x09 |
0x02 |
选择VIN2 |
0x09 |
0x42 |
自动选择 |
0x09 |
0x82 |
测试信号关:显示AV信号 |
0x0c |
0x00 |
测试信号:黑屏 |
0x0c |
0x20 |
测试信号:蓝屏 |
0x0c |
0x21 |
测试信号:75%彩条 |
0x0c |
0x22 |
测试信号:100%彩条 |
0x0c |
0x23 |
指令延时说明
由于不同的指令在串口模组内处理的时间不同,因此建议用户在发送每帧串口指令后适当的延时(部分指令不需要)。延时的长短要视指令而定,下面对几个主要指令的延时计算方法做一些说明(未罗列的指令通常不需要延时)。
指令 |
延时 |
备注 |
区域清屏(背景色填充) |
>240ns*x*y |
x*y为清屏区域总像素点数 |
整屏清屏 |
>240ns*800*480=92160000ns(约93ms) |
|
显示一幅满屏图片 |
>82ms |
|
显示一幅小图片 |
>[(x*y)/1024+1]*230us |
关于上述串口视频指令集的详细说明和使用指南还请参考晶奥科技的官方文档《串口指令应用指南.pdf》。