一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何設(shè)計(jì)一個(gè)簡(jiǎn)單的LCD驅(qū)動(dòng)框架

Wildesbeast ? 來源:網(wǎng)絡(luò)整理 ? 作者:佚名 ? 2020-11-07 10:16 ? 次閱讀

廢話不多說,理論講太多沒啥感覺,這些條條框框本質(zhì)就是基于面對(duì)對(duì)象的設(shè)計(jì)模式相關(guān)的一些理論,設(shè)計(jì)模式就是前人實(shí)踐多了發(fā)現(xiàn)一些規(guī)律然后總結(jié)出來的那么一套好用的框架,所以咱們直接出干貨,硬肝!以小熊派上的SPI OLED驅(qū)動(dòng)為例,將原來開發(fā)包里的LCD驅(qū)動(dòng)做一些簡(jiǎn)單的改造,然后我們根據(jù)需求設(shè)計(jì)如下的驅(qū)動(dòng)模型框架,分為模型、驅(qū)動(dòng)、設(shè)備三個(gè)部分,我們先不考慮太細(xì)節(jié)的東西,也不會(huì)把這個(gè)東西一開始就做得特別復(fù)雜,這樣不利于理解,于是我們構(gòu)建如下的框架思維導(dǎo)圖:

1、LCD驅(qū)動(dòng)框架數(shù)據(jù)結(jié)構(gòu)框架提供一些什么能力呢?我是這么來做的,非常簡(jiǎn)單:

這里提供了將驅(qū)動(dòng)框架與驅(qū)動(dòng)進(jìn)行對(duì)接的能力,&lcd_driver拿到的是定義在驅(qū)動(dòng)文件里的一個(gè)已經(jīng)賦值了的結(jié)構(gòu)體lcd_driver,這樣,當(dāng)我在別的地方定義一個(gè)LCD_Driver_Model的變量,就可以將這個(gè)變量與驅(qū)動(dòng)結(jié)構(gòu)體進(jìn)行對(duì)接,這樣就可以通過這個(gè)變量來操作驅(qū)動(dòng)結(jié)構(gòu)體里的接口了。

2、LCD驅(qū)動(dòng)數(shù)據(jù)結(jié)構(gòu)

LCD驅(qū)動(dòng)這個(gè)數(shù)據(jù)結(jié)構(gòu)要做的事情就是提供操作LCD驅(qū)動(dòng)能力的接口,這個(gè)接口的設(shè)計(jì)與硬件無關(guān)。

前面1小節(jié)說過,驅(qū)動(dòng)框架依賴于驅(qū)動(dòng)接口,這樣的話我們需要實(shí)現(xiàn)驅(qū)動(dòng)接口里的方法,在對(duì)應(yīng)的方法里,我們要去調(diào)用LCD設(shè)備相關(guān)的接口,進(jìn)而去操作LCD設(shè)備,以下是接口對(duì)應(yīng)的實(shí)現(xiàn):

3、LCD設(shè)備數(shù)據(jù)結(jié)構(gòu)

LCD設(shè)備所需要做的事情就是將這個(gè)數(shù)據(jù)結(jié)構(gòu)里的功能函數(shù)與真實(shí)的LCD驅(qū)動(dòng)接口進(jìn)行對(duì)接。比如我們看LCD_Init這個(gè)接口的實(shí)現(xiàn),這個(gè)就是真實(shí)調(diào)用LCD的真實(shí)硬件操作了:

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 */ /*串口初始化后加這個(gè)延時(shí),防止后面的printf打印亂碼*/ HAL_Delay(200); /*注冊(cè)驅(qū)動(dòng)模型*/ Register_Driver_Model(&lcd_model); /*調(diào)用LCD初始化*/ lcd_model.lcd_driver-》lcd_init(); /*調(diào)用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 */ /*循環(huán)調(diào)用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驅(qū)動(dòng)最簡(jiǎn)單的分層設(shè)計(jì)了,當(dāng)然我們的軟件框架后續(xù)還需要不斷的把它做得更健壯,這樣以后隨便一個(gè)LCD,我們都可以設(shè)計(jì)一套類似這樣的固定模板,根據(jù)實(shí)際的業(yè)務(wù)需求,定義設(shè)計(jì)合適的接口,以后但凡換一個(gè)項(xiàng)目還是用同一個(gè)LCD的話就非常簡(jiǎn)單了!

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • lcd
    lcd
    +關(guān)注

    關(guān)注

    34

    文章

    4480

    瀏覽量

    170161
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40528
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    614

    瀏覽量

    28759
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    文詳解Linux PCI驅(qū)動(dòng)框架

    PCIe控制器驅(qū)動(dòng),各家的IP實(shí)現(xiàn)不樣,驅(qū)動(dòng)的差異可能會(huì)很大,單獨(dú)分析個(gè)驅(qū)動(dòng)畢竟只是個(gè)例,應(yīng)
    的頭像 發(fā)表于 03-02 15:39 ?1w次閱讀

    實(shí)現(xiàn)個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)處理框架

    事件驅(qū)動(dòng)框架允許程序處理外部事件,如網(wǎng)絡(luò)連接、文件I/O、超時(shí)和信號(hào)。事件驅(qū)動(dòng)框架可以讓程序通過回調(diào)函數(shù)處理不同的事件,回調(diào)函數(shù)可以在事件觸發(fā)時(shí)立即被調(diào)用。
    發(fā)表于 06-09 09:56 ?569次閱讀
    實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>簡(jiǎn)單</b>的事件<b class='flag-5'>驅(qū)動(dòng)</b>處理<b class='flag-5'>框架</b>

    數(shù)據(jù)驅(qū)動(dòng)的UICollectionView框架簡(jiǎn)單示例

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

    個(gè)簡(jiǎn)單實(shí)用的MCU程序框架分享

    ?前面的文章介紹了個(gè)簡(jiǎn)單實(shí)用的MCU程序框架,定時(shí)節(jié)拍的加入,這篇文章來介紹串口接收怎樣加入到框架
    發(fā)表于 01-21 08:11

    個(gè)簡(jiǎn)單實(shí)用的MCU程序框架介紹

    個(gè)簡(jiǎn)單實(shí)用的MCU程序框架(非操作系統(tǒng),簡(jiǎn)單調(diào)度任務(wù)) - 總體介紹?單片機(jī)程序,總體上可分為跑操作系統(tǒng)的和沒操作系統(tǒng),對(duì)于無MMU的小單
    發(fā)表于 02-11 06:21

    段碼LCD驅(qū)動(dòng)簡(jiǎn)單原理是什么

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

    RT-Thread系統(tǒng)的LCD驅(qū)動(dòng)框架學(xué)習(xí)

    \_POWERON、RTGRAPHIC\_CTRL\_POWEROFF、RTGRAPHIC\_CTRL\_GET\_INFO注冊(cè)設(shè)備前面也說道LCD沒有獨(dú)立的驅(qū)動(dòng)框架,所以以
    發(fā)表于 03-31 15:59

    分享個(gè)LCD-12832的STM32驅(qū)動(dòng)例程

    分享個(gè)LCD-12832的STM32驅(qū)動(dòng)例程
    發(fā)表于 04-01 16:11 ?80次下載

    個(gè)簡(jiǎn)單的事件驅(qū)動(dòng)的IO libevent編程例子

    本文演示個(gè)簡(jiǎn)單的基于libevent編程的例子。libevent是事件驅(qū)動(dòng)的IO,適用于“好萊塢原則”。
    的頭像 發(fā)表于 03-23 09:54 ?6558次閱讀
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b>最<b class='flag-5'>簡(jiǎn)單</b>的事件<b class='flag-5'>驅(qū)動(dòng)</b>的IO libevent編程例子

    微軟發(fā)布開源框架驅(qū)動(dòng)程序模塊新框架

    為了方便開發(fā)人員為Windows編寫驅(qū)動(dòng)程序,微軟昨天發(fā)布了個(gè)開源框架驅(qū)動(dòng)程序模塊框架(DMF
    發(fā)表于 08-22 11:37 ?1249次閱讀

    個(gè)簡(jiǎn)單實(shí)用的MCU程序框架(非操作系統(tǒng),簡(jiǎn)單調(diào)度任務(wù)) - 總體介紹

    個(gè)簡(jiǎn)單實(shí)用的MCU程序框架(非操作系統(tǒng),簡(jiǎn)單調(diào)度任務(wù)) - 總體介紹?單片機(jī)程序,總體上可分為跑操作系統(tǒng)的和沒操作系統(tǒng),對(duì)于無MMU的小單
    發(fā)表于 12-08 14:06 ?6次下載
    <b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>簡(jiǎn)單</b>實(shí)用的MCU程序<b class='flag-5'>框架</b>(非操作系統(tǒng),<b class='flag-5'>簡(jiǎn)單</b>調(diào)度任務(wù)) - 總體介紹

    創(chuàng)建個(gè)簡(jiǎn)單的L E D驅(qū)動(dòng)

    創(chuàng)建個(gè)簡(jiǎn)單的L E D驅(qū)動(dòng)
    發(fā)表于 11-03 08:04 ?0次下載
    創(chuàng)建<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>簡(jiǎn)單</b>的L E D<b class='flag-5'>驅(qū)動(dòng)</b>器

    個(gè)LCD簡(jiǎn)單Arduino菜單

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

    基于LCD驅(qū)動(dòng)架構(gòu)的MCU菜單框架設(shè)計(jì)

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

    使用MVVM框架實(shí)現(xiàn)個(gè)簡(jiǎn)單加法器

    使用MVVM框架來實(shí)現(xiàn)個(gè)簡(jiǎn)單加法器。最終效果如下,點(diǎn)擊按鈕可以對(duì)上面兩個(gè)文本框中的數(shù)字進(jìn)行相加得出結(jié)果顯示在第三
    的頭像 發(fā)表于 10-24 14:23 ?1068次閱讀
    使用MVVM<b class='flag-5'>框架</b>實(shí)現(xiàn)<b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>簡(jiǎn)單</b>加法器