立功科技提供了ZLG72128多種平臺的通用驅動程序,包括通用MCU、Linux(核心板)、AMetal/AWorks平臺。本文主要講解AWorks平臺下,ZLG72128軟件的應用。
我們前兩天的文章有介紹ZLG72128的數碼管顯示驅動及鍵盤掃描管理,感興趣的用戶可點擊查看:
ZLG72128硬件電路設計之按鍵掃描電路
ZLG72128硬件電路設計之數碼管顯示電路
Linux平臺下ZLG72128的使用
接下來為大家講解AWorks平臺下,ZLG72128軟件的應用。
為了使應用程序不與具體的硬件綁定,進而實現“跨平臺復用”,AWorks提供了一套通用接口。通用接口只與“抽象的”的功能相關,而與“具體的”硬件無關。若應用程序基于通用接口編寫,無需關心任何底層細節,直接使用AWorks提供的通用數碼管接口和鍵盤管理接口實現相應功能。在更換底層硬件時,應用程序無需作任何修改。
設備使能及配置
1、設備使能
在使用ZLG72128之前,必須使能ZLG72128硬件設備,并完成ZLG72128相關的配置。
設備使能的方法為:確保在aw_prj_params.h文件中定義的AW_DEV_ZLG72128_0宏處于有效狀態,即未被注釋。
若aw_prj_params.h文件中沒有定義該宏,則可以自行添加該宏的定義。通常情況下,若未定義該宏,表明用戶所使用的模板工程沒有添加ZLG72128設備的默認配置,此時,用戶還需添加相應的配置文件。
2、設備配置
設備相關的配置集中在用戶配置文件目錄(user_config\awbl_hwconf_usrcfg\)下的awbl_hwconf_zlg72128.h
文件中,方便用戶根據實際情況對文件中的部分配置信息作相應的修改。文件的示意內容詳見程序:
由此可見,該宏可能有兩種定義,具體定義被 AW_DEV_ZLG72128_0 宏控制,僅當AW_DEV_ZLG72128_0被有效定義時,AWBL_HWCONF_ZLG72128_0的定義才包含實際內容,否則,AWBL_HWCONF_ZLG72128_0是一個內容為空的宏。
一個硬件設備要正常工作,必須將其對應的設備宏加入到AWorks指定的硬件設備列表中,硬件設備列表在awbus_lite_hwconf_usrcfg.c文件中定義,即一個名為:g_awbl_devhcf_list[]的數組,該數組的每一個成員都描述了系統中的一個硬件設備。要使用ZLG72128,則應該將ZLG72128對應的設備宏加入到硬件設備列表中,一個簡單的示例片段:
通常情況下,若在系統工程中存在ZLG72128的配置文件,則該宏默認已經加入到了硬件設備列表中,用戶只需要用過使能宏AW_DEV_ZLG72128_0控制設備是否使能即可。
通用數碼管接口
AWorks提供了一組通用數碼管接口,詳見圖1。
圖1通用數碼管接口
1、設置段碼解碼函數
通過控制數碼管各個段的亮滅,可以組合顯示出多種圖形,例如,對于8段數碼管,要顯示字符“1”,則需要點亮b、c兩段,對應的編碼值(即段碼)為0x60。解碼函數用于對特定字符進行解碼,以獲取對應字符的編碼值。根據編碼值,可以知道在顯示對應字符時,哪些段需要點亮(相應位為1),哪些段需要熄滅(相應位為0)。設置段碼解碼函數即用于用戶自定義字符的解碼函數,其函數原型為:
其中,id表示數碼管顯示器的編號,若系統只有一個數碼管顯示器,則id為0。pfn_decode為函數指針,其指向的函數即為本次設置的段碼解碼函數,解碼函數的參數為uint16_t類型的字符,返回值為uint16_t類型的編碼。絕大部分情況下,對于8段數碼管,常用字符圖形(如字符''''0''''~''''9''''等)都具有默認編碼,為此,AWorks提供了默認的8段數碼管解碼函數,可以支持常見的字符''''0'''' ~ ''''9''''以及''''A''''、''''B''''、''''C''''、''''D''''、''''E''''、''''F''''等字符的解碼。其在am_digitron_disp.h文件中聲明:
若無特殊需求,可以將該函數作為pfn_decode的實參傳遞。部分應用可能具有特殊需求,需要在顯示某些字符時使用自定義的編碼,可自定義解碼函數,然后將該函數作為pfn_decode的實參傳遞即可。
2、設置數碼管閃爍
該函數可以指定數碼管顯示器的某一位數碼管閃爍,其函數原型為:
其中,id為數碼管顯示器編號;index為數碼管索引,通常情況下,一個數碼管顯示器具有多個顯示位,索引即用于指定具體操作哪一位數碼管,例如,ZLG72128最高可以驅動12位數碼管,則該數碼管顯示器對應的位索引范圍為:0~11;blink表示該位是否閃爍,若其值為AM_TRUE,則閃爍,反之,則不閃爍,默認情況下,所有數碼管均處于未閃爍狀態。如設置1號數碼管閃爍的范例程序:
3、顯示指定的段碼圖形
該函數用于不經過解碼函數解碼,直接顯示段碼指定的圖形,可以靈活的顯示任意特殊圖形,其函數原型為:
其中,id為數碼管顯示器編號;index為數碼管索引;seg為顯示的段碼。段碼為8位,bit0~bit7分別對應段a~dp。位值為1時,對應段點亮,位值為0時,對應段熄滅。如在8段數碼管上顯示字符''''-'''',即需要g段點亮,對應的段碼為0x40(即:0100 0000),范例程序:
4、顯示單個字符
函數用于在指定位置顯示一個字符,字符經過解碼函數解碼后顯示,若解碼函數不支持該字符,則不顯示任何內容,其函數原型為:
其中,id為數碼管顯示器編號,index為數碼管索引,ch為顯示的字符。比如,顯示字符''''H''''的范例程序:
5、顯示字符串
該函數用于從指定位置開始顯示一個字符串,其函數原型為:
其中,id為數碼管顯示器編號,index為顯示字符串的數碼管起始索引,即從該索引指定的數碼管開始顯示字符串,len指定顯示的長度(顯示該字符串所使用的數碼管位數),p_str指向需要顯示的字符串。
實際顯示的長度是len和字符串長度的較小值,若數碼管位數不夠,則多余字符不顯示。部分情況下,顯示所占用的數碼管長度可能與字符串實際顯示的長度不等,例如,顯示字符串“1.”,其長度為2,但實際顯示時,字符“1”和小數點均可顯示在一位數碼管上,因此,該顯示僅占用一位數碼管。
顯示"HELLO."字符串的范例程序:
6、顯示清屏
該函數用于顯示清屏,清除數碼管顯示器中的所有內容,其函數原型為:
其中,id為數碼管顯示器編號,范例程序:
7、使能數碼管顯示
數碼管默認是處于使能狀態的,只有當被禁能后,才需要使用該函數重新使能。數碼管僅在使能狀態下才可以正常顯示。
該函數用于使能數碼管顯示,其函數原型為:
其中,id為數碼管顯示器編號,范例程序:
8、禁能數碼管顯示
數碼管默認處于使能狀態,可以正常顯示。清屏狀態下只是清空了數碼管顯示的內容,數碼管實際上還是處于工作狀態,對于動態掃描類數碼管,依然處于動態掃描狀態,需要消耗CPU資源。若長時間不使用數碼管,可以徹底關閉數碼管顯示器,關閉數碼管掃描,節省CPU資源,甚至是關閉數碼管的電源,降低系統功耗。關閉數碼管顯示器的函數原型為:
其中,id為數碼管顯示器編號,范例程序:
數碼管被禁能后,將不能再正常顯示,若需正常顯示,必須使用aw_digitron_disp_enable()接口重新使能數碼管。
通用鍵盤管理接口
對于用戶來講,要使用按鍵,即需要對外部輸入的按鍵事件進行處理,為此,需要向系統中注冊一個輸入事件處理器,該處理器中,包含了用戶自定義的事件處理函數,當有按鍵事件發生時,系統將自動回調事件處理器中的用戶函數。
AWorks提供了注冊輸入事件處理器的接口,其函數原型為:
1、輸入事件處理器
p_input_handler指向輸入事件處理器。aw_input_handler_t是輸入事件處理器的類型,它是在aw_input.h文件中定義,用戶無需關心該類型的具體定義,僅需使用該類型定義輸入事件處理器的實例即可。比如:
其中,實例的地址(&key_handler)即可作為參數傳遞給函數的形參p_handler。
2、用戶自定義事件處理函數
aw_input_cb_t為事件處理函數的類型,它是在aw_input.h文件中使用typedef自定義的一個類型。即:
當輸入事件發生時,無論是按鍵事件,還是其它坐標事件,比如:鼠標、觸摸屏等。均會調用pfn_cb指針指向的函數,當該函數被調用時,p_input_data為輸入事件相關的數據,包含事件類型(區分按鍵事件或坐標事件,比如:鼠標、觸摸屏等)、按鍵編碼、坐標等信息,用戶可以根據這些數據作出相應的處理動作。p_usr_data為用戶自定義的參數,其值與注冊事件處理器時傳遞的p_usr_data參數一致,若不使用該參數,則可以在注冊事件處理器時,將p_usr_data參數的值設置為NULL。
p_input_data的類型為aw_input_event_t指針類型,aw_input_event_t類型在aw_input.h文件中定義如下:
其本質上是一個結構體類型,僅包含一個數據成員,用于表示事件的類型,若為按鍵事件,則該值為AW_INPUT_EV_KEY;若為絕對事件(比如觸摸屏上的觸摸事件),則該值為AW_INPUT_EV_ABS。
若p_input_data指向的數據中,ev_type的值為AW_INPUT_EV_KEY,則表示其指向的數據本質上是一個完整的按鍵事件數據,其類型為aw_input_key_data_t,該類型在aw_input.h文件中定義如下:
1) input_ev
其中包含了事件的具體類型,也正因為其第一個數據成員的類型為aw_input_event_t,系統才可以在回調用戶自定義的函數時,將aw_input_key_data_t類型的指針轉換為指向aw_input_event_t類型的指針使用。
2) key_code
按鍵的編碼,按鍵編碼用于區分各個按鍵,通常情況下,一個系統中可能存在多個按鍵,比如,ZLG72128最多支持32個按鍵,為每個按鍵分配一個唯一的編碼,當按鍵事件發生時,用戶可以據此判斷是哪個按鍵產生了按鍵事件。此外,出于可讀性、可維護性等考慮,按鍵編碼一般不直接使用數字,比如:1、2、3……而是使用在aw_input_code.h文件中使用宏的形式定義的一系列編碼,比如,KEY_1、KEY_2等,用以區分各個按鍵;
3) key_state
key_state表示本次按鍵事件具體對應的按鍵狀態,用以區分按鍵事件是按下事件還是釋放事件。若該值不為0,則表示按鍵按下;否則,表示按鍵釋放。
4) keep_time
表示狀態保持時間(單位:ms),常用于按鍵長按應用(例如,按鍵長按3秒關機),按鍵首次按下時,keep_time為0,若按鍵一直保持按下,則系統會以一定的時間間隔上報按鍵按下事件(調用pfn_cb指向的用戶回調函數),keep_time的值不斷增加,表示按鍵按下已經保持的時間。特別地,若按鍵不支持長按功能,則keep_time始終為-1。
以下提供一個簡單的應用范例程序:
注冊按鍵處理器后,當按鍵按下或釋放時,均會調用注冊按鍵處理器時指定的回調函數(__key_process())函數。
AWorks平臺提供了較全面的功能接口函數,所有接口函數均脫離底層,不與具體硬件綁定,真正實現跨平臺移植。AWorks助你更加快捷的將ZLG72128應用到實際項目中,將專注力投入到核心應用部分,讓具有競爭力的產品更快走向市場!
-
mcu
+關注
關注
146文章
17825瀏覽量
360244 -
Linux
+關注
關注
87文章
11456瀏覽量
212759
發布評論請先 登錄
【AWorks試用體驗】+揭開AWorks神秘面紗(開箱貼)
AWorks的哲學思想
4本周立功嵌入式學習指南,看完你也能跟上大神的步伐~
ZLG72128數碼管顯示驅動及鍵盤掃描管理芯片

ZLG72128——ZLG自行設計的數碼管顯示驅動及鍵盤掃描管理芯片

基于AWorks LED燈點亮的簡單例程
入門教程:如何用AWorks點亮一個LED燈
將Swift語言應用到MCU開發中(下)

評論