首先需要说明的是本篇文章不是关于如何点亮一块LCD屏的教程,而是介绍一个LCD开发框架,更准确的说是介绍一个LCD的中间件(Middlwware),用来连接UI和不同类型的LCD屏。笔者本人的工作内容中很重要的一部分就是在不同的LCD屏上做UI开发,所以对如何最大程度复用LCD代码以及解耦屏驱有着一定的理解。好了,话不多说进入正文。

1、最初的代码

在写这篇文章的时候笔者翻看了自己在大二时候点的第一块屏幕(TFTLCD,驱动IC为ILI9341)的代码,看着自己几年前写的代码,思绪仿佛又回到了几年的那个夏天…….,咳咳,不好意思有点“触码伤情”了,回到正题,当时写的代码最大的问题就是——LCD的应用和驱动没有分离,耦合在一起。

如果仅从实现功能的角度来说完全ok的,但是从项目开发角度来看还是有不少问题,因为实际项目不可能一直只用一款屏或者MCU,一旦二者之一发生改变就意味着LCD驱动会改变,而LCD应用和驱动又是紧密耦合的,必然会受到影响要做出改变。这是不合理的,LCD应用是针对屏幕这个大类而不是具体的屏幕对象,比如说我要在屏幕显示一串字符“hello world”,对LCD应用层来说是:“我要在这块屏幕(A屏、B屏…)显示hello world,但是具体怎么实现显示,我不关心,我只要结果”。另外一种情况就是如果一个项目要使用两块或者多块屏(虽然实际上这种情况很少见,就我个人目前还没遇到过),那是不是要LCD应用代码复制两份甚至更多,这明显会增加代码体积,而且看着也别扭。所以LCD框架就呼之欲出了。

2、呼之欲出的LCD框架

现在开始进入本篇文章的核心部分,理解下面的内容需要掌握结构体、函数指针等基础知识。为了对该框架有个宏观的认识,我准备了一个框图,如下所示:



下面我将以ILI9341 240*320的TFTLCD屏幕设备的添加过程,让大家对这个框架有更深的认识。

2.1、添加屏驱lcd_ili9341.c

本次使用的是8080接口和ILI9341进行通信,对于具体的驱动代码这里不做赘述,主要说明如何在屏驱中添加一个LCD设备,如下图所示:



其中lcd_driver是屏驱对象,包含了初始化、填充、开关显示等操作,其LcdDriverType_t类型在lcd_typedef.h中定义。lcd_ili9341_dev就是一个LCD设备,使用时需要被注册到LCD设备表中,该设备类型中包含设备的名称、分辨率、屏驱等信息,LcdDeviceType_t类型也是在lcd_typedef.h中定义。

2.2、添加lcd_ili9341_dev设备。

(1)在lcd_device.h中extern声明lcd_ili9341_dev,如下图所示:



同时在lcd_config中加上CONFIG_LCD_ILI9341的宏控,如下所示:



(2)将lcd_ili9341_dev添加到lcd_device.c中LCD设备表中如下图所示:



至此,一个新的LCD屏幕设备添加完成,我们可以通过Lcd_DeviceOpen()函数来打开这个设备并进行操作。下面是Lcd_DeviceOpen()函数的实现:



(3)使用样例



上述代码中打开了一个名称为“lcd_ili9341”的屏幕设备,并在起点坐标为(20,20)填充了一个宽200,高200的红色矩形,实际现象如下图所示:

3、未完待续。。。

4、总结

我始终认为对代码最好的解释就是代码本身,理解代码很多时候都是只可意会不可言传,所以后续我会将LCD框架这部分代码上传到gitte上,希望能给大家带来点收获,同时热切希望大家提出自己宝贵的想法,一起交流完善!!!

分享一个LCD驱动框架的更多相关文章

  1. lcd驱动框架

    目录 lcd驱动框架 框图 程序分析 入口 打开open 读read 初始化registered_fb 注册 小结 程序设计 测试 方式一操作fb0 方式二操作tty 方式三操作终端 完整程序 tit ...

  2. Linux驱动:LCD驱动框架分析

    一直想花时间来整理一下Linux内核LCD驱动,却一直都忙着做其他事情去了,这些天特意抽出时间来整理之前落下的笔记,故事就这样开始了.LCD驱动也是字符设备驱动的一种,框架上相对于字符设备驱动稍微复杂 ...

  3. 【Linux高级驱动】LCD驱动框架分析

    1.framebuffer接口层(fbmem.c) 功能:给用户提供接口 fbmem_init  ),"fb",&fb_fops)  /*2.创建一个设备类*/ fb_cl ...

  4. 分享一个基于ssm框架下的webService接口开发

    首先肯定是导入相关jar包 cxf-core-3.1.9.jar cxf-rt-bindings-soap-3.1.9.jar cxf-rt-bindings-xml-3.1.9.jar cxf-rt ...

  5. 分享一个CSS+JavaScript框架materializecss

    一.内容: CSS+JavaScript框架materializecss. 二.网址:http://materializecss.com 三.图片:

  6. sc7731 Android 5.1 LCD驱动简明笔记之一

    基于展讯sc7731 - Android 5.1 代码分析浏览.将屏蔽细节,把握整体,并且不涉及其他设备和LCD的交互. 以下对sc7731 lcd大体流程进行简要说明. 第一,lcd 的两个阶段 1 ...

  7. 高通 android平台LCD驱动分析

    目前手机芯片厂家提供的源码里包含整个LCD驱动框架,一般厂家会定义一个xxx_fb.c的源文件,注册一个平台设备和平台驱动,在驱动的probe函数中来调用register_framebuffer(), ...

  8. Linux学习: LCD驱动

    一.LCD驱动框架: 1.分配一个fb_info结构体:s3c_lcd = framebuffer_alloc(0,NULL); 2.设置fb_info(s3c_lcd): ID.固定参数.可变参数. ...

  9. LCD驱动应该怎么写?–基于stm32F407 [复制链接]

    够用的硬件能用的代码使用的教程 (拷贝过来的代码有点乱,请下载附件查看文档) 资料下载地址:https://pan.baidu.com/s/1bHUVe6X6tymktUHk_z91cA 网络上配套S ...

  10. 10. LCD驱动程序 ——框架分析

    引言: 由LCD的硬件原理及操作(可参看韦哥博客:第017课 LCD原理详解及裸机程序分析) 我们知道只要LCD控制器的相关寄存器正确配置好,就可以在LCD面板上显示framebuffer中的内容. ...

随机推荐

  1. 【全新重构发布】iNeuOS工业互联网操作系统 V5 版本

    iNeuOS工业互联网操作系统历经迭代27个版本,老版本截止更新V4.1版本:历时一年多时间,现在正式发布全新V5版本,V5版本与V4.1老版本不完全兼容. 发布V5版本后,iNeuOS工业互联网操作 ...

  2. [Lua][Love] "图块集与地图" 加载显示功能 TileMap

    效果 安装库 安装两个库,分别用来读xml和csv,如果有luarocks,执行下列命令 luarocks install xml2lua luarocks install ftcsv manoelc ...

  3. 【io_uring】内核源码分析(更新中)

    文章目录 `io_uring` 系统调用 `io_uring_setup` `io_uring_setup` `io_uring_create` `io_sq_offload_start` 系统调用 ...

  4. Lazada详情接口的应用

    Lazada是东南亚电商领域的一家知名企业,Lazada商品详情接口是Lazada提供的一种获取Lazada平台商品详细信息的接口.本文将介绍Lazada商品详情接口的使用方法和相关注意事项. 第一步 ...

  5. 关于XXLJOB集群模式下调度失败的问题

    xxljob在集群模式下调度高频任务时,有时会出现调度失败的问题,具体报错如下: java.io.EOFException: HttpConnectionOverHTTP@6be8bf0c(l:/10 ...

  6. xv6 中的进程切换:MIT6.s081/6.828 lectrue11:Scheduling 以及 Lab6 Thread 心得

    絮絮叨 这两节主要介绍 xv6 中的线程切换,首先预警说明,这节课程的容量和第 5/6 节:进程的用户态到内核态的切换一样,细节多到爆炸,连我自己复习时都有点懵,看来以后不能偷懒了,学完课程之后要马上 ...

  7. 图解 LeetCode 算法汇总——链表

    本文首发公众号:小码A梦 一般数据主要存储的形式主要有两种,一种是数组,一种是链表.数组是用来存储固定大小的同类型元素,存储在内存中是一片连续的空间.而链表就不同于数组.链表中的元素不是存储在内存中可 ...

  8. 【krpano】KRPano自动缩略图分组插件

    该插件可以展示场景缩略图,并支持场景分组. 下载地址:http://pan.baidu.com/s/1dFj7v0l 使用说明: 插件共有两个文件,auto_thumbs.xml和tooltip.xm ...

  9. 制作一个内部的 zabbix-agent 快速部署脚本

    下载官方的基础 agent 部署包 官方地址:点击到达 curl -O https://cdn.zabbix.com/zabbix/binaries/stable/5.0/5.0.36/zabbix_ ...

  10. Solution -「NOI 2007」货币兑换

    Description Link. 一共 \(n\) 天,每天可以卖出或者买入两种股票 \(A\) 和 \(B\).这两种股票在第 \(i\) 天的价值为 \(A_i\) 和 \(B_i\). 每天可 ...