89C52单片机 蜂鸣器的实现

1、简介

开发板蜂鸣器电路
在这里插入图片描述

我们可以看到 蜂鸣器是连接开发板 P2.3口,
并且通过三极管来控制蜂鸣器供电电路的连接和断开。

2、实现代码

在这里插入图片描述

#include <reg52.h>	 //引入51头文件
sbit beep = P2^3; //得到控制蜂鸣器的端口值,默认 为高电平 1

//毫秒延时函数
void delay(int time){
int x,y;
for(x = time;x > 0;x--)
	for(y = 114;y>0;y--);

}
void main()
{
	 while(1) {
	 //beep = 0; //蜂鸣器一直响
	 beep = ~beep; //按位取反 1 变 0,蜂鸣器 间断响
	 delay(1000); 
	 }
}
4、效果功能

假装听到 滴滴 的声音···
在这里插入图片描述

  • 2
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
可以使用PWM技术控制蜂鸣器的频率和占空比来播放音乐。具体实现可以参考以下步骤: 1. 将音乐文件转换为数字信号,可以使用Audacity等音频处理软件进行转换。 2. 将数字信号存储到单片机的Flash或外部存储器中。 3. 使用定时器和PWM模块控制蜂鸣器的频率和占空比,从而实现音乐播放。 以下是一个简单的示例代码: ``` #include <reg52.h> sbit SPK=P1^5; //定义蜂鸣器控制引脚 void main() { TMOD=0x01; //设置定时器0为模式1 TH0=0x3C; //设置定时器0初值 TL0=0xB0; TR0=1; //启动定时器0 ET0=1; //使能定时器0中断 EA=1; //使能总中断 while(1); } void timer0() interrupt 1 //定时器0中断服务函数 { static unsigned char music[]={0x01,0x02,0x03,0x04,0x05}; //音乐数据 static unsigned char index=0; //音乐数据索引 static unsigned int count=0; //计数器 static unsigned int freq=0; //频率 static unsigned int duty=0; //占空比 count++; if(count>=1000) //每1秒钟更新一次音乐数据 { count=0; index++; if(index>=sizeof(music)) index=0; } freq=music[index]*100; //计算频率 duty=50; //占空比为50% SPK=!SPK; //控制蜂鸣器引脚翻转 TH0=256-(freq/100); //设置定时器0初值 TL0=256-(freq/100)+((256-freq%100)*3/4); } ``` 该代码使用定时器0中断来控制蜂鸣器的频率和占空比,每秒钟更新一次音乐数据。音乐数据存储在一个静态数组中,每次更新时将数组索引加1,如果超出数组范围则重新从头开始。计算频率时将音乐数据乘以100,占空比固定为50%。在定时器0中断服务函数中,控制蜂鸣器引脚翻转来产生声音。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值