
51单片机蜂鸣器程序为:
#include"reg52.h"
typedef unsigned char u8
typedef unsigned int u16
sbit beep=P1^5
void delay(u16 i)
{
while(i--)
}
void main()
{
while(1)
{
beep=~beep
delay(1000)//控制音调频率
beep=~beep/控制声音大小
delay(10)
}
}
扩展资料:
BUZZER蜂鸣器的分类:
1、按其驱动方式的原理分,可分为:有源蜂鸣器(内含驱动线路,也叫自激式蜂鸣器)和无源蜂鸣器(外部驱动,也叫他激式蜂鸣器)。
2、按构造方式的不同,可分为:电磁式蜂鸣器和压电式蜂鸣器。
3、按封装的不同,可分为:DIP BUZZER(插针蜂鸣器)和SMD BUZZER(贴片式蜂鸣器)。
4、按电流的不同,可分为:直流蜂鸣器和交流蜂鸣器,其中,以直流最为常见压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。
电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。
由于两种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一音色差,适用于报警器等设备。而电磁式由于音色好,所以多用于语音、音乐等设备。
uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}//标准音符频率对应的延时表
uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248}
uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3}
//三段音乐的音符
uchar code Song[][50]=
{
{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},
{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1},
{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1}
}
//三段音乐的节拍
uchar code Len[][50]=
{
{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1},
{1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},
{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1}
}
//外部中断0
void EX0_INT() interrupt 0
{
TR0=0//播放结束或者播放中途切换歌曲时停止播放
Song_Index=(Song_Index+1)%3//跳到下一首的开头
Tone_Index=0
P2=DSY_CODE[Song_Index] //数码管显示当前音乐段号
} void main()
{
P2=0xc0
SPK=0
TMOD=0x00 //T0 方式 0
IE=0x83
IT0=1
IP=0x02
while(1)
{
while(K1==1) //未按键等待
while(K1==0) //等待释放
TR0=1 //开始播放
Tone_Index=0 //从第0 个音符开始
//播放过程中按下 K1 可提前停止播放(K1=0)。
//若切换音乐段会触发外部中断,导致 TR0=0,播放也会停止
while(Song[Song_Index][Tone_Index]!=-1&&K1==1&&TR0==1)
{
DelayMS(300*Len[Song_Index][Tone_Index])//播放延时(节拍)
Tone_Index++ //当前音乐段的下一音符索引
}
TR0=0 //停止播放
while(K1==0)//若提前停止播放,按键未释放时等待
}
}
#include<reg51.h>
sbit buzzer = P1^0 声明区
void delay(int)
void pulse_BZ(int,int,int)声明函数void main(void)
{
while(1)
{
pulse_BZ(500,1,1) 调用发声
delay(1000) 延时1000 X 0.5ms
pulse_BZ(500,1,1)
delay(1000)
pulse_BZ(500,1,1)
delay(1000)
pulse_BZ(200,1,1)
delay(1000)
pulse_BZ(200,1,1)
delay(1000)
}
}void delay(int x)
{
int i,j
for(i=0i<xi++)
for(j=0j<60j++)
}void pulse_BZ(int countint THint TL)
{
int i
for(i=oi<counti++) //循环count次,时间count x 1ms
{
buzzer=1 //此程序段产生1HZ 信号
delay(TH)
buzzer=0
delay(TL)
}
}
51单片机蜂鸣器
开关C语言程序:
sbit P2^0=KEY
sbit P2^1=BEEP
unsigned char KEYNUM=0
void main()
{
while(1)
{
if(KEY==0)//开关按下;
{
KEYNUM++
}
if(KEYNUM==1)//第一次按下;
{
BEEP=1//蜂鸣器响
}
if(KEYNUM==2)/第二次按下;
{
BEEP=0//蜂鸣器不响
KEYNUM=0
}
}
}
51单片机,编写延时程序,控制蜂鸣器发声:
很简单的
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit fengmingqi=P0^0//声明IO口
void delay(uint x)//延时子函数
{
uint i,j
for(i=xi>0i--)
for(j=50j>0j--)
}
void main(void)
{
while(1) //循环
{
fengmingqi=1//p0.0口高电平,蜂鸣器发声
delay(500)//延时
fengmingqi=0//p0.0口低电平,蜂鸣器不发声
delay(500)//延时
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)