首先需要说明的是本篇文章不是关于如何点亮一块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. 应用程序通过 Envoy 代理和 Jaeger 进行分布式追踪(一)

    Istio 支持通过 Envoy 代理进行分布式追踪,代理自动为其应用程序生成追踪 span,只需要应用程序转发适当的请求上下文即可.Istio 支持很多追踪系统,包括 Zipkin, Jaeger, ...

  2. 3.你不知道的go语言控制语句

    目录 本篇前瞻 Leetcode习题9 题目描述 题目分析 代码编写 知识点归纳 控制结构 顺序结构(Sequence) 声明和赋值 算术运算符 位运算符 逻辑运算 分支结构 if 语句 switch ...

  3. 网络请求-Android篇(Okhttp和Retrofit)

    一.OkHttp的介绍和基本用法 OkHttp是一个流行的开源Java和Android应用程序的HTTP客户端.它由Square Inc.开发,提供了一种简单高效的方式来进行应用程序中的HTTP请求. ...

  4. Qt开发思想探幽]QObject、模板继承和多继承

    @ 目录 [Qt开发探幽]QObject.模板继承和多继承 1. QObject为什么不允许模板继承: 2.如果需要使用QObject进行多继承的话,子对象引用的父类链至多只能含有一个QObject ...

  5. 从达梦数据库到Oracle数据库的性能测试数据迁移和导入优化

    为了在同样的数据基础上对比达梦数据库和Oracle数据库的业务性能,我们需要将达梦数据库的数据导入到Oracle数据库中.本文将提供一种思路来解决导入过程中遇到的问题及存在问题记录. 数据库版本信息 ...

  6. 音频格式轻松转 - foobar2000

    一.foobar2000简介 foobar2000 是一款免费的专业级别音频解码播放器,支持的诸多音频格式,可加载附加组件扩展更多支持. 除了解码以外,可轻松实现对音频格式的转换,支持几乎所有主流格式 ...

  7. 使用GPU训练Pytorch模型

    如何使用GPU训练Pytorch模型 这两天的深度学习实验真实让人头疼,传说中的"猫狗大战",对模型的训练用CPU的话9h起步,12h是常态,大学生哪耗得起,因此查找资料搭建了GP ...

  8. 文心一言 VS 讯飞星火 VS chatgpt (101)-- 算法导论9.3 7题

    七.用go语言,设计一个 O(n)时间的算法,对于一个给定的包含n个互异元素的集合 S 和一个正整数k≤n,该算法能够确定 S 中最接近中位数的k个元素. 文心一言: 要设计一个 O(n) 时间的算法 ...

  9. 洛谷题解 | P1046 陶陶摘苹果

    ​ 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目思路 AC代码 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶 ...

  10. 2023年最新版Apollo保姆级使用手册(超级详尽版本)

    目录 Apollo操作说明 前言 Apollo环境部署 一.环境构建 二.官方地址 三.数据库脚本使用 四.配置Apollo文件 五.启动Apollo 六.访问Apollo Apollo产品使用 一. ...