立功科技提供了ZLG72128多种平台的通用驱动程序,包括通用MCU、Linux(核心板)、AMetal/AWorks平台。本文主要讲解AWorks平台下,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文章
17143浏览量
351118 -
Linux
+关注
关注
87文章
11302浏览量
209431
发布评论请先 登录
相关推荐
评论