0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何设计一个简单的LCD驱动框架

Wildesbeast 来源:网络整理 作者:佚名 2020-11-07 10:16 次阅读

废话不多说,理论讲太多没啥感觉,这些条条框框本质就是基于面对对象的设计模式相关的一些理论,设计模式就是前人实践多了发现一些规律然后总结出来的那么一套好用的框架,所以咱们直接出干货,硬肝!以小熊派上的SPI OLED驱动为例,将原来开发包里的LCD驱动做一些简单的改造,然后我们根据需求设计如下的驱动模型框架,分为模型、驱动、设备三个部分,我们先不考虑太细节的东西,也不会把这个东西一开始就做得特别复杂,这样不利于理解,于是我们构建如下的框架思维导图:

1、LCD驱动框架数据结构框架提供一些什么能力呢?我是这么来做的,非常简单:

这里提供了将驱动框架与驱动进行对接的能力,&lcd_driver拿到的是定义在驱动文件里的一个已经赋值了的结构体lcd_driver,这样,当我在别的地方定义一个LCD_Driver_Model的变量,就可以将这个变量与驱动结构体进行对接,这样就可以通过这个变量来操作驱动结构体里的接口了。

2、LCD驱动数据结构

LCD驱动这个数据结构要做的事情就是提供操作LCD驱动能力的接口,这个接口的设计与硬件无关。

前面1小节说过,驱动框架依赖于驱动接口,这样的话我们需要实现驱动接口里的方法,在对应的方法里,我们要去调用LCD设备相关的接口,进而去操作LCD设备,以下是接口对应的实现:

3、LCD设备数据结构

LCD设备所需要做的事情就是将这个数据结构里的功能函数与真实的LCD驱动接口进行对接。比如我们看LCD_Init这个接口的实现,这个就是真实调用LCD的真实硬件操作了:

4、使用方法int main(void){ /* USER CODE BEGIN 1 */ LCD_Driver_Model lcd_model ; LCD_Ascii_Show_Para ascii_para[] = { {80, 100, 240-80, “RED”, BLACK, RED, 32}, {80, 100, 240-80, “GREEN”, BLACK, GREEN, 32}, {80, 100, 240-80, “BLUE”, BLACK, BLUE, 32}, }; LCD_Fill_Para fill_para[] = { {ascii_para[0].x,ascii_para[0].max_width,ascii_para[0].y,ascii_para[0].y+32}, {ascii_para[1].x,ascii_para[1].max_width,ascii_para[1].y,ascii_para[1].y+32}, {ascii_para[2].x,ascii_para[2].max_width,ascii_para[2].y,ascii_para[2].y+32}, } ; /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); MX_SPI2_Init(); /* USER CODE BEGIN 2 */ /*串口初始化后加这个延时,防止后面的printf打印乱码*/ HAL_Delay(200); /*注册驱动模型*/ Register_Driver_Model(&lcd_model); /*调用LCD初始化*/ lcd_model.lcd_driver-》lcd_init(); /*调用LCD显示ASCII码字符串*/ lcd_model.lcd_driver-》lcd_show_ascii_str(ascii_para[0]); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ /*循环调用LCD显示ASCII码字符串*/ for(int i = 0 ; i 《 3 ; i++) { lcd_model.lcd_driver-》lcd_fill(fill_para[i]); lcd_model.lcd_driver-》lcd_show_ascii_str(ascii_para[i]); HAL_Delay(100); } } /* USER CODE END 3 */}

这样我们就完成了LCD驱动最简单的分层设计了,当然我们的软件框架后续还需要不断的把它做得更健壮,这样以后随便一个LCD,我们都可以设计一套类似这样的固定模板,根据实际的业务需求,定义设计合适的接口,以后但凡换一个项目还是用同一个LCD的话就非常简单了!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • lcd
    lcd
    +关注

    关注

    34

    文章

    4259

    浏览量

    163611
  • 数据结构
    +关注

    关注

    3

    文章

    557

    浏览量

    39872
  • 变量
    +关注

    关注

    0

    文章

    588

    浏览量

    28088
收藏 人收藏

    评论

    相关推荐

    实现一个简单的事件驱动处理框架

    事件驱动框架允许程序处理外部事件,如网络连接、文件I/O、超时和信号。事件驱动框架可以让程序通过回调函数处理不同的事件,回调函数可以在事件触发时立即被调用。
    发表于 06-09 09:56 298次阅读
    实现一个<b class='flag-5'>简单</b>的事件<b class='flag-5'>驱动</b>处理<b class='flag-5'>框架</b>

    基于python的twisted框架编写简单的聊天室

    twisted:基于python的twisted框架编写客户端和服务端的对话聊天空间
    发表于 12-25 10:33

    数据驱动的UICollectionView框架简单示例

    IGListKit框架详细解析(二) —— 基于IGListKit框架的更好的UICollectionViews简单示例(
    发表于 10-12 15:22

    HarmonyOS HDF驱动框架---驱动开发

    驱动开发驱动模型介绍HDF框架以组件化的驱动模型作为核心设计思路,为开发者提供更精细化的驱动管理,让驱动
    发表于 09-16 17:59

    使用FSMC驱动LCD02

    液晶显示屏的每一个像素上都设置有薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。▲驱动流程01、使用FSMC
    发表于 08-04 07:30

    简单实用的MCU程序框架分享

     前面的文章介绍了简单实用的MCU程序框架,定时节拍的加入,这篇文章来介绍串口接收怎样加入到框架
    发表于 01-21 08:11

    简单实用的MCU程序框架介绍

    简单实用的MCU程序框架(非操作系统,简单调度任务) - 总体介绍 单片机程序,总体上可分为跑操作系统的和没操作系统,对于无MMU的小单
    发表于 02-11 06:21

    段码LCD驱动简单原理是什么

    时钟的冒号“:”,这样如果使用IO口直接扫描显示,则会减小PCB面积,降低成本。但是,本方案不合适驱动太多的段(占用IO太多),也不合适非常低功耗的场合。段码LCD驱动简单原理:如图1
    发表于 02-18 07:54

    HDF驱动框架设计汇总分享

    大神们的操作,我可以根据最新的源都测试成功。有大佬留言指导拨儿。本文章是基于 Hi3516 轻量系统来打造的。应用态打通内核的框架图3、HDF驱动框架之配置
    发表于 03-15 15:31

    RT-Thread系统的LCD驱动框架学习

    \_POWERON、RTGRAPHIC\_CTRL\_POWEROFF、RTGRAPHIC\_CTRL\_GET\_INFO注册设备前面也说道LCD没有独立的驱动框架,所以以
    发表于 03-31 15:59

    LCD驱动MCU在显示方面的软件设计

    LCD 驱动MCU 在显示方面的软件设计介绍:本文以简单例程介绍了带LCD 驱动MCU 在显示方面的软件设计,适用于所有带
    发表于 04-07 09:25 36次下载

    LCD驱动原理

    LCD驱动原理
    发表于 12-11 17:13 25次下载

    微软发布开源框架驱动程序模块新框架

    为了方便开发人员为Windows编写驱动程序,微软昨天发布了一个开源框架驱动程序模块框架(DMF)。这个新框架将允许开发人员编写
    发表于 08-22 11:37 968次阅读

    添加柿饼库到工程并完成LCD驱动和触摸驱动的对接

    说是移植,实际上是添加柿饼库到工程,并完成LCD驱动和触摸驱动的对接,其中LTDC驱动SDK中已经完成了移植,RGB屏的移植主要就是时钟频率和屏幕面板参数的修改。对于其他屏幕则需要按照
    的头像 发表于 05-10 14:25 1366次阅读
    添加柿饼库到工程并完成<b class='flag-5'>LCD</b><b class='flag-5'>驱动</b>和触摸<b class='flag-5'>驱动</b>的对接

    通过Nano框架使用LCD的开源项目

    电子发烧友网站提供《通过Nano框架使用LCD的开源项目.zip》资料免费下载
    发表于 02-06 14:11 0次下载
    通过Nano<b class='flag-5'>框架</b>使用<b class='flag-5'>LCD</b>的开源项目