深入理解AMetal,掌握蜂鸣器和温度采集接口设计

周立功单片机 2018-01-17 08:29 次阅读

周立功教授新书《面向AMetal框架与接口的编程(上)》,对AMetal框架进行了详细介绍,通过阅读这本书,你可以学到高度复用的软件设计原则和面向接口编程的开发思想,聚焦自己的“核心域”,改变自己的编程思维,实现企业和个人的共同进步。

第八章为深入理解AMetal,本文内容为8.3 蜂鸣器接口和8.4 温度采集接口。

8.3 蜂鸣器接口

>>> 8.3.1 定义接口

1. 接口命名

由于操作的对象是蜂鸣器(buzzer),因此,接口命名以“am_buzzer_”作为前缀。对于蜂鸣器,基本的操作是打开和关闭蜂鸣器,可定义相应的两个接口名为:

  • am_buzzer_on

  • am_buzzer_off

特别地,在一些应用场合,还需要类似蜂鸣器“嘀一声”这样的操作,即鸣叫一定的时间后自动停止。可以定义其接口名为:

  • am_buzzer_beep

  • am_buzzer_beep_async

这里定义了两个接口,都是用于蜂鸣器鸣叫指定的时间,二者的区别在于函数返回的时机不同。am_buzzer_beep 会等待鸣叫结束后返回,am_buzzer_beep_async 不会等待,函数立即返回,蜂鸣器鸣叫指定时间后自动停止。

显然,对于am_buzzer_beep_async 接口,在最开始的蜂鸣器接口设计中,很可能是不会想到的,该接口是在大量实际应用中得出的,由于在一些特殊的应用场景,不希望程序被阻塞,因此,需要提供am_buzzer_beep_async 这样的异步接口。

2. 接口参数

在LED 通用接口的设计中,由于在一个系统中,可能存在多个LED,这就必须使用某种方法区分不同的LED,如使用了唯一ID 号led_id 表示来区分系统中的多个LED。按照这种逻辑,是否也需要一个buzzer_id 来区分不同的蜂鸣器呢?

蜂鸣器的功能单一,是一种发声器件,在一个具体应用中,发声器件往往只有一个,没有必要使用多个蜂鸣器。因此,蜂鸣器可以看做系统的一个单实例设备,基于此,也就无需使用类似于buzzer_id 这样的参数来区分多个蜂鸣器了,对于打开和关闭蜂鸣器的接口,则无需任何参数,即:

  • am_buzzer_on(void);

  • am_buzzer_off(void);

特别地,对于am_buzzer_beep 和am_buzzer_beep_async 接口,虽无需参数来区分多个蜂鸣器,但由于其功能是鸣叫一定的时间,因此,还需要一个用于指定鸣叫时长的参数。

  • am_buzzer_beep(uint32_t ms);

  • am_buzzer_beep_async (uint32_t ms);

其中,ms 用于指定鸣叫时长,单位为毫秒。

3. 返回值

接口无特殊说明,直接将所有接口的返回值定义为int 类型的标准错误号。基于此,蜂鸣器控制接口的完整定义详见表8.5。

表8.5 蜂鸣器通用接口(am_buzzer.h)

其对应的类图详见图8.8。

图8.8 蜂鸣器接口类图

>>> 8.3.2 实现接口

1. 抽象的蜂鸣器设备类

蜂鸣器共计4 个通用接口,其中,am_buzzer_beep()和am_buzzer_beep_async()接口可以直接基于am_buzzer_on()和am_buzzer_off()接口实现,am_buzzer_beep()的实现详见程序清单8.24。

程序清单8.24 am_buzzer_beep()的实现

程序中,首先使用am_buzzer_on()打开蜂鸣器,若打开蜂鸣器失败(返回值为负数),则直接返回相应的错误号,若打开成功,则使用am_mdelay()延时指定的时间,最后关闭蜂鸣器。对于am_buzzer_beep_async()接口,其需要立即返回,不能在函数内部直接使用延时函数,可以基于软件定时器实现,范例程序详见程序清单8.25。

程序清单8.25 am_buzzer_beep_async()的范例程序

程序中,首先使用am_buzzer_on()打开蜂鸣器,若打开蜂鸣器失败(返回值为负数),则直接返回相应的错误号,若打开成功,则启动软件定时器,定时时间为指定的鸣叫时间,启动定时器后,函数立即返回。软件定时器定时时间到后,需要调用自定义回调函数__beep_timer_callback(),在回调函数中,关闭了软件定时器和蜂鸣器,鸣叫结束。

显然,软件定时器在使用前,需要初始化,以将__beep_timer_callback()函数作为其定时时间到后的回调函数,如:

初始化语句放在哪里呢?这里仅仅展示了使用软件定时器实现am_buzzer_beep_async()函数的范例,后文再介绍初始化软件定时器的合适时机。

由于am_buzzer_beep()和am_buzzer_beep_async()接口可以直接基于am_buzzer_on()和am_buzzer_off()实现,因此实现蜂鸣器接口的核心是实现am_buzzer_on()和am_buzzer_off()接口,按照LED 或HC595 的设计方法,可以抽象对应的两个方法。即:

虽然按照这种设计方法是完全可行的,但是考虑到on 和off 是一组相互对称的接口,功能是同属一类的,具有很大的相似性,因此,可以仅抽象一个方法,使用一个布尔类型的参数区分操作是打开还是关闭,比如:

可见,定义抽象方法并不一定是原封不动的按照接口定义抽象方法,可以作适当的调整,只要基于抽象方法,能够实现通用接口即可。

虽然只有一个抽象方法,但是为了保证结构的统一,也为了方便后续扩展(如新增抽象方法等),往往还是将抽象方法放到一个虚函数表中。即:

类似地,将抽象方法和p_cookie 定义在一起,即为抽象的蜂鸣器设备。如:

在前面实现am_buzzer_beep_async()接口时,使用到了软件定时器,显然,软件定时器是用于实现一个蜂鸣器鸣叫功能的,是与蜂鸣器设备相关的,其不应定义为全局变量,取而代之的是,直接定义在抽象设备结构体中,即:

抽象设备中定义的抽象方法需要由具体的蜂鸣器设备来完成,am_buzzer_on()和am_buzzer_off()接口则可以直接基于抽象方法实现。

在定义蜂鸣器接口时,由于蜂鸣器是单实例设备(系统中只有一个),因此没有在接口中定义区分蜂鸣器对象的参数,如ID 号或者句柄参数等,那么,在实现接口时,如何找到相应的设备呢?由于在系统中只有一个蜂鸣器设备,因此,可以直接使用一个全局变量来指向蜂鸣器设备,am_buzzer_on()和am_buzzer_off()的实现详见程序清单8.26。

程序清单8.26 am_buzzer_on 和am_buzzer_off ()的范例程序

其中,__gp_buzzer_dev 是指向蜂鸣器设备的指针,初始没有任何有效的蜂鸣器设备,因此初始值为NULL。显然,要正常使用蜂鸣器,就必须使__gp_buzzer_dev 指向有效的蜂鸣器设备,这就需要由具体蜂鸣器设备实现pfn_buzzer_set 抽象方法。

为了完成__gp_buzzer_dev 的赋值,需要定义一个设备注册接口,用于向系统中注册一个有效蜂鸣器设备:

其中,为了方便向系统中添加一个蜂鸣器设备时,避免直接操作蜂鸣器设备的各个成员,将需要赋值的成员通过参数传递给接口函数。其实现详见程序清单8.27。

程序清单8.27 向系统中添加蜂鸣器设备

该程序首先判定参数的有效性,然后完成了抽象设备中抽象方法和p_cookie 赋值,接着给全局变量__gp_buzzer_dev 的赋值,使其指向有效的蜂鸣器设备,最后,初始化了抽象设备中的软件定时器,便于实现异步的蜂鸣器鸣叫接口,由此可见,软件定时器的初始化操作是在添加一个蜂鸣器设备时完成的。

显然,接下来,就需要基于抽象的蜂鸣器设备派生具体的蜂鸣器设备,在具体的蜂鸣器设备中,完成抽象方法pfn_buzzer_set 的实现,并使用am_buzzer_dev_register()接口向系统中添加一个蜂鸣器设备,使得用户可以使用蜂鸣器通用接口操作到具体有效的蜂鸣器。

为了便于查阅,如程序清单8.28 所示展示了蜂鸣器设备接口文件(am_buzzer_dev.h)的内容。其对应的类图详见图8.9。

程序清单8.28 am_buzzer_dev.h 文件内容

图8.9 抽象的蜂鸣器设备类

2. 具体的蜂鸣器设备类

以使用PWM 输出控制蜂鸣器发声为例,简述具体蜂鸣器设备的实现方法。首先应该基于抽象设备类派生一个具体的设备类,其类图详见图8.10,可直接定义具体的蜂鸣器设备类,如:

图8.10 具体的蜂鸣器设备类

am_buzzer_pwm_dev_t 即为具体的蜂鸣器设备类。具有该类型后,即可使用该类型定义一个具体的蜂鸣器设备实例,即:

特别地,由于蜂鸣器是单实例设备,不能够使用该类型定义多个实例,因此,可以直接在具体设备实现的文件内部定义一个蜂鸣器设备实例,无需用户使用该类型自定义设备实例。基于此,am_buzzer_pwm_dev_t 类型无需开放给用户,可以直接定义在.c 文件中,由于am_buzzer_pwm_dev_t 类型无需开放给用户,仅内部使用,因此可以修改类型名为双下划线“__”开头,如在am_buzzer_pwm.c 文件中定义设备类型以及对应的设备实例如下:

在使用PWM 输出控制蜂鸣器时,需要知道PWM 的句柄,通道号等相关信息,这些信息需要保存在设备中,因此更新设备类型的定义如下:

显然,这些成员需要初始化后才能使用,定义初始化函数的原型为:

其中,pwm_handle 为标准的PWM 服务句柄,chan 为PWM 通道号,duty_ns 和period_ns分别指定了输出PWM 波形的脉宽和周期,决定了蜂鸣器鸣叫的响度和频率,比如,AM824-Core 板载的蜂鸣器。

若使用SCT 输出PWM,由于PIO0_24 对应SCT 的通道1,因此初始话函数的调用形式如下:

程序中,使用了am_lpc82x_sct0_pwm_inst_init()函数获取到了PWM 句柄,使用了通道1,并设定输出PWM 的周期为400000ns,即 2.5KHz (1000000000 / 400000),脉宽恰好为周期的一半,即输出PWM 的占空比为50%。初始化函数的实现范例详见程序清单8.29。

程序清单8.29 初始化函数实现范例

该程序首先判定了参数的有效性,然后完成了设备实例中相关成员的赋值,接着调用了am_buzzer_dev_register()函数,将蜂鸣器设备添加到系统中,最后配置了PWM 输出通道的脉宽和周期。添加设备时,将p_funcs 赋值为&__g_buzzer_pwm_drv_funcs,p_cookie 赋值为具体设备的地址,即p_cookie 指向了设备自身。__g_buzzer_pwm_drv_funcs 中包含了抽象方法的具体实现,完整定义详见程序清单8.30。

程序清单8.30 抽象方法的实现

为了便于查阅,如程序清单8.31 所示展示了蜂鸣器设备接口文件(am_buzzer_pwm.h)的内容。

程序清单8.31 am_buzzer_pwm.h 文件内容

由此可见,与其它具体设备的接口文件(详见程序清单8.14、程序清单8.17 和程序清单8.23)相比,不同的是,其没有包含具体设备类型的定义,初始化接口的第一个参数,也不是指向具体设备的指针。这是由于蜂鸣器是单实例设备,系统中最多只能定义一个,因此直接在实现文件的内部完成了设备实例的定义,相关类型无需开放给用户。同理,由于是单实例设备,初始化函数初始化的必然是文件内部定义的设备实例,无需额外使用指向设备的指针指定要初始化的设备。

至此,详细介绍了LED 通用接口、HC595 接口和蜂鸣器接口,它们代表了AMetal 中典型的3 种类型的设备接口。

  • LED 通用接口:使用唯一ID 区分不同设备;

  • HC595 接口:使用句柄区分不同的设备,句柄本质上是指向设备的指针;

  • 蜂鸣器接口:不使用任何参数区分不同设备,是一种单实例设备。

8.4 温度采集接口

>>> 8.4.1 定义接口

1. 接口命名

由于操作的对象是温度(temperature),为了缩短接口名,将temperature 缩写为temp,因此,接口命名以“am_temp_”作为前缀。对于温度采集,主要的操作就是读取当前温度。可定义接口名为:

  • am_temp_read

2. 接口参数

显然,一个系统中可能存在多个温度传感器,可以简单的使用句柄来区分不同的温度传感器,因此第一个参数的类型定义为温度传感器句柄,和HC595 设备类似,其应该定义为指向抽象温度设备的指针,假定抽象温度设备的类型为am_temp_dev_t,则handle 的类型可以定义为:

读取温度接口的核心功能是返回当前的温度值,首先需要定义温度值的类型,然后再确定温度值的返回方式:通过返回值返回或通过出口参数返回。

通常使用1 位小数表示温度值,比如,37.5℃,由此可见,温度值需要使用小数表示,但要求的精度并不高,往往只会精确到小数点后一位,因此温度值可以使用float 类型表示。

由于AMetal 运行的实际硬件平台往往是以低端的Cortex-M0、Cortex-M0+和Cortex-M3等作为内核的芯片,这些芯片没有硬件浮点运算单元,浮点运算的效率很低。因此,AMetal平台中,不建议使用浮点类型,据此,可以使用整数表示温度值,同时,为了保证一定的精度,使用整数表示扩大1000 倍后的温度值。如实际温度为37.5 度,则使用整数37500 表示。使用这种方法巧妙的避免了使用浮点类型,但也能保证实际温度的精度为小数点后三位。由于温度可能存在负值,因此,使用有符号的32 位数据来表示温度值,即温度值的类型定义为int32_t。

在通用接口中,返回值往往定义为int 类型的错误号,且使用负数表示出错,显然,如果使用返回值直接返回温度,用户将无法区分温度为负数和读取温度出错的情况。为此,使用一个输出参数,用以返回温度值,即定义一个int32_t 类型的指针作为输出参数:

  • am_temp_read(am_temp_handle_t handle, int32_t *p_temp)

其中,handle 为温度传感器的句柄,p_temp 为输出参数,用于返回当前的温度值,其表示的温度值为实际温度值的1000 倍。

3. 返回值

接口无特殊说明,直接将所有接口的返回值定义为int 类型的标准错误号。基于此,完整的读取温度接口的原型为:

其对应的类图详见图8.11。

图8.11 温度采集接口

>>> 8.4.2 实现接口

1. 抽象的温度采集设备类

根据读取温度接口,可以定义相应的抽象方法,并将其存放在一个虚函数表中:

类似地,将抽象方法和p_cookie 定义在一起,即为抽象的温度采集设备。比如:

显然,具体的温度采集设备直接从抽象的温度采集设备派生,然后由具体的温度采集设备根据实际的硬件,实现读取温度的抽象方法。

在读取温度接口中,使用了handle 作为第一个参数,其本质上是指向设备的指针,读取温度接口可以直接调用抽象方法实现,详见程序清单8.32。

程序清单8.32 读取温度接口实现

在接口实现中,没有与硬件相关的实现代码,仅仅是简单的调用了抽象方法。抽象方法需要由具体的温度采集设备来实现。类似地,由于读取温度接口的实现非常简单,往往将其实现直接以内联函数的形式存放在.h 文件中。

为便于查阅,如程序清单8.33 所示展示了抽象温度采集设备接口文件(am_temp.h)的内容,其包含了抽象温度采集设备相关的抽象方法定义、类型定义和接口实现,对应的类图详见图8.12。

图8.12 抽象的温度采集设备类

程序清单8.33 am_temp.h 文件内容

2. 具体的温度采集设备类

以使用LM75B 温度传感器实现温度采集为例,简述具体温度采集设备的实现方法。首先应该基于抽象设备类派生一个具体的设备类,其类图详见图8.13,可直接定义具体的温度采集设备类。比如:

图8.13 具体的温度采集设备类

am_temp_lm75_t 为具体的温度采集设备类,具有该类型后,即可使用该类型定义一个具体的温度采集设备实例:

LM75B 是标准的I2C 从机器件,需要知道LM75B 的从机地址,才能使用I2C 总线读取LM75B 中的温度数据。由于从机地址与LM75 外部引脚电平相关,因此LM75 的地址信息需要由用户根据实际硬件电路设置。将需要由用户提供的设备相关信息存放到一个新的设备信息结构体类型中。比如:

当使用AM824-Core 上板载的LM75B 时,LM75B 的7 位I2C 从机地址为1001A2A1A0,由于A0、A1、A2 均与地连接为低电平,因此可得板载LM75B 的7 位从机地址为1001000,即:0x48。基于此,板载LM75B 对应的设备实例信息可以定义如下:

同理,在设备类中需要维持一个指向设备信息的指针。此外,由于使用I2C 接口从LM75B中读取温度数据时,LM75B 相当于是一个I2C 从设备,为了使用I2C 接口与之通信,需要为LM75B 定义一个与之对应的I2C 从设备,新增两个成员,完整的温度采集设备定义即为:

显然,在使用I2C 接口从LM75B 中读取温度之前,需要完成设备中各成员的赋值,这些工作通常在驱动的初始化函数中完成,定义初始化函数的原型为:

  • p_lm75 为指向am_temp_lm75_t 类型实例的指针;

  • p_devinfo 为指向am_temp_lm75_info_t 类型实例信息的指针。

handle 为I2C 句柄,便于使用I2C 接口读取温度数据,初始化函数的返回值即为温度采集设备句柄,其调用形式如下:

返回值即为温度采集设备的句柄,可以作为温度采集接口的第一个参数(handle)的实参,初始化函数的实现范例详见程序清单8.34。

程序清单8.34 初始化函数实现范例

该程序首先建立了标准的I2C 从设备,便于后续使用I2C 接口读取数据,然后初始化了p_info 成员,接着完成了抽象温度采集设备中p_funcs 和p_cookie 的赋值,最后返回设备地址作为用户操作温度采集设备的句柄。pfuncs 赋值为了&__g_temp_lm75_drv_funcs,其中包含了读取温度抽象方法的具体实现,完整定义详见程序清单8.35。

程序清单8.35 抽象方法的实现

在读取温度的实现函数__temp_lm75_read()中,首先使用I2C 接口从LM75B 中读取出当前的实际温度值,详见程序清单8.35(6);接着对数据进行简单处理,两字节数据整合为一个16 位有符号的温度值temp,详见程序清单8.35(10 ~ 11);最后,确认p_temp 指针有效后,将temp 乘以125,再除以32,最终的结果作为输出的温度值。

为什么将temp 乘以125,然后再除以32 呢?这是因为LM75B 中直接读取的数据时实际温度值的256倍,即:实际温度= temp / 256。

而温度采集接口需要返回的温度值是实际温度的1000 倍,即:

* p _ temp=实际温度*1000 = temp/ 256*1000 = temp*1000/ 256

化简可得:

为了便于查阅,如程序清单8.36 所示展示了具体温度采集设备(LM75B)接口文件(am_temp_lm75.h)的内容。

程序清单8.36 am_temp_lm75.h 文件内容

原文标题:周立功:深入理解AMetal——蜂鸣器接口和温度采集接口

文章出处:【微信号:Zlgmcu7890,微信公众号:周立功单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
分享:

评论

相关推荐

光控声音实验

本次实验主要让大家学会如何使用一些特殊的电阻,接上了光敏电阻后,在没有光照时,正常发出声音,但声音特别的小;当有光照时,...

发表于 10-12 09:02 297次 阅读
光控声音实验

如何判断蜂鸣器是有源还是无源

其一下拉电阻,如果R17输入端悬空,R18的存在能够使三极管可保持可靠的关断状态,如果没有R18,....

的头像 电源研发精英圈 发表于 10-04 09:57 336次 阅读
如何判断蜂鸣器是有源还是无源

基于MCU单片机在蜂鸣器系统中的应用设计

我们都知道一般的定时器为16位或8位循环计数,例如对于16位的计数器当计数器数值从0增加到65535....

发表于 09-30 15:30 215次 阅读
基于MCU单片机在蜂鸣器系统中的应用设计

34461A在Fw A.02.09之后,在连续性测试中来自蜂鸣器的声音不稳定

这是我升级后的问题还是每个人的问题? 连续性测试听起来像Mors信号。 有良好的接触蜂鸣器不稳定,请听。 固件A_02_09 ...

发表于 09-29 17:27 79次 阅读
34461A在Fw A.02.09之后,在连续性测试中来自蜂鸣器的声音不稳定

stm32f103的板子蜂鸣器一直响

stm103的板子,蜂鸣器一直响,用串口,JTAG都下载不进程序,可以单步运行调试芯片没问题,但不能全速,是不是哪里短路了...

发表于 09-25 09:20 97次 阅读
stm32f103的板子蜂鸣器一直响

电阻,电容,晶体管,蜂鸣器,电感,桥堆,晶振,继电器电子元件资料介绍

本文档的主要内容详细介绍的是电阻,电容,晶体管,蜂鸣器,电感,桥堆,晶振,继电器电子元件资料介绍。

发表于 09-25 08:00 113次 阅读
电阻,电容,晶体管,蜂鸣器,电感,桥堆,晶振,继电器电子元件资料介绍

单片机MCU基础知识,初学者必看

1.MCU有串口外设的话,在加上电平转换芯片,如MAX232,SP3485就是RS232和RS485....

发表于 09-22 09:00 194次 阅读
单片机MCU基础知识,初学者必看

DBS32A开发板硬件介绍和实验的详细使用手册资料免费下载

本文档的主要内容详细介绍的是DBS32A开发板硬件介绍和实验的详细使用手册资料免费下载硬件介绍,实验....

发表于 09-20 15:20 35次 阅读
DBS32A开发板硬件介绍和实验的详细使用手册资料免费下载

LM75B 具有 I2C 接口的 ±2°C 工业标准温度传感器

LM75B和LM75C是行业标准的数字温度传感器,带有集成的Sigma-Delta模数转换器和I 2 C界面。 LM75提供9位数字温度读数,精度为±25°C至-25°C至100°C,±3°C至-55°C至125°C。 通讯是通过2线接口实现,工作频率高达400kHz。 LM75有三个地址引脚,允许多达八个LM75器件在同一条2线总线上工作。 LM75具有专用的超温输出(O.S.),具有可编程限制和迟滞。该输出具有可编程容错功能,允许用户定义在O.S之前必须发生的连续错误条件的数量。被激活了。 宽温度和电源范围以及I 2 C接口使LM75成为许多应用的理想选择,包括基站,电子测试设备,办公电​​子产品,个人电脑和任何应用热管理对性能至关重要的其他系统。 LM75B和LM75C采用SOIC封装或VSSOP封装。 特性 无需外部元件 关闭模式以最大限度地降低功耗 最多八个LM75可以连接到单个总线 上电默认值允许作为恒温器的独立操作 UL认可组件(LM75B和LM75C) 主要规格: ...

发表于 09-17 16:03 18次 阅读
LM75B 具有 I2C 接口的 ±2°C 工业标准温度传感器

蜂鸣器播放音乐C语言程序免费下载

本文档的作用内容详细介绍的是蜂鸣器播放音乐C语音程序免费下载(包含了播放生日快乐歌曲的详细设计资料)

发表于 09-13 15:26 71次 阅读
蜂鸣器播放音乐C语言程序免费下载

蜂鸣器发声实验

用Arduino 可以完成的互动作品有很多,最常见也最常用的就是声光展示了,本实验就让大家的电路发出声音,能够发出声音的最常见的...

发表于 09-13 09:56 2436次 阅读
蜂鸣器发声实验

电子闹钟diy 从此不再被吵醒而是被吓醒

把电子钟的蜂鸣器换成汽车喇叭,不解释了 为什么要用无线模块,这闹钟你肯定不可能放在床头 应该放在远一....

的头像 39度创意研究所 发表于 09-12 11:27 452次 阅读
电子闹钟diy 从此不再被吵醒而是被吓醒

NB-IoT在智慧城市中的发挥了什么作用

经过2017年“物联网元年”的爆发,目前物联网技术已经渗透各行各业,比如生产制造、交通物流、健康医疗....

的头像 人间烟火123 发表于 09-05 17:03 1776次 阅读
NB-IoT在智慧城市中的发挥了什么作用

水位报警器怎么做

本文主要介绍了水位报警器的两种制作方法及步骤。步骤:首先,将磁控开关的一端连到电池盒的红色导线,另一....

的头像 发烧友学院 发表于 09-02 10:07 485次 阅读
水位报警器怎么做

HT47R20A-1蜂鸣器的功能及程序介绍

HT47R20A-1 单片机提供了一对与PA0 及PA1 共用引脚的蜂鸣器输出,分别是BZ 及BZ.....

的头像 电子设计 发表于 08-31 09:48 574次 阅读
HT47R20A-1蜂鸣器的功能及程序介绍

如何实现可演奏简易电子琴及自动播放音乐器的详细资料免费下载

本文档的主要内容详细介绍的是如何实现可演奏简易电子琴及自动播放音乐器的详细资料免费下载。使用无源蜂鸣....

发表于 08-30 08:00 97次 阅读
如何实现可演奏简易电子琴及自动播放音乐器的详细资料免费下载

CANDT一致性测试系统发布 保障CAN总线安全

CAN总线已经成为新能源汽车、军工、航空等行业的主控系统应用总线,ZLG致远电子致力于构建CAN总线....

的头像 ZLG致远电子 发表于 08-29 09:54 1023次 阅读
CANDT一致性测试系统发布 保障CAN总线安全

stm32蜂鸣器实验出现图示错误

刚学stm32  蜂鸣器实验    出现图示错误  望前辈解答   感谢 #include "beep.h" voi...

发表于 08-14 12:22 279次 阅读
stm32蜂鸣器实验出现图示错误

LoRa模块和Sub-G模块在无线传输中选择考量

当无线数据的传输越来越广泛,我们仿佛才意识到无线传输的技术真真切切的就在我们的身边。本文简单介绍两种....

的头像 ZLG致远电子 发表于 08-10 09:36 2876次 阅读
LoRa模块和Sub-G模块在无线传输中选择考量

ZLG致远电子发布了三款全新一代测量测试设备

ZLG致远电子高级产品经理刘玉才在“功率变换单元的研发测试技术”的技术分享中,提出功率变换单元的测试....

的头像 电子技术应用ChinaAET 发表于 08-09 09:20 1153次 阅读
ZLG致远电子发布了三款全新一代测量测试设备

如何进行CAN通信设备的批量老化测试

老化测试是产品生产中必不可少的环节,对于CAN通信设备如何进行批量高效的老化测试呢?本文将从成本及方....

的头像 人间烟火123 发表于 08-08 15:19 1101次 阅读
如何进行CAN通信设备的批量老化测试

500M示波器中颠覆性实现以太网分析功能

周立功教授领导的国内一流仪器开发团队,经过十几年如一日的技术攻关和创新,又一次在500M示波器中颠覆....

的头像 ZLG致远电子 发表于 08-08 10:14 1699次 阅读
500M示波器中颠覆性实现以太网分析功能

VK1622 32x8的LCD驱动器详细资料免费下载

VK1621B 是128模式(32x4),内存映射和多功能液晶驱动程序。S / W的VK1621配置....

发表于 08-08 08:00 73次 阅读
VK1622 32x8的LCD驱动器详细资料免费下载

蜂鸣器音乐程序与最简单蜂鸣器电路图之FPGA学习课程

蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子....

发表于 08-07 10:35 451次 阅读
蜂鸣器音乐程序与最简单蜂鸣器电路图之FPGA学习课程

如何针对微带线拐角进行详细仿真

微带线拐角是微带线不连续结构之一,一些有经验的工程师甚至某些大型通信公司的工艺规范用所谓的经验告诉你....

的头像 ZLG致远电子 发表于 08-06 09:11 3623次 阅读
如何针对微带线拐角进行详细仿真

数据采集记录仪如何准确测试温度?

使用热电偶测量温度最常见的测温方法,但是由于热电偶冷端温度不为0℃,直接测量往往会造成较大误差。ZL....

的头像 ZLG致远电子 发表于 08-02 11:03 1237次 阅读
数据采集记录仪如何准确测试温度?

热释电通过外部中断驱动单片机的蜂鸣器响,可是为什么这个蜂鸣器却一直响,下面有我的程序,请大佬帮我指点迷津

#include sbit buzz=P2^3; sbit WELA=P2^7; sbit DULA=P2^6; void main() {   WELA=0; &n...

发表于 08-01 23:26 459次 阅读
热释电通过外部中断驱动单片机的蜂鸣器响,可是为什么这个蜂鸣器却一直响,下面有我的程序,请大佬帮我指点迷津

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

ZLG致远电子推出了一系列“MCU+无线”核心板,本文以NFC核心板为例讲述基于AWorks平台开发....

的头像 周立功单片机 发表于 08-01 10:23 1529次 阅读
NFC核心板为例讲述基于AWorks平台开发的具体方法

关注MVB通信内容以及稳定性为何十分必要

MVB技术广泛应用于现代城市轨道交通车辆通信,对维护车辆通信效益具有直接影响。本文围绕MVB技术展开....

的头像 ZLG致远电子 发表于 07-30 09:05 1738次 阅读
关注MVB通信内容以及稳定性为何十分必要

从接口定义和实现两个方面,深入理解AWbus-lite

在使用AWBus-lite对设备进行管理时,无论设备处于 AWBus-lite拓扑结构中的哪个位置,....

的头像 周立功单片机 发表于 07-23 09:08 1659次 阅读
从接口定义和实现两个方面,深入理解AWbus-lite

火焰报警器设计的详细中文资料概述免费下载

火焰传感器(即红外接收三极管)是机器人专门用来搜寻火源的传感器,本传感器对火焰特别灵敏。实物如下图。....

发表于 07-23 08:00 112次 阅读
火焰报警器设计的详细中文资料概述免费下载

如何使用光敏电阻设计光控声音系统的详细资料概述

本次实验主要让大家学会如何使用一些特殊的电阻,接上了光敏电阻后,在没有光照时,正常发出声音,但声音特....

发表于 07-23 08:00 125次 阅读
如何使用光敏电阻设计光控声音系统的详细资料概述

如何使用蜂鸣器让电路发出声音设计的详细资料概述

用Arduino 可以完成的互动作品有很多,最常见也最常用的就是声光展示了,前面一直都是在用LED ....

发表于 07-23 08:00 159次 阅读
如何使用蜂鸣器让电路发出声音设计的详细资料概述

通过连接蜂鸣器到Arduino数字输出引脚配合程序设计报警器的方式概述

在这个项目中,我们将做一个报警器,通过连接蜂鸣器到Arduino数字输出引脚,并配合相应的程序就可以....

发表于 07-23 08:00 128次 阅读
通过连接蜂鸣器到Arduino数字输出引脚配合程序设计报警器的方式概述

如何使用蜂鸣器、电阻和按钮制作一个音乐键盘乐器的详细资料概述

将使用蜂鸣器、电阻和按钮,制作一个小型的音乐键盘 蜂鸣器的震动频率不同,会发出不同的声音。

发表于 07-23 08:00 111次 阅读
如何使用蜂鸣器、电阻和按钮制作一个音乐键盘乐器的详细资料概述

如何使用蜂鸣器和LM35温度传感器设计温度报警器的详细资料概述

这次我们要做一个更实际的应用——温度报警器。当温度到达我们设定的限定值时,报警器就会响。我们可以用于....

发表于 07-23 08:00 113次 阅读
如何使用蜂鸣器和LM35温度传感器设计温度报警器的详细资料概述

如何改善接线过长导致编程失败或不稳定等一系列问题

在线烧录,集烧录与测试一体,得到了越来越多的人重视。为了加快烧录的效率,往往会制作烧录工装或夹具,而....

的头像 ZLG致远电子 发表于 07-20 09:23 1510次 阅读
如何改善接线过长导致编程失败或不稳定等一系列问题

51单片机从00到99自动计数+蜂鸣器程序分享

[table] [tr][td] //从0到99计数#include #define uint unsigned int#define uchar unsigned charsbit duan=P2^5;sbit wei=P2...

发表于 07-19 06:37 105次 阅读
51单片机从00到99自动计数+蜂鸣器程序分享

51单片机入门教程下载-蜂鸣器

[table] [tr][td] 原理图在第一课中,请自行下载观看。 联系方式: QQ:2842481126 QQ群: 375907913 任何关...

发表于 07-19 04:49 94次 阅读
51单片机入门教程下载-蜂鸣器

51单片机入门之蜂鸣器介绍

[table] [tr][td]蜂鸣器电路较简单,用PNP型三极管驱动蜂鸣器,当P3.7为低电平时,PN结正向偏置,三极管导通,蜂鸣器发声...

发表于 07-19 02:17 125次 阅读
51单片机入门之蜂鸣器介绍

蜂鸣器播放6种声音资料分享

[table] [tr][td] [table=98%] [tr][td]  蜂鸣器播放6种声音   //6个按键播放声音   #includ...

发表于 07-19 00:56 162次 阅读
蜂鸣器播放6种声音资料分享

针对汽车行业的通用型MCU应用

S32K系列汽车MCU是NXP推出的针对汽车行业的通用型MCU,采用亲民的ARM内核,可以覆盖从M0....

的头像 ZLG致远电子 发表于 07-12 08:55 2512次 阅读
针对汽车行业的通用型MCU应用

ZDS3000/4000系列示波器最新固件使用指南

一根网线一个IP,接下来所有操作交给IE浏览器。无论是看波形、截图、还是固件升级全部搞定,就这么简单....

的头像 ZLG致远电子 发表于 07-11 09:12 1223次 阅读
ZDS3000/4000系列示波器最新固件使用指南

M6708U-T系列工控核心板隔离设计指南

GPIO作为常用个开关量控制信号,广泛应用于工业领域的数据采集和驱动控制。当GPIO配置为DI和DO....

的头像 ZLG致远电子 发表于 07-10 09:04 1619次 阅读
M6708U-T系列工控核心板隔离设计指南

CAN隔离网桥中继器集线器系列应用方案

充电桩变多了,充电站变大了,通讯线变长了,那如何才能确保通讯能正常进行就变得重要了。

的头像 ZLG致远电子 发表于 07-06 09:16 1433次 阅读
CAN隔离网桥中继器集线器系列应用方案

教你使用功率计及功率分析仪测试

在使用功率计或者功率分析仪测试时,一般我们要求选择合适的量程,这样测量比较准确,一般要求测量数值在量....

的头像 ZLG致远电子 发表于 07-06 09:13 1459次 阅读
教你使用功率计及功率分析仪测试

通过CSI摄像头为示例,浅析如何通过普通摄像头识别二维码

M1052跨界核心板作为二维码扫描设备的主控方案,搭载NXP i.MX RT105x处理器,主频高达....

的头像 ZLG致远电子 发表于 07-04 09:07 2585次 阅读
通过CSI摄像头为示例,浅析如何通过普通摄像头识别二维码

基于labview的数字电子时钟设计与实现的详细中文资料概述

本系统的基本设计思路是通过可以获取时间的控件来获取相关信息,如:年、月、日、时、分、秒等(与电脑时间....

发表于 07-04 08:00 162次 阅读
基于labview的数字电子时钟设计与实现的详细中文资料概述

IC安全烧录量产设计的一种机制

当产品正式转产批量生产烧录时,您是否担心过批量烧录过程能否真正保证核心敏感数据的安全,是否困扰过如果....

的头像 ZLG致远电子 发表于 07-02 09:17 983次 阅读
IC安全烧录量产设计的一种机制

如何使用74系列常用集成电路设计八路抢答器的详细中文资料概述

介绍了一种用74系列常用集成电路设计的数码显示八路抢答器的电路组成、设计思路及功能。该抢答器除具有基....

发表于 07-02 08:00 135次 阅读
如何使用74系列常用集成电路设计八路抢答器的详细中文资料概述

VK1626 LCD駆动器的详细中文资料免费下载

VK1626 是一个 48x16 的 LCD 驱动器。 可软件程控使其适用于多样化的 LCD 应用线....

发表于 06-29 08:00 140次 阅读
VK1626 LCD駆动器的详细中文资料免费下载

Linux文件“哲学”是否与Windows相同呢?

“一切皆是文件”是Unix/Linux的基本哲学之一,目录、字符设备、块设备、套接字等在Unix/L....

的头像 ZLG致远电子 发表于 06-28 09:43 1249次 阅读
Linux文件“哲学”是否与Windows相同呢?

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

ZLG致远电子推出了一系列“MCU+无线”核心板,本文以NFC核心板为例讲述基于AWorks平台开发....

的头像 ZLG致远电子 发表于 06-22 09:16 1513次 阅读
以NFC核心板为例讲述基于AWorks平台开发的具体方法

采用FPGA DIY开发板控制蜂鸣器产生作用

蜂鸣器——FPGA

的头像 英特尔 Altera视频 发表于 06-22 03:29 759次 观看
采用FPGA DIY开发板控制蜂鸣器产生作用

使用RL78/G13实现蜂鸣器发生叫声

RL78的蜂鸣器是将时钟分频之后进行输出。可以用来取代蜂鸣器或者作为其他时钟的基准。执行期间不需要M....

的头像 Renesas视频 发表于 06-14 15:14 413次 观看
使用RL78/G13实现蜂鸣器发生叫声

基于按键中断实现蜂鸣器驱动

此设计通过按键产生一个中断(通过设置Interrupt工具箱中的Key interrupt sett....

的头像 Renesas视频 发表于 06-14 04:03 579次 观看
基于按键中断实现蜂鸣器驱动

介绍使用按键中断控制蜂鸣器

使用按键中断控制蜂鸣器 利用Buzzer 的 PCLBUZ0 由于没有合适的蜂鸣器 我是用示波器测....

的头像 Renesas视频 发表于 06-14 02:21 701次 观看
介绍使用按键中断控制蜂鸣器

带看门狗功能的专用复位芯片设计方案

在产品规划中,如使用芯片内部集成的DCDC模块给系统的各个子模块(如内存、电子硬盘、硬件看门狗等)供....

的头像 周立功单片机 发表于 06-13 09:16 1564次 阅读
带看门狗功能的专用复位芯片设计方案

AWorks软件设计,邮箱、消息队列和自旋锁使用方法

本文介绍了邮箱、消息队列和自旋锁的使用方法。信号量只能用于任务间的同步,不能传递更多的信息,为此,A....

的头像 ZLG致远电子 发表于 06-13 09:13 2011次 阅读
AWorks软件设计,邮箱、消息队列和自旋锁使用方法

设备驱动在AWbus-lite中驱动设备正常工作

一个硬件设备正常工作的前提是系统中存在对应的驱动。AWorks提供了大量常用硬件设备的驱动,用户通常....

的头像 ZLG致远电子 发表于 06-12 09:06 1036次 阅读
设备驱动在AWbus-lite中驱动设备正常工作