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、按电流的不同,可分为:直流蜂鸣器和交流蜂鸣器,其中,以直流最为常见压电式蜂鸣器,用的是压电材料,即当受到外力导致压电材料发生形变时压电材料会产生电荷。同样,当通电时压电材料会发生形变。
电磁式蜂鸣器,主要是利用通电导体会产生磁场的特性,用一个固定的永久磁铁与通电导体产生磁力推动固定在线圈上的鼓膜。
由于两种蜂鸣器发音原理不同,压电式结构简单耐用但音调单一音色差,适用于报警器等设备。而电磁式由于音色好,所以多用于语音、音乐等设备。
K1你就作一个电源开关吧#include<reg52.h>
sbit beep=P1^0 // 定义蜂鸣器
long int code table[]= // 定义发出不同频率的各个时间长度table表,因为定义
//晶振为12MHZ,所以一个周期也正好为1US。
{
2000,4000
}
long int num1,num2
char num
void main()
{
TMOD=0x11 //定义定时器0,1工作方式1
EA=1ET0=1ET1=1
TH0=(65535-50000)/256 //装载定时器0初值,50ms为一次中断
TL0=(65535-50000)%256
TH1=(65535-1)/256 //装载定时器1初值,1us为一次中断
TL1=(65535-1)%256
TR0=1 //打开定时器0
while(1)
{
if(num1==2) //判断定时器0中断了2次,也就是100ms
{
TR0=0 //关闭定时器0
TR1=1 //打开定时器1
beep=0 //蜂鸣器报警
num1=0//让num1清零,以备再次计数
}
if(num2==table[num]) //判断当时间达到第num个秒数
{
TR1=0 //关闭定时器1
TR0=1 //打开定时器0
num2=0 //让num2清零,以备再次计数
beep=1 //关闭蜂鸣器
num++ //让num循环计数
}
if(num==2)
{
num=0
}
}
}
void T0_time()interrupt 1
{
TH0=(65535-50000)/256
TL0=(65535-50000)%256
num1++
}
void T1_time()interrupt 3
{
TH1=(65535-1000)/256
TL1=(65535-1000)%256
num2++
}
int sec=60int cnt=0
char Buzzer=1//关闭蜂鸣器
void Timer0Init(void) //5毫秒@11.0592MHz
{
AUXR &= 0x7F //定时器时钟12T模式
TMOD &= 0xF0 //设置定时器模式
TL0 = 0x00 //设置定时初值
TH0 = 0xEE //设置定时初值
TF0 = 0 //清除TF0标志
ET0 = 1//开T0中断
EA = 1;//开总中断
TR0 = 1 //定时器0开始计时
}
void Timer0Interrupt(void)interrupt 1
{
cnt++
if(cnt>=200)
{
cnt=0sec--
if(sec==0)EA=0
}
}
其它就自己写了。
if(sec==0)Buzzer=0
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)