0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

AWorks怎么将ZLG72128应用到实际项目的核心应用部分?

丫丫119 来源:未知 作者:肖冰 2019-09-28 06:12 次阅读

立功科技提供了ZLG72128多种平台的通用驱动程序,包括通用MCULinux(核心板)、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
    mcu
    +关注

    关注

    146

    文章

    17143

    浏览量

    351118
  • Linux
    +关注

    关注

    87

    文章

    11302

    浏览量

    209431
收藏 人收藏

    评论

    相关推荐

    全面剖析数码管与矩阵键盘联合使用法则

    本文内容为7.7 数码管与矩阵键盘联合使用、7.8 ZLG72128——数码管与键盘管理、7.9 温控器。
    的头像 发表于 11-21 07:47 1.1w次阅读
    全面剖析数码管与矩阵键盘联合使用法则

    以NFC核心板为例讲述基于AWorks平台开发的具体方法

    ZLG致远电子推出了一系列“MCU+无线”核心板,本文以NFC核心板为例讲述基于AWorks平台开发的具体方法。
    的头像 发表于 06-22 09:16 6435次阅读
    以NFC<b class='flag-5'>核心</b>板为例讲述基于<b class='flag-5'>AWorks</b>平台开发的具体方法

    AWorks试用体验】+揭开AWorks神秘面纱(开箱贴)

    满足大部分工业采集控制应用。看到整套板子的时候,我就觉得,我需要的项目方案,就摆在面前了。再追加一个全家福~整套开发板,布板紧凑,外设丰富,功能强大,解下来的日子,我陪伴她很多个日日夜夜,但愿她能一直陪在我身边,助我成就一个个
    发表于 08-19 15:22

    AWorks的哲学思想

    高度抽象呢?如果实现就能做到让专业的人做专业的事,AWorks就是在这样的背景下诞生的。由于其中融入了更多的软件工程技术方法,因此就能做到程序员彻底从非核心域中释放出来聚焦于核心竞争
    发表于 05-04 15:43

    4本周立功嵌入式学习指南,看完你也能跟上大神的步伐~

    在数据结构和算法方面的应用进行了深入讲解和阐述。3. 讲解了绝大多数C程序员开发生涯中没有考虑过的问题。《ZLG72128编程指南》本编程指南旨在为用户提供编程指导,书中列举了大量的程序范例,使用户可以
    发表于 09-04 16:31

    请问如何Swift语言应用到MCU开发中?

    请问如何Swift语言应用到MCU开发中?
    发表于 02-11 07:30

    上传android应用到googlemarket步骤

    上传android应用到googlemarket步骤
    发表于 03-19 11:23 0次下载

    ZLG72128数码管显示驱动及键盘扫描管理芯片

    ZLG72128还为普通键提供了连击计数功能,即按住某个普通键不松手,经过两秒钟的延迟后,开始连续有效,连续有效间隔时间为两百毫秒。同时键值还具有锁存功能,当MCU执行其他操作来不及实时读取键值,ZLG72128会将检测到的键值放在键值寄存器中,等待MCU读取;
    的头像 发表于 04-11 09:15 1w次阅读
    <b class='flag-5'>ZLG72128</b>数码管显示驱动及键盘扫描管理芯片

    ZLG72128——ZLG自行设计的数码管显示驱动及键盘扫描管理芯片

    ZLG72128还为普通键提供了连击计数功能,即按住某个普通键不松手,经过两秒钟的延迟后,开始连续有效,连续有效间隔时间为两百毫秒。同时键值还具有锁存功能,当MCU执行其他操作来不及实时读取键值,ZLG72128会将检测到的键值放在键值寄存器中,等待MCU读取;
    的头像 发表于 04-11 09:37 7582次阅读
    <b class='flag-5'>ZLG72128</b>——<b class='flag-5'>ZLG</b>自行设计的数码管显示驱动及键盘扫描管理芯片

    基于AWorks LED灯点亮的简单例程

    AWorksZLG历时12年开发的下一代嵌入式开发平台,支持组件“可插拔、可替换、可配置”,用户只需修改相应的头文件,即可实现“一次编程、终生使用、跨平台”,本文为大家介绍AWorks点亮一个LED灯简单例程,感受
    的头像 发表于 04-12 15:40 4131次阅读

    入门教程:如何用AWorks点亮一个LED灯

    AWorksZLG历时12年开发的下一代嵌入式开发平台,支持组件“可插拔、可替换、可配置”,用户只需修改相应的头文件,即可实现“一次编程、终生使用、跨平台”,本文为大家介绍AWorks点亮一个LED灯简单例程,带大家感受
    的头像 发表于 12-24 11:34 1156次阅读

    Linux环境编程:从应用到内核

    Linux环境编程:从应用到内核资料下载。
    发表于 06-01 14:51 18次下载

    如何转换器设计指标应用到 Fly-Buck 电路设计中

    本博客共分两个部分,第 1 部分我们探讨了使 Fly-Buck 设计稳定所需的重要设计指标。本文我们介绍如何这些设计指标应用到 Fly-
    的头像 发表于 01-28 09:24 1525次阅读
    如何<b class='flag-5'>将</b>转换器设计指标<b class='flag-5'>应用到</b> Fly-Buck 电路设计中

    Swift语言应用到MCU开发中(下)

    本文的上半部分简单介绍了什么是Swift,为什么要用Swift做MCU的开发语言:Swift语言应用到MCU开发中(上)。接下来介绍作者本人在进行的一个
    发表于 02-08 17:03 2次下载
    <b class='flag-5'>将</b>Swift语言<b class='flag-5'>应用到</b>MCU开发中(下)

    如何大模型应用到效能评估系统中去

    如何大模型应用到效能评估系统中去 智慧华盛恒辉效能评估系统大数据的应用效能评估系统及其评估方法,以应用基础数据和应用运行数据为基础,从数据开放集约能力、用户认可度、平安运行能力和运维保障支持四个
    的头像 发表于 09-27 16:16 525次阅读