本帖最后由 wind_west 于 2020-7-8 13:32 编辑

前言:
富芮坤物联网开发板 上刚好带了LCD,而且是全彩的IPS LCD显示屏。这里采用的SPI的通讯方式,速度可能比不上8080的快,但是显示静态界面应该也够了。另外,根据MCU的数据手册来看,Flash的大小也差不多,可以试着移植一下。
LCD的数据.JPG
LCD数据
MCU的数据.JPG
MCU的数据

1、准备
硬件上没什么好准备的,LCD本身就是板载的,在 开发板资料(硬件版本v1.3)里LCD的显示驱动也提供了。主要是GUI的准备,这里使用 UC_GUI
UC_GUI介绍.JPG

上面是官方的介绍解决,精简成几句话:A、这个界面全彩的LCD肯定可以用;B、我的这款MCU可以用。下载 ucgui3.98完整版 在其中提取几个文件,接下来要用:
Config、GUI、GUI_X、GUIDemo。
提取文件.JPG
这里简单说明一下,这里几个文件是为通用的移植准备的,实际运行的时候不用这么功能,后期可以再精简。Config下有几个设置文件,都是*.h的;
GUI其实叫LIB更加恰当一些,就是这个GUI的库函数(V3.98是开源的);GUI_X和移植时的操作系统、触摸屏的响应有关;GUIDemo就是官方提供的例子,刚接触可以参考例子移植,也能实现比较漂亮的画面。

附件1:ucgui3.98完整版  (待上传)。

2、开发环境搭建
首先把上面的4个文件夹下的文件添加到MDK的工程(\examples\dev1.0\ble_simple_peripheral)下,这点大家都不陌生。一方面在工程中增加*.c文件,一方面增加*.h文件的包含,但是这里有点小插曲,那就是config下的*.h文件也添加到了工程。这样干也不是必须,只是这样比较方便查看几个关键的头文件
添加工程1_副本.jpg
相关的文件添加完成后,就需要对几个必要的文件进行修改了。总的一个思路就是:A、告诉GUI使用的LCD为多大尺寸;B、告诉GUI使用的LCD色彩为多少位;C、告诉GUI使用的单片机主控是什么;D、告诉GUI使用的LCD驱动方式是什么。
2.1  修改 LCDConf.h 文件:定义LCD的显示尺寸,显示的颜色位数,控制LCD的主控,以及LCD的初始化。上面之所以说是显示尺寸,因为我们可以在7寸的屏上显示4寸的界面,那也可以的。#define LCD_CONTROLLER -1 ---这就是说我们使用的主控不是它指定的ST或者NXP之类的。实际上在高版本的UC_GUI已经为这些特定的厂商准备了特定的GUI。
LCDConf_1_副本.jpg
2.2  修改GUIConf.h 文件:这里定义是不是使用RTOS、触摸功能是不是使能的设置。我这里不使用操作系统、也不使用触摸,因为没有啊。
GUIConf.JPG
2.3  修改LCDTemplate.c 文件:填充LCD_L0_SetPixelIndex(),将我们单片机画点的函数交给GUI。其实还有个读点的函数,现在没有实现,既然GUI能跑那就先跑着吧,出了问题再解决问题。
画点函数.JPG
2.4  上面几点其实不难,对于所有的GUI移植也都是这两个步骤。需要注意的是:解决GUI和底层驱动的重名问题,按照报错信息修改驱动文件明和相关的宏定义。
解决重名问题.JPG
2.5  至此,GUI已经能够显示了,但是GUI里面有些展示效果提供动画 ,所以需要时钟。那我们开一个硬件定时器提供1ms的中断心跳就好。至于为什么不使用软件定时器,原因是这里的ble_simple_peripheral 环境是非抢占式的。硬件定时器的使用3步:初始化定时器、开定时器中断、重写中断函数。
硬件定时器_副本.jpg
附件2(工程的烧写文件): Output.zip (1.33 MB, 下载次数: 11)
全部回复 6
  • 25 主题
  • 72 帖子
  • 1180 积分
身份:LV4 高级技术员
E币:792
  • 0 主题
  • 1711 帖子
  • 6179 积分
身份:LV6 初级工程师
E币:2180
  • 18 主题
  • 568 帖子
  • 3069 积分
身份:LV5 资深技术员
E币:2243
我一直想搞一下这个,一直没有抽出时间来!
看看楼主的帖子,就相当于我也搞了
  • 0 主题
  • 2 帖子
  • 388 积分
身份:LV2 初级技术员
E币:34
  • 4 主题
  • 8 帖子
  • 609 积分
身份:LV3 中级技术员
E币:638
  • 147 主题
  • 243 帖子
  • 1810 积分
身份:LV4 高级技术员
E币:11772
回复楼主
您需要登录后才可以评论 登录 立即注册