
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起开关作用,其基极的高电平使三极管饱和导通,使蜂鸣器发声;而基极低电平则使三极管关闭,蜂鸣器停止发声。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)