当前位置: 首页 > news >正文

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()延迟函数的数值观察蜂鸣器有什么变化,通过实际感受了解电流频率的变化如何改变蜂鸣器的发声。

/*************************************************************
* 程序名:控制蜂鸣器发声
* 编写人: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.八键电子琴程序
/*************************************************************
* 程序名:控制蜂鸣器发声
* 编写人: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.播放音乐

相关文章:

  • Doris 数据导入二:Stream Load 方式
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • php获取过去一段的时间范围
  • repo常用命令解析(持续更新)
  • 公网穿透和RTC
  • 【HuggingFace Transformer库学习笔记】基础组件学习:Tokenizer
  • 【Excel】WPS快速按某列查重数据
  • 安装vscode插件与安装vue项目
  • 4-Docker命令之docker kill
  • 45. 跳跃游戏 II
  • SCI一区级 | Matlab实现GWO-CNN-LSTM-selfAttention多变量多步时间序列预测
  • C语言:写一个函数,输入一个十六进制数,输出相应的十进制数
  • 手敲单链表,简单了解其运行逻辑
  • 用户反馈组件实现(Vue3+ElementPlus)含图片拖拽上传
  • Mybatis-Plus实现分页查询
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【EOS】Cleos基础
  • 10个最佳ES6特性 ES7与ES8的特性
  • Android系统模拟器绘制实现概述
  • Babel配置的不完全指南
  • CSS盒模型深入
  • Docker 笔记(2):Dockerfile
  • Flannel解读
  • IP路由与转发
  • JAVA之继承和多态
  • node.js
  • Python连接Oracle
  • SQLServer插入数据
  • 百度地图API标注+时间轴组件
  • 大主子表关联的性能优化方法
  • 马上搞懂 GeoJSON
  • 如何设计一个比特币钱包服务
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • ​ 轻量应用服务器:亚马逊云科技打造全球领先的云计算解决方案
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • #stm32驱动外设模块总结w5500模块
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (8)STL算法之替换
  • (javascript)再说document.body.scrollTop的使用问题
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (论文阅读40-45)图像描述1
  • (南京观海微电子)——COF介绍
  • (十三)MipMap
  • (十一)手动添加用户和文件的特殊权限
  • (十一)图像的罗伯特梯度锐化
  • (五十)第 7 章 图(有向图的十字链表存储)
  • (转)ObjectiveC 深浅拷贝学习
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .Net Core中Quartz的使用方法
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .Net实现SCrypt Hash加密