如何用时钟中断设计驱动4KHZ频率的蜂鸣器驱动子程序

如何用时钟中断设计驱动4KHZ频率的蜂鸣器驱动子程序,第1张

下驱动蜂鸣器的编程示例,供参考

A.第一种,普通IO高低电平驱动法

运行环境: S3F9454,Fosc= 3.2MHz无分频

P2.0为蜂鸣输出端口

本例输出频率为4KHZ,即每250US一个周期,高低电平时间分别为125US

BEEP:

LD BTCON,#10100011B 看门狗禁用

DI

PUSH R5

PUSH R6

首先配置P2.0为普通推挽输出端口

AND P2CONL,#0FEH

OR P2CONL,#02H

LD R6,#0FAH R6设置输出方波个数,本例为250个(计时62.5MS)

ONE_BEEP:

LD R5,#27H R5为频率发生计时器,本例为近似125US(4KHZ)

XOR P2,#01H

_LOOP:

DEC R5

JR NZ,_LOOP

DEC R6

JR NZ,ONE_BEEP

LD BTCON,#02H 恢复看门狗运行

EI

POP R6

POP R5

RET

-----------------------------------------------------------

B.利用P2.0配置为T0定时器匹配输出方式产生

注: 该方式可用于带多位数码显示扫描的软件中,可有效避免因蜂鸣器

输出而造成的数码显示抖动闪烁

#include<reg51.h>

#define uchar unsigned char

#define uint unsigned int

sbit SPK=P1^0

sbit K1=P1^7

//发声函数,注意这里是用扬声器,不能用普通的蜂鸣器

void Alarm(uchar t)

{

uchari,j

for(i=0i<200i++)

{

SPK=~SPK

for(j=0j<tj++)//由参数t行成不同的频率产生不同的声音

}

}

voidmain()

{

SPK=0

while(1)

{

if(K1==1)

{

Alarm(90)

Alarm(120)

}

}

}

由于蜂鸣器的工作电流一般比较大,以致于单片机的I/O 口是无法直接驱动的*(但AVR可以驱动小功率蜂鸣器),所以要利用放大电路来驱动,一般使用三极管来放大电流就可以了。

蜂鸣器驱动电路一般都包含以下几个部分:一个三极管、一个蜂鸣器、一个续流二极管和一个电源滤波电容。

1.蜂鸣器

发声元件,在其两端施加直流电压(有源蜂鸣器)或者方波(无源蜂鸣器)就可以发声,其主要参数是外形尺寸、发声方向、工作电压、工作频率、工作电流、驱动方式(直流/方波)等。这些都可以根据需要来选择。

2.续流二极管

蜂鸣器本质上是一个感性元件,其电流不能瞬变,因此必须有一个续流二极管提供续流。否则,在蜂鸣器两端会产生几十伏的尖峰电压,可能损坏驱动三极管,并干扰整个电路系统的其它部分。

3.滤波电容

滤波电容C1的作用是滤波,滤除蜂鸣器电流对其它部分的影响,也可改善电源的交流阻抗,如果可能,最好是再并联一个220uF的电解电容。

4.三极管

三极管Q1起开关作用,其基极的高电平使三极管饱和导通,使蜂鸣器发声;而基极低电平则使三极管关闭,蜂鸣器停止发声。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7815956.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-10
下一篇2023-04-10

发表评论

登录后才能评论

评论列表(0条)

    保存