51单片机蜂鸣器发出悦耳的声音

51单片机蜂鸣器发出悦耳的声音

1.概述

这篇文章介绍单片机控制蜂鸣器入门小实验,通过该实验掌握蜂鸣器发声的原理,控制声音发出我们想听的音乐。

2.蜂鸣器发声

2.1.硬件原理

1.蜂鸣器正极接单片机20号引脚VCC,负极接19号引脚P1.7

2.20MHZ晶振分别接单片机4、5引脚XTAL2和XTAL1

3.晶振每个引脚各接一个30pf电容到单片机10号引脚GND

2.2.蜂鸣器发声代码

main函数中通过修改DELAY_MS()延迟函数的数值观察蜂鸣器有什么变化,通过实际感受了解电流频率的变化如何改变蜂鸣器的发声。

c 复制代码
/*************************************************************
* 程序名:控制蜂鸣器发声
* 编写人:bruce
* 日  期:2023-11-26
* 修改日志:开始编写
/*************************************************************/

#include<STC12C2052AD.H>

sbit BEEP = P1^7;

/*********************************************************************************************
函数名:毫秒级CPU延时函数
调  用:DELAY_MS (?);
参  数:1~65535(参数不可为0)
返回值:无
结  果:占用CPU方式延时与参数数值相同的毫秒时间
备  注:应用于1T单片机时i<600,应用于12T单片机时i<125
/*********************************************************************************************/
void DELAY_MS (unsigned int a){
	unsigned int i;
	while( --a != 0){
		for(i = 0; i < 600; i++);
	}
}

void main(){
	while(1){
		BEEP = 1;
		DELAY_MS(2);
		BEEP = 0;
		DELAY_MS(2);
	}
}

3.电子琴

通过单片机控制电流中数字信号方波的宽度,实现蜂鸣器发出不同的声音。

3.1.按键电子琴

1.硬件原理

根据电路原理图和实物图将硬件接好。

2.八键电子琴程序
c 复制代码
/*************************************************************
* 程序名:控制蜂鸣器发声
* 编写人:bruce
* 日  期:2023-11-26
* 修改日志:开始编写
/*************************************************************/

#include<STC12C2052AD.H>

sbit SPEAKER  = P3^7;
#define KEY  P1 
unsigned char MUSIC; 
unsigned char STH0;
unsigned char STL0;
// tab数组中的值是乐谱中音调对应HZ频率值
unsigned int code tab[]={
64021,64103,64260,64400,//低音3开始 
64524,64580,64684,64777, 
64820,64898,64968,65030, 
65058,65110,65157,65178
}; 

void main(void){ 
	TMOD=0x01; 
	ET0=1; 
	EA=1; 
	KEY = 0xff;
	while(1){ 	
		if(KEY != 0xff){
		switch (~KEY){//显示的列位置		
				case 0x01://			
					MUSIC = 7;	
					break;//		
				case 0x02://			
					MUSIC = 6;	
					break;//		
				case 0x04://			
					MUSIC = 5;	
					break;//		
				case 0x08://			
					MUSIC = 4;	
					break;//		
				case 0x10://			
					MUSIC = 3;	
					break;//		
				case 0x20://			
					MUSIC = 2;	
					break;//		
				case 0x40://			
					MUSIC = 1;	
					break;//		
				case 0x80://			
					MUSIC = 0;	
					break;//		
		}	
		// 用数组的值/256获取十六进制的值
    		STH0=tab[MUSIC]/256; 
    		STL0=tab[MUSIC]%256; 
    		TR0=1;
		}else{ 
    		SPEAKER = 1;
			TR0=0;
		} 
    } 
} 
// 定义计数器的起始值,来控制电流方形波的宽度,改变发声的音调。
void t0(void) interrupt 1 using 0{ 
  TH0=STH0; 
  TL0=STL0; 
  SPEAKER=~SPEAKER; 
}

4.播放音乐

相关推荐
恒锐丰小瑞7 小时前
率能SS8841T 40V/2.5A/双通道H桥驱动芯片,PWM控制接口与低导通电阻(350mΩ),用于POS打印机/安防相机/机器人
单片机·嵌入式硬件·机器人
zcmodeltech8 小时前
钢铁冶金沙盘模型控制系统设计与实现:高炉-连铸-热轧多工序联动方案
分布式·stm32·单片机·嵌入式硬件·交互
徽京人9 小时前
VS Code 接入Esp 32步骤
vscode·单片机·嵌入式硬件
QH1392923188010 小时前
Keysight N5183B N5183B 微波模拟信号发生器
网络·单片机·嵌入式硬件·集成测试·信息与通信
笨笨饿11 小时前
#110_SCH3000 平台图传系统配置指南:从 DVP 摄像头到 UVC/WiFi 双通道传输
c语言·stm32·单片机·嵌入式硬件·物联网·vim
笨笨饿12 小时前
#109_BK7258 蓝牙 A2DP 音频数据通路深度解析
python·stm32·单片机·mcu·物联网·编辑器·音视频
千秋岁rr12 小时前
5.0 TIM
单片机·嵌入式硬件
qq_4017004113 小时前
ADC基准电压与参考电压详细解读:以STM32和28335为例
stm32·单片机·嵌入式硬件
zcmodeltech15 小时前
水利水电沙盘模型控制系统设计与实现:多场景多工况联动方案
网络·stm32·嵌入式硬件·制造·多分类
2601_9667990415 小时前
CH398 技术解析:USB 3.0转千兆以太网单芯片方案与内置电源设计要点
单片机·嵌入式硬件