衡阳派盒市场营销有限公司

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

    文章

    4438

    瀏覽量

    168376
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40230
  • 變量
    +關注

    關注

    0

    文章

    613

    瀏覽量

    28465
收藏 人收藏

    評論

    相關推薦

    文詳解Linux PCI驅動框架

    PCIe控制器驅動,各家的IP實現不樣,驅動的差異可能會很大,單獨分析驅動畢竟只是個例,應
    的頭像 發表于 03-02 15:39 ?9800次閱讀

    實現簡單的事件驅動處理框架

    事件驅動框架允許程序處理外部事件,如網絡連接、文件I/O、超時和信號。事件驅動框架可以讓程序通過回調函數處理不同的事件,回調函數可以在事件觸發時立即被調用。
    發表于 06-09 09:56 ?499次閱讀
    實現<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的事件<b class='flag-5'>驅動</b>處理<b class='flag-5'>框架</b>

    數據驅動的UICollectionView框架簡單示例

    IGListKit框架詳細解析(二) —— 基于IGListKit框架的更好的UICollectionViews簡單示例(
    發表于 10-12 15:22

    簡單實用的MCU程序框架分享

    ?前面的文章介紹了簡單實用的MCU程序框架,定時節拍的加入,這篇文章來介紹串口接收怎樣加入到框架
    發表于 01-21 08:11

    簡單實用的MCU程序框架介紹

    簡單實用的MCU程序框架(非操作系統,簡單調度任務) - 總體介紹?單片機程序,總體上可分為跑操作系統的和沒操作系統,對于無MMU的小單
    發表于 02-11 06:21

    段碼LCD驅動簡單原理是什么

    時鐘的冒號“:”,這樣如果使用IO口直接掃描顯示,則會減小PCB面積,降低成本。但是,本方案不合適驅動太多的段(占用IO太多),也不合適非常低功耗的場合。段碼LCD驅動簡單原理:如圖1
    發表于 02-18 07:54

    RT-Thread系統的LCD驅動框架學習

    \_POWERON、RTGRAPHIC\_CTRL\_POWEROFF、RTGRAPHIC\_CTRL\_GET\_INFO注冊設備前面也說道LCD沒有獨立的驅動框架,所以以
    發表于 03-31 15:59

    分享LCD-12832的STM32驅動例程

    分享LCD-12832的STM32驅動例程
    發表于 04-01 16:11 ?80次下載

    簡單的事件驅動的IO libevent編程例子

    本文演示簡單的基于libevent編程的例子。libevent是事件驅動的IO,適用于“好萊塢原則”。
    的頭像 發表于 03-23 09:54 ?6441次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個</b>最<b class='flag-5'>簡單</b>的事件<b class='flag-5'>驅動</b>的IO libevent編程例子

    微軟發布開源框架驅動程序模塊新框架

    為了方便開發人員為Windows編寫驅動程序,微軟昨天發布了開源框架驅動程序模塊框架(DMF
    發表于 08-22 11:37 ?1187次閱讀

    簡單實用的MCU程序框架(非操作系統,簡單調度任務) - 總體介紹

    簡單實用的MCU程序框架(非操作系統,簡單調度任務) - 總體介紹?單片機程序,總體上可分為跑操作系統的和沒操作系統,對于無MMU的小單
    發表于 12-08 14:06 ?6次下載
    <b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>實用的MCU程序<b class='flag-5'>框架</b>(非操作系統,<b class='flag-5'>簡單</b>調度任務) - 總體介紹

    創建簡單的L E D驅動

    創建簡單的L E D驅動
    發表于 11-03 08:04 ?0次下載
    創建<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>的L E D<b class='flag-5'>驅動</b>器

    LCD簡單Arduino菜單

    電子發燒友網站提供《LCD簡單Arduino菜單.zip》資料免費下載
    發表于 11-15 14:38 ?1次下載
    <b class='flag-5'>一</b><b class='flag-5'>個</b>帶<b class='flag-5'>LCD</b>的<b class='flag-5'>簡單</b>Arduino菜單

    基于LCD驅動架構的MCU菜單框架設計

    當前代碼: 1實現了雙列菜單,用數字鍵選擇進入下層。每頁最多顯示8菜單(4*4鍵盤用1-8鍵) 2 實現了單列菜單,通過上下翻查看菜單,確認鍵進入菜單。3 天頂菜單未實現,誰有興趣可以加上。 3 基于LCD
    發表于 10-11 14:51 ?1471次閱讀
    基于<b class='flag-5'>LCD</b><b class='flag-5'>驅動</b>架構的MCU菜單<b class='flag-5'>框架</b>設計

    使用MVVM框架實現簡單加法器

    使用MVVM框架來實現簡單加法器。最終效果如下,點擊按鈕可以對上面兩文本框中的數字進行相加得出結果顯示在第三
    的頭像 發表于 10-24 14:23 ?910次閱讀
    使用MVVM<b class='flag-5'>框架</b>實現<b class='flag-5'>一</b><b class='flag-5'>個</b><b class='flag-5'>簡單</b>加法器
    棋牌游戏大厅| 线上百家乐官网攻略| 大发888游戏代充值100| 百家乐信誉平台现金投注| 如何打百家乐官网的玩法技巧和规则| 全讯网高手论坛| 网上百家乐赌场| 百家乐官网如何赚洗码| 百家乐官网桌出租| 澳门赌博攻略| 好运来百家乐的玩法技巧和规则| 游戏机百家乐的技术| 做生意门面对着什么方向好| 香港百家乐官网赌场娱乐网规则| 百家乐官网下路教学| 赌博百家乐官网弱点| 太阳城百家乐官网分析解码| 百家乐官网长龙怎么预判| 网上玩百家乐官网好吗| 百家乐官网视频小游戏| 杂多县| 禄丰县| 延寿县| 罗马百家乐官网娱乐城| 都江堰市| 榆社县| 百家乐官网视频多开器| 百家乐官网休闲游戏| 百家乐官网实战案例| 百家乐官网最佳投注法下载| 百家乐官网天下第一和| 网上的百家乐官网是真是假| 百家乐官网园天将| 百家乐分路单析器| 百家乐桌颜色可定制| 百家乐官网娱乐平台代理佣金| 网络百家乐的玩法技巧和规则| 百家乐食杂店| 在线百家乐合作| 广州百家乐娱乐场开户注册| 百家乐的巧门|