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

    文章

    16011

    浏览量

    343545
  • Linux
    +关注

    关注

    87

    文章

    10988

    浏览量

    206725
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    Aworks申请】纳米操作机的压电陶瓷驱动电路开发

    非常漂亮,总体比市面上常见的的三星2440开发板还要强,并且有两本全面的参考书,大量的例程源码,非常适合快速上手和应用到项目中。项目描述:项目主要就是纳米操作机的驱动平台
    发表于 07-17 16:21

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

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

    请问,我的labview有的程序出现了错误,或者应用到实际时无法运行,怎么查找错误呢?

    请问,我的labview有的程序出现了错误,或者应用到实际时无法运行,怎么查找错误呢?
    发表于 02-23 15:13

    AWorks的哲学思想

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

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

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

    如何把这三颗芯片应用到一个项目上去?

    我现在有三颗芯片(TPS62290DRVR、TLC2543CDWR、ISO3082DWR),有没有人能帮忙把这三颗芯片应用到一个项目上?谢谢!
    发表于 09-18 22:58

    IoT原理应用到工厂流程时,在转换过程中会丢失什么?

    IoT原理应用到工厂流程时,在转换过程中会丢失什么?
    发表于 06-16 09:01

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

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

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

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

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

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

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

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

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

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