首页 > 其他分享 >51单片机——蜂鸣器播放提示音(学习记录)

51单片机——蜂鸣器播放提示音(学习记录)

时间:2024-11-03 12:18:12浏览次数:6  
标签:buzzer 蜂鸣器 51 提示音 单片机 IO 驱动 include

踩过的坑!!!红外接收模块输出接口和独立按键k3共用的p32引脚,所以有红外的时候单片机会误以为按了k3按键,测试的时候要把红外接收拔掉,蜂鸣器连接的IO口是P25(江科的是P15),之前学习的时候看弹幕说型号选stc89c51rc2(但我这里的代码没改),就一直选的这个,蜂鸣器也能正常播放提示音,但到后面播放天空之城就会出现音调不准的情况,所以选stc89c51就行,但一定要把P15改成P25!!!
蜂鸣器介绍
驱动方式不同,有源一般用在固定提示驱动简单,无源类似扬声器,普中有源,如何分辨有无源,正负极的判断
在电路中的符号
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

驱动原理
在这里插入图片描述
单片机IO口提高控制信号,实际驱动来自VCC,NPN高电平导通,限流电阻,小电流信号控制大电流蜂鸣器响(图1),PNP低电平导通(图2),单片机IO口不能直接驱动蜂鸣器,就要通过一个芯片ULN2003

ULN2003
在这里插入图片描述在这里插入图片描述
com公共端口,7个非门(由达林顿管组成,具有很强的驱动能力),ULN2003芯片接在其中一路

五线四相步进电机,左边(P15)为IO口,提供信号(普中新版开发板改成了P25,这里用的还是江科提供的PPT内容),BZ连接到蜂鸣器
在这里插入图片描述
c1、c2之间相差8度,c到d是一个全音,中间的黑键是中界线(半音),数字上下加点配合升高半音(#),降低半音(b),只要模拟出音的高低和按下按键的时间长短,就能完成音乐的演奏 。
在这里插入图片描述
在这里插入图片描述
通过定时器控制蜂鸣器多长时间响一次,由于频率不好计算,一般采用周期,一个机器周期等于12个晶振周期,11.0592M/12=对应的机器频率,1/12这个频率才是对应的周期。IO口翻转,将周期分为2部分,一部分是发声,一部分是不发声。

驱动方式
自激蜂鸣器是直流电压驱动的,不需要利用交流信号进行驱动,只需对驱动口输出驱动电平并通过三极管放大驱动电流就能使蜂鸣器发出声音。
单片机驱动他激蜂鸣器的方式有两种:一种是PWM 输出口直接驱动,另一种是利用I/O 定时翻转电平产生驱动波形对蜂鸣器进行驱动。

PWM 输出口直接驱动是利用PWM 输出口本身可以输出一定的方波来直接驱动蜂鸣器。在单片机的软件设置中有几个系统寄存器是用来设置PWM 口的输出的,可以设置占空比、周期等等,通过设置这些寄存器产生符合蜂鸣器要求的频率的波形之后,只要打开PWM 输出,PWM 输出口就能输出该频率的方波,这个时候利用这个波形就可以驱动蜂鸣器了。

利用I/O 定时翻转电平来产生驱动波形的方式会比较麻烦一点,必须利用定时器来做定时,通过定时翻转电平产生符合蜂鸣器要求的频率的波形,这个波形就可以用来驱动蜂鸣器了。比如为100Hz 的蜂鸣器的驱动,可以知道周期为10000μs,这样只需要驱动蜂鸣器的I/O 口每5000μs 翻转一次电平就可以产生一个频率为100Hz,占空比为1/2duty 的方波,再通过三极管放大就可以驱动这个蜂鸣器了。
代码部分
main.c

#include <at89c51RC2.h>
#include "key.h"
#include "smgshow.h"
#include "buzzer.h"
unsigned char keynum;
void main()
{
	smgshow(1,0);//初始化(要拔掉红外否则显示有误)
	while (1)
	{
	
		keynum=key();
		if(keynum)//如果按键按下
		{
			smgshow(1,keynum);//数码管静态显示按键序号
			buzzer_time(1000);
		}
	}
}

buzzer.c

#include <at89c51RC2.h>
#include <INTRINS.H>
sbit buzzer=P2^5;//重新命名蜂鸣器连接的IO口

void Delay500us(void)	//@11.0592MHz 延时500微秒
{
	unsigned char data i;
	_nop_();
	i = 227;
	while (--i);
}

void buzzer_time(unsigned  int xms)
{
	  unsigned int i;
		for(i=0;i<xms*2;i++)//蜂鸣器以1000Hz的频率响xms*2毫秒
				{
						buzzer=!buzzer;//高电平0.5ms,低电平0.5ms,蜂鸣器周期1ms,频率1000Hz
						Delay500us();
				}
}

标签:buzzer,蜂鸣器,51,提示音,单片机,IO,驱动,include
From: https://blog.csdn.net/2301_80057226/article/details/143375676

相关文章

  • 代码随想录算法训练营第九天|leetcode151.翻转字符串里的单词、卡码网55.右旋字符串、
    1leetcode151.翻转字符串里的单词题目链接:151.反转字符串中的单词-力扣(LeetCode)文章链接:代码随想录视频链接:字符串复杂操作拿捏了!|LeetCode:151.翻转字符串里的单词哔哩哔哩bilibili自己的思路:直接将空格去掉,然后分割字符串为列表,在列表中进行翻转,不在字符串内部操作......
  • 基于51单片机温湿度采集数码管手机app显示+源代码程序+proteus仿真+dht11温湿度传感器
    一、设计简介本项目是简单的物联网(IoT)应用,使用51单片机STC89C52与温湿度传感器DHT11相结合,测量温湿度数据显示在八位数码管,同时通过WiFi模块ESP8266(ESP-01S)将测得的温湿度数据发送到手机APP上,而手机APP则使用AppInventor进行开发。二、功能设计1、数码管实时显示当前温湿度......
  • POJ1511-Invitation Cards
    继续刷邝斌飞最短路专题POJ(TimeLimit:8000MS、MemoryLimit:262144K)洛谷(3s、0B) —— 买一送一洛谷(时间限制:559ms、内存限制:1.46GB)最爱的可用平台(总时间限制: 3000ms 内存限制: 65536kB)HDU(TimeLimit:5000MS、MemoryLimit:65536K)......
  • 打卡信奥刷题(161)用C++信奥P1451[普及组/提高] 求细胞数量
    求细胞数量题目描述一矩形阵列由数字000到999组成,数字......
  • springboot在线吉他配套服务系统-计算机毕业设计源码53451
    目录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2系统分析2.1可行性分析2.2系统流程分析2.2.1数据流程2.2.2业务流程2.3系统功能分析2.3.1功能性分析2.3.2非功能性分析2.4系统用例分析2.5本章小结3系统总体......
  • 51单片机 3.1独立按键的基本操作
    一、电路图及分析(部分解释参考网络,仅用于学习记录)蓝桥杯单片机的板子将独立按键和矩阵按键结合了起来,通过一个短接片选择使用独立按键还是矩阵按键。首先我们先看原理图的左下角绿色方框所标的地方,这里与我们板子上的短接片所对应,是选择按键工作模式的地方。  如果短......
  • 悉硕512GB固态硬盘RTS5766DL量产工具开卡成功教程,量产部落RTS5766 SSV6量产工具,支持EC
    固态硬盘坏了怎么办,比如不认盘、无法分区、无法格式化、反应慢、读写蓝屏死机无响应等等比较严重的故障,这时候该怎么办呢?难道只能扔掉重新买一个吗?实际上是完全可以自己修好的,从量产部落下载量产工具,使用量产工具对固态硬盘进行开卡,基本可以修复固态硬盘90%以上的故障问题。手中这......
  • 51单片机蓝牙遥控小车中遇到的问题及解决方案&步骤心得
    一、遇到的问题及解决方案Q1:马达与车盘连接不牢固。A:可用橡皮筋缠紧连接处(如图)。Q2:L298N电机驱动模块无法驱动电机。A:若是仅仅连接了一个EN引脚则可能需要对ENA(或B)的两个引脚输入同样的电平。Q3:测试蓝牙时无法将程序烧录到单片机上。A:蓝牙模块的收发口与单片机的收......
  • 51c~C语言~合集1
    一、C语言和C++的区别 C语言虽说经常和C++在一起被大家提起,但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准,C++是C++99标准的。C89就是在1989年制定的标准,如今最新的是C11和C++11标准。根据不同的标准,它们的功能也会有所不同,但是越新的版本支持的编译器越少,所以本......
  • AP5101C 支持PWM 调光功能 ,可通过DIM脚用 PWM 信号调节 LED 输出电流。
    AP5165B系统上电后通过VIN脚对芯片供电,当VIN电压高于2.5V后,芯片电路开始工作。为了芯片有更好的稳定性,建议VIN最小工作电压在3V以上,VIN脚对芯片地要并接一个1uF旁路电容。PCB布板的时VIN电容需要紧挨着端口布局。PWM调光设置AP5165B芯片可以通过外加PWM脉......