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

【AWorks試用體驗(yàn)】+揭開AWorks神秘面紗(開箱貼)
AWorks的哲學(xué)思想
4本周立功嵌入式學(xué)習(xí)指南,看完你也能跟上大神的步伐~
ZLG72128數(shù)碼管顯示驅(qū)動及鍵盤掃描管理芯片

ZLG72128——ZLG自行設(shè)計(jì)的數(shù)碼管顯示驅(qū)動及鍵盤掃描管理芯片

基于AWorks LED燈點(diǎn)亮的簡單例程
入門教程:如何用AWorks點(diǎn)亮一個(gè)LED燈
如何將轉(zhuǎn)換器設(shè)計(jì)指標(biāo)應(yīng)用到 Fly-Buck 電路設(shè)計(jì)中

將Swift語言應(yīng)用到MCU開發(fā)中(下)

評論