无源蜂鸣器也是有极性的电子元件,它的控制电路与有源蜂鸣器一样,如下图所示。但它的发声条件与有源蜂鸣器不同。
只有当一定频率的电流从正极流向负极时,无源蜂鸣器才会鸣响。下图所示是单片机P3.4引脚输出的各种频率的方波,三极管Q1在这些方波信号的控制下导通、截止,就会有和方波频率相同的电流流过无源蜂鸣器的正负两极,无源蜂鸣器就会发声了。
改变控制方波的频率可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。如图2(a)(b)的方波频率不同,控制方坡的频率越高蜂鸣器的声音越尖细,反之频率越低声音越低沉。
另外,改变控制方波的高低电平占空比,则可以控制蜂鸣器的声音大小,如图2中(c)(d)的频率相同占空比不同。
我们可以根据这些特性编写程序,使单片机输出不同频率和占空比的方波信号,用无源蜂鸣器来演奏出简单的乐曲。
下面的程序可以产生频率为1OOOHz的方波,使无源蜂鸣器发出响声。
在编写这段程序时,利用了单片机内部资源定时器中断的功能。STC12C541O单片机的内部定时器可以定义为16伍累加计数器,每12个系统时钟周期计数器加1,当计数器累加到Oxffff时,再累加1就会溢出,这时会产生一个中断,通过编程我们使该中断每0.5ms发生一次,并在该中断服务程序中转变P3.4口的状态(1变0,0变1),就能得到周期为lms(频率为1OOOHz)的方波,在本实验中假设时钟频率为12MHz,程序如下:
#include
sbitBuzzer=P3^4;//将位变量Buzzer定义为单片机
P3.4口
voidsquare_wave(void)interrupt1//定时器0中断服
务程序
{
THO=Oxfe;//【注1】,【注2】,【注3】
TLO=OxOc:
Buzzer^=1;//使蜂鸣器控制口线输出电平转变,产生
方波
}
//主程序
voiDMAin(void)
{
TMOD=OxOl;//将定时器0定义为16位定时器
THO=Oxfe://初始化定时器0的计数寄存器
TLO=OxOC;
ETO=1;//使能定时器0中断
EA=1;//使能单片机中断
TRO=1;//启动定时器0
//循环语句,
For(;;){ }
【注1】定时器0被定义为16位定时器,因为STCl2C54lO是8位单片机,所以16位定时器的计数器高8位存在THO寄存器中,低8位存在TLO寄存器中,初始化时要分别写入;
【注2】程序中将定时器0的16位计数器初始化为OxfeOc,累加499次为Oxffff,再加1就会溢出产生中断,即累加500次产生一次中断。因为时钟频率为12MHz,每12个时钟周期累加1次,累加1次的时间为1Vs,500次的时间为500μs(0.5ms),所以每0.5ms会产生一次中断;
【注3】定时器0溢出后的16位计数器为OxOOOO,如果不重新初始化,要累加65536次才能再次溢出产生中断,所以要在中断服务程序中重新初始化16位计数器为OxfeOc,以保证累加500次后仍能溢出产生中断。
关键字:单片机 蜂鸣器
编辑:神话 引用地址:用单片机控制蜂鸣器的实验电路
推荐阅读最新更新时间:2023-10-12 20:43
MSP432E401Y单片机智能小车PID调速代码
* MSP432E401Y * Description:PID处理函数 * 引脚: * * Author: Robin.J ***************************************************************************/ #include PID.h #include ti/devices/msp432e4/driverlib/driverlib.h float iError_l , iIncpid_l; //当前误差 float iError_r , iIncpid_r; //当前误差 float variable_l; float variab
[单片机]
51单片机——LCD1602液晶屏 C语言入门编程
LCD1602: 1602液晶也叫1602字符型液晶,它能显示2行字符信息,每行又能显示16个字符。它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若 干个5x7的点阵字符位组成,每个点阵字符位都可以用显示一个字符, 每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。 字符代码0x00~0x0F为用户自定义的字符图形RAM(对于5X8点阵的字符,可以存放8组,5X10点阵的字符,存放4组),就是CGRAM了。0x20~0x7F为标准的ASCII码,0xA0~0xFF为日文字符和希腊文字符,其余字符码(0x10~0x1F及0x80~0x9F)没有定义。写入
[单片机]
一种80C198单片机测控通用系统
摘要:介绍了一种以80C198单片机为中央处理器的测控通用系统,给出了系统的硬件原理图及常用软件流程图,并阐述该系统通用性及特点,以供自动测控设计人员参考.
关键词: 单片机 测控系统 通用性
各种测控系统和智能仪器、仪表基本组成包括:传感器、计算机系统、执行器。现在,传感器、执行器的通用性越来越好,设计自动测控系统或智能仪器仪表有标准的4~20mA或0~10mA的标准信号输出的传感器和接受标准驱动信号的执行器供选择,因此,设计者只需设计计算机系统部分,计算机系统基本结构是一致的,仅涉及到具体芯片选择,实现途径大同小异,加之单片机技术的迅猛发展,其集成度越来越高,功能越来越强,接口更容易,如80C198,内部有4个带采
[应用]
51单片机外部计数器的使用方法
T0的端口怎么使用?我想用p3.4口接一个霍尔开关接收脉冲进行计数,数值是放在TH0和TL0的!我的理解有没有错//初始化红外计数器 定义外部中断口P3.4为 脉冲触发模式
void Init_Sum_Ird(){
TMOD= 0x05 ; //开启计数器0 为16位计数器
EA= 1 ; //开总中断
ET0=1; //开外部中断
IT0=1;
TR0=0; //禁用
// TH0=0;
// TL0=0;
sum_ird=0; //初始化计数值为
}
//红外计数器的 中断0 计数累加
void Et0() inte
[单片机]
机器人常用的单片机使用经验
3 使用方法 学AVR单片机的好书是《AVR单片机嵌入式系统原理与应用实践》,封面见下图。 AVR一般采用CVAVR编程软件编程,也可用GUN GCC AVR、AVR Studio软件编程。可采用汇编或C语言编程。烧程序前先输出HEX文件,然后用SLISP(双龙ISP)软件加载,再通过ISP编程线或者25针并口连接线烧入AVR单片机,支持在线编程。 由于AVR单片机最小系统很简单,就是电源+晶振(可不用)+LED+ISP接口(通电就运行,断电就停止,不用复位电路),因此任何初学者都可以用面包板搭出AVR最小系统,并且编程实践。 4 实践经验 使用AVR单片机时注意要正确设置熔丝位,SLISP软件就可设置,熔丝位可决定单片
[模拟电子]
STM32Note初识单片机(2)
本期主要介绍单片机核心--CPU的架构、组成及运作方式。 架构之争 目前微型计算机系统的架构主要有X86、MIPS、ARM、PowerPC、SPARC这几种,但市场上最常见的还是X86和ARM架构的,我们接下来以这两种为例了解下微型计算机体系结构,至于剩下几种如果读者有兴趣就只能自行百度了(任天堂、索尼PS、摩托罗拉了解一下)。 在了解X86和ARM架构之前,我们先介绍下复杂指令集CISC(Complex InstucTIon Set Computer)和精简指令集RISC(Reduced InstrucTIon Set Computer)。上期我们说过CPU运行是通过取指令完成的,根据CPU可执行指令我们分成CISC和R
[单片机]
基于SPIFI外设的Cortex-M MCU嵌入式闪存选型解决方案
新型恩智浦ARM Cortex-M3微控制器首次采用的SPI闪存接口技术(SPIFI,已申请专利)可以帮助32位嵌入式系统设计人员以小尺寸、低成本的串行闪存替代大尺寸、高成本的并行闪存。利用SPIFI (读音与spiffy谐音,意为“出色、整洁、漂亮”等——译注),外部串行闪存可以映射到微控制器内存中,达到片上内存读取效果。新技术可以解决传统嵌入式系统外部闪存选型难题,为设计人员在保持系统性能的同时缩小尺寸及降低成本提供了一条新途径。
目前恩智浦开发出一种新型外设接口技术,该技术在基于ARM Cortex-M3内核的最新LPC1800微控制器上已得到成功应用。嵌入式系统设计人员利用该技术可将串行闪存取代并行闪存,缩小封装
[单片机]
PIC24FV16KM204系列通用16位闪存单片机数据手册
PIC24FV16KM204系列器件为超低功耗Microchip器件引入了许多新的模拟特性。该 16 位单片机系列器件具有丰富的外设功能集和增强的计算性能,为高性能应用提供了新的移植选项,这些应用可能需要超过 8 位的平台,但无需数字信号处理器(Digital Signal Processor, DSC)的数字处理功能。 本文档包含以下器件的具体信息: • PIC24FV08KM101 • PIC24F08KM101 • PIC24FV08KM102 • PIC24F08KM102 • PIC24FV16KM102 • PIC24F16KM102 • PIC24FV16KM104 • PIC24F16KM104 • PIC24
[单片机]