donatello
获得 765 次赞
帮助过2489人
【spi480272高速工业液晶屏试用体验】表格gui设计&dht11温度采集并显示 之前在51上完成了基本的表格gui设计,现在就可以将此移植到stm32上面并应用到项目中了。当时使用的测试数据是一个循环自增的变量,而现在在stm32上只需要将变量更换为实际采集到的数据就可以了。设计表格并显示变量的基本思路是:先画出大矩形->按字号画分行线->按字号乘以字体个数画分列线->在固定位置制作文字表头->在特定位置显示变量。这里需要注意的是,显示数据的地方必须要用不透明字体,否则效果大家可以自行想象。
既然stm32f412zg有海量的flash空间,那么很有必要做个bmp数组提取的实验以验证它的刷图性能。提取bmp数组的过程为: 第一,使用image2lcd工具打开图片,正确输入图片高度、宽度和取模方向,并解码成bmp数组;
官方自带的stc12 mcu主控板的性能有限,想要更进一步对spi480272屏幕进行探索的话就需要更高级的mcu主板,这里我选取了nucleo-f412zg作为新的mcu主控板。nucleo-f412zg使用stm32f412zg作为mcu,主频达100mhz,spi1最高速度为主频的一半50mhz,比spi480272屏幕的常规spi速度要求40mhz更高。另外,f412zg拥有1mflash和256kb ram,即使没有使用外置fatfs,存一张几百k的bmp图都是没有问题的。 具体连线如下图:
【spi480272高速工业液晶屏试用体验】表格gui设计&整型变量显示 由于spi480272屏幕有完备的gb2312字库,官方例程有完备的gui画线制表函数,因此我们可以用这些函数来设计美观的表格gui界面。具体方法:先画出大矩形->按字号画分行线->按字号*字体个数画分列线->在固定位置制作文字表头。画线的函数如下:
搞定了触摸屏捕捉函数,就可以搞一些有意思的东西了,比如数码触摸画板。数码触摸画板的操作流程非常简单:捕获坐标->单坐标或多坐标画点。实际应用中单坐标画点的效果并不明显,所以除非屏幕够大或者能够设置画笔粗细,市面上的触摸画板产品都是采用九宫格多坐标画点的方法。另外,触摸板的美观效果与触摸捕捉相应时间和显示刷新时间密切相关,一般而言,两个点描绘的时间间隔小于30ms,人眼就会认为这两个点是连续的而不是分离的;反之,两个点描绘的时间间隔大于30ms,人眼就会认为这两个点是分离的,因此,确保单点描绘时间小于30ms,是触摸屏最基本的要求。
本帖最后由 donatello 于 2017-7-21 12:57 编辑 【spi480272高速工业液晶屏试用体验】使用串口打印触摸坐标 spi480272屏幕的触摸模块也是一个spi总线的主控芯片,官方例程中对触摸屏spi信号的处理是采用io模拟spi的方法,这样的考虑有二:第一,dip40封装的stc12单片机只有一个硬件spi接口,如果彩屏显示spi信号和触摸处理spi信号这两组信号接在同一组miso、mosi、clk上面,并用cs引脚切换的话,会严重影响彩屏显示的效果;第二,触摸屏spi信号对spi频率有上限要求,频率最快不能高于125khz,因此,官方例程采用的是硬件spi信号驱动彩屏,io模拟spi信号处理触摸屏的方法。 另外,spi480272屏幕的触摸板坐标和屏幕坐标的取值并不是重合的,触摸板坐标的取值为200+到4800+(相对坐标,x0、y0取值均为此范围内),而屏幕坐标的取值则是x:0到479,y:0到271,是绝对坐标,转换公式为: x=(x0-x0_ad)*10/tlx; y=(y0-y0_ad)*10/tly; 其中x、y为屏幕绝对坐标变量;x0、y0为触摸板相对坐标变量;x0_ad=148,y0_ad=365为偏移量常数;tlx=77, tly=128为比率常数,用此公式转换之后,触摸板相对坐标就变成有实用意义的屏幕绝对坐标了。再来看下官方例程中对触摸捕捉的处理:
spi480272屏幕官方自带了一套完备的字库,字号从16px到32px都有,方便用户显示各种gb2312汉字和ascii码,这点比起市面上的以ili9341为主控的rgb565 16位并口彩屏要好得多,后者是不带字库的,需要用户额外录入字模数组进行显示。spi480272屏幕调用字库需要访问字库字号寄存器0x4e~0x7e。 由于官方自带了全套的字库,并且是按照ascii码和gb2312编码的排列顺序进行存储的,因此在字符串显示函数中的形参unsigned char *pstr(即要显示的字符串)不需要考虑任何的偏移或是转换,直接就能显示。
【spi480272高速工业液晶屏试用体验】官方资料分享&解析代码&刷屏 spi480272屏幕用的是半双工spi总线(不含触摸的情况下),传输指令和数据都是标准的spi时序。液晶屏的spi时序可以与电平模拟spi或者硬件spi信号进行通信。一般而言,带有硬件spi总线的单片机中都有一个发送数据的函数,这个函数是遵循标准的spi通信时序的:单片机为主机,clk线出现上升沿时do线传递一位数据,函数执行一次,clk就会出现八个上升沿,也就是do可以传递八位数据,这八位数据传输到从机就合成了一个字节的数据,单片机的硬件spi时序我们了解了,我们再来了解一下液晶屏的spi时序:液晶屏作为从机,clk线为输入状态,被动接收单片机(主机)的clk线的信号,主从两个clk线信号握手成功即为同步状态,可以进行数据传输。液晶屏有一套自己的游戏规则:当cs保持为低的过程中持续出现8个clk上升沿时,传输信息为命令;而cs保持为低的过程中持续出现16个clk上升沿时,传输信息则为数据;当cs保持为低的过程中持续出现除8、16个以外的clk上升沿时,传输信息无效。那么我们写代码的时候就很明确了:当片选线cs从拉低到拉高的过程中,出现一个硬件spi传输函数就是发送命令(寄存器号);出现两个两个硬件spi函数就发送寄存器数据了。 上传技术手册: