跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
viking代理捷比信 · 专业器件主题站

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

废话不多,不想讲太多理论。这些规则的本质是基于与面向对象设计模式有关的一些理论。设计模式是一组易于使用的前辈,他们发现了一些规则并在实践中进行了总结。框架,让我们直接运送干货,坚硬的肝脏!以小熊提供的SPIOLED驱动器为例,我们将对原始开发套件中的LCD驱动器进行一些简单的转换,然后根据需要设计以下驱动器模型框架,分为三个部分:模型,驱动程序和设备。我们不首先考虑它。过于详细的内容在开始时不会使事情变得特别复杂,不利于理解,因此我们构建了以下框架思维导图:1. LCD驱动程序框架数据结构框架提供哪些功能?这就是我的操作方式,非常简单:这是将驱动程序框架连接到驱动程序的功能,而&lcd_driver获得的是在驱动程序文件中定义的已分配结构lcd_driver。这样,当我在另一个本地定义LCD_Driver_Model变量时,可以将此变量与驱动器结构连接,以便可以使用此变量来操作驱动器结构中的接口。 2. LCD驱动器数据结构该数据结构需要做的是提供一个用于操作LCD驱动器功能的接口。该接口的设计与硬件无关。如上一节所述,驱动程序框架取决于驱动程序接口。在这种情况下,我们需要在驱动程序接口中实现该方法。在相应的方法中,我们需要调用与LCD设备相关的接口来操作LCD设备。以下是与该接口对应的实现:3. LCD设备数据结构LCD设备需要做的是将该数据结构中的功能功能与实际的LCD驱动器接口相连。例如,让我们看一下LCD_Init接口的实现。这是实际调用LCD的真正硬件操作:4.使用方法intmain(void){/ * USERCODEBEGIN1 * / LCD_Driver_Modellcd_model; LCD_Ascii_Show_Paraascii_para [] = {{80,100,240-80,“ RED”,BLACK,RED,32},{ 80,100,240-80,“ GREEN”,黑色,绿色,32},{80,100,240-80,“ BLUE”,黑色,蓝色,32},}; LCD_Fill_Parafill_para [] = {{ascii_para [0] .x,ascii_para [0] .max_width,ascii_para [0] .y,ascii_para] .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},}; / * USERCODEEND1 * // * MCUConfiguration ------------------------------------ ------------ * / HAL_Init(); / * USERCODEBEGINInit * // * USERCODEENDInit * // *配置系统时钟* / SystemClock_Config(); / * USERCODEBEGINSysInit * // * USERCODEENDSysInit * // *初始化所有已配置的外围设备* / MX_GPIO_Init(); MX_I2C1_Init(); MX_USART1_UART_Init(); MX_SPI 2_Init(); / * USERCODEBEGIN2 * // *防止初始化后的串行端口延迟以下printf打印乱码* / HAL_Delay(200); / *注册驱动程序模型* /注册er_Driver_Model(& lcd_model); / *调用LCD初始化* / lcd_model.lcd_driver-》 lcd_init(); / *调用LCD以显示ASCII码字符串* / lcd_model.lcd_driver-》 lcd_show_ascii_str(ascii_para [0]); / * USERCODEEND2 * / / *无限循环* // * USERCODEBEGINWHILE * / while(1){/ * USERCODEENDWHILE * // * USERCODEBEGIN3 * // *循环调用LCD以显示ASCII码字符串* / for(inti = 0; i《 3; i ++){lcd_model.lcd_driver-》 lcd_fill(fill_para [一世]); lcd_model.lcd_driver-》 lcd_show_ascii_str(ascii_para [i]); HAL_Delay(100);}} / * USERCODEEND3 * /}这样,我们完成了对LCD驱动器的最简单分析。设计了该层。当然,将来我们的软件框架需要变得更加强大,以便将来我们可以为任何LCD设计一套这样的固定模板,并根据实际业务需求定义和设计适当的接口。 ,将来,如果您更改项目或使用相同的LCD,那将非常简单!