
SCM有源蜂鸣器是一种蜂鸣器,您可以根据使用的不同产品选择蜂鸣器的类型,然后我将首先画出有源蜂鸣器的电路图,然后是蜂鸣器的代码编程.
蜂鸣器中的电路原理图如下:

如果不能保证I / O的输出性能,则可以根据情况增加上拉或下拉电阻.
切记: 此蜂鸣器的驱动程序是程序中的高电平和低电平驱动程序. 高电平晶体管导通,蜂鸣器发声,低电平晶体管截止,蜂鸣器不发声.
这确实非常简单. 在程序开始时有源蜂鸣器电路图,我是这样写的:


当然,如果微控制器没有良好的I / O转换功能,则也可以像这样修改它:

在这里稍作解释:
a)
功能功能: 蜂鸣器声驱动器
传入参数: 蜂鸣器发声的次数
b)
该函数中传入的cnt数量需要加倍. 这是因为传入的参数是使蜂鸣器连续发出cnt声音. 但是,除了蜂鸣器外,有时还会不响. 换句话说,每次蜂鸣器都需要关闭. 如果没有关机操作,将不会发出连续的声音,而是连续的声音. 这也很容易推理.
c)
while循环完成后,需要添加一个蜂鸣器以关闭操作.
如果输入参数为2,则目的是使蜂鸣器响两次. 根据程序的执行步骤:
cnt2变为4.
第一次打开蜂鸣器(4),cnt从3降低到3
第二次(3)蜂鸣器关闭,cnt自行降低至2
(2)蜂鸣器打开时第三次,cnt从1降低到1
第4个(1)蜂鸣器关闭,cnt会自减为0
第五个(0)跳出白色
可以看到一段时间后蜂鸣器状态被关闭,但是出于安全原因,请确保在调用该功能后蜂鸣器被关闭. 例如,第一个功能的I / O转换需要更多的保护,因为代码只能看到转换,而不能看到转换后的状态.
至此,完成了一个简单的蜂鸣器电路和驱动器,然后干燥了货物:
编写程序时,很多时候要注意程序的效率. 例如,该蜂鸣器驱动器将在行驶过程中降低效率. 有能力的人可以很快看到这是延迟的问题. 但是,正如我上面所说,它不会立即生效. 因此,为了提高效率,我尝试更改一种驱动蜂鸣器的方法.
代码如下:

实现也非常简单. 让我们简要讨论一下该原理:
1,首先是提供蜂鸣器驱动程序的I / O配置,
2,然后配置计时器
3. 最后,实现了定时器中断功能
我选择的计时器是项目MCU中最简单的计时器. 它配置为1ms中断,可以提供溢出中断. 实际上,我通常使用此计时器来计算系统运行时间Systick_ms. 但是该项目没有用于该系统时间,因此请使用此计时器进行更改.
实现方法:
1. 调用蜂鸣器驱动程序时,相同功能的接口相同,传入参数为蜂鸣器的声音数量.
2. 功能主体已更改. 在此,它已更改为两个变量的分配. 第一个BELL_CNT与普通方法中的cnt2相同,在此不再赘述. 第二个是FLAG_BELL用于保存是否需要驱动蜂鸣器的状态变量. 因此有源蜂鸣器电路图,由于调用了驱动程序函数,因此此变量必须为true.
3. 将静态变量NOW添加到计时器中断功能. 它的功能是使用Systic_ms生成一个50ms的时间片. 为什么要使用它?必须将其用于蜂鸣器开关之间的延迟. 仿真软件延迟. 然后分析代码:
a)首先,无条件地需要分配NOW和Systic_ms以确保50ms的时间片. 相应的代码为NOW = Systick_ms + 50;
b)确定蜂鸣器驱动器状态变量是否为true. 如果不正确,请关闭蜂鸣器,这也是无条件的.
c)如果状态变量为true: 蜂鸣器跳转到Bell_Tog();当然,如果没有跳转功能,也可以使用上述判断cnt的方法. 同时,次数减少BELL_CNT--;同时,判断是否减小到0. 如果减小到0,则表示声音已结束,然后将状态变量分配为false. 再次进入,无论蜂鸣器是打开还是关闭,它都会执行关闭操作,与上述保险相同.
d)最后,这两个变量使用全局变量,它们以结构的形式表示,因为在很多情况下,这两个函数不在C中. 如果要用C编写,则可以忽略它文章.
广东振美智能电子科技生产高端: 防水蜂鸣器,贴片蜂鸣器,电磁蜂鸣器,压电蜂鸣器等蜂鸣器生产厂家,欢迎来电洽谈与合作: 400-659-1989
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/dianqi/article-186375-1.html
非也
但是