51单片机.之蜂鸣器振动播放歌曲

蜂鸣器发声是通过喇叭振动发声的,通电产生磁场,磁铁吸收,而振动。不断释放,吸收。

在这里插入图片描述
1、蜂鸣器发声,播放不同频率的声音逐渐变尖

#include<reg52.h>sbit BUZZ = P1^6;unsigned char T0RH=0;
unsigned char T0RL=0;
void OpenBuzz(unsigned int frequ);
void StopBuzz();void main()
{unsigned int i;EA =1;TMOD = 0x01;while(1){OpenBuzz(4000);for(i=0; i<40000; i++);StopBuzz();for(i=0; i<40000; i++);OpenBuzz(1000);for(i=0; i<40000; i++);StopBuzz();for(i=0; i<40000; i++);}
}void OpenBuzz(unsigned int frequ)
{unsigned int reload;reload = 65536 - (11059200/12)/(frequ*2); T0RH = (unsigned char)(reload >>8);T0RL = (unsigned char)reload;TH0 = 0xFF;TL0 = 0xFE;ET0 = 1;TR0 = 1;
}void StopBuzz()
{ET0 = 0;TR0 = 0;
}void InterruptTimer0() interrupt 1
{TH0 = T0RH;TL0 = T0RL;BUZZ = ~BUZZ;
}

2、蜂鸣器播放歌曲


#include <reg52.h>sbit BUZZ = P1^6;  //蜂鸣器控制引脚unsigned int code NoteFrequ[] = {  //中音1-7和高音1-7对应频率列表523,  587,  659,  698,  784,  880,  988,  //中音1-71047, 1175, 1319, 1397, 1568, 1760, 1976  //高音1-7
};
unsigned int code NoteReload[] = { //中音1-7和高音1-7对应的定时器重载值65536 - (11059200/12) / (523*2),  //中音165536 - (11059200/12) / (587*2),  //265536 - (11059200/12) / (659*2),  //365536 - (11059200/12) / (698*2),  //465536 - (11059200/12) / (784*2),  //565536 - (11059200/12) / (880*2),  //665536 - (11059200/12) / (988*2),  //765536 - (11059200/12) / (1047*2), //高音165536 - (11059200/12) / (1175*2), //265536 - (11059200/12) / (1319*2), //365536 - (11059200/12) / (1397*2), //465536 - (11059200/12) / (1568*2), //565536 - (11059200/12) / (1760*2), //665536 - (11059200/12) / (1976*2), //7
};
bit enable = 1;   //蜂鸣器发声使能标志
bit tmrflag = 0;  //定时器中断完成标志
unsigned char T0RH = 0xFF;  //T0重载值的高字节
unsigned char T0RL = 0x00;  //T0重载值的低字节void PlayTwoTiger();void main()
{unsigned int i;EA = 1;       //使能全局中断TMOD = 0x01;  //配置T0工作在模式1TH0 = T0RH;TL0 = T0RL;ET0 = 1;      //使能T0中断TR0 = 1;      //启动T0while (1){PlayTwoTiger();  //播放乐曲--两支老虎for (i=0; i<40000; i++);  //停止一段时间}
}
/* 两只老虎乐曲播放函数 */
void PlayTwoTiger()
{unsigned char beat;   //当前节拍索引unsigned char note;   //当前节拍对应的音符unsigned int time = 0;      //当前节拍计时unsigned int beatTime = 0;  //当前节拍总时间unsigned int soundTime = 0; //当前节拍需发声时间//两只老虎音符表unsigned char code TwoTigerNote[] = {1,   2,   3, 1,    1,   2,   3, 1,   3, 4, 5,   3, 4, 5,5,6, 5,4, 3, 1,    5,6, 5,4, 3, 1,   1, 5, 1,   1, 5, 1,};//两只老虎节拍表,4表示一拍,1就是1/4拍,8就是2拍unsigned char code TwoTigerBeat[] = {4,   4,   4, 4,    4,   4,   4, 4,   4, 4, 8,   4, 4, 8,3,1, 3,1, 4, 4,    3,1, 3,1, 4, 4,   4, 4, 8,   4, 4, 8,};for (beat=0; beat<sizeof(TwoTigerNote); )  //用节拍索引作为循环变量{while (!tmrflag);  //每次定时器中断完成后,检测并处理节拍tmrflag = 0;if (time == 0)  //当前节拍播完则启动一个新节拍{note = TwoTigerNote[beat] - 1;T0RH = NoteReload[note] >> 8;T0RL = NoteReload[note];//计算节拍总时间,右移2位相当于除4,移位代替除法可以加快执行速度beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;//计算发声时间,为总时间的0.75,移位原理同上soundTime = beatTime - (beatTime >> 2);enable = 1;  //指示蜂鸣器开始发声time++;}else  //当前节拍未播完则处理当前节拍{if (time >= beatTime)  //当前持续时间到达节拍总时间时归零,{                      //并递增节拍索引,以准备启动新节拍time = 0;beat++;}else  //当前持续时间未达到总时间时,{time++;   //累加时间计数if (time == soundTime)  //到达发声时间后,指示关闭蜂鸣器,{                       //插入0.25*总时间的静音间隔,enable = 0;         //用以区分连续的两个节拍}}}}
}
/* T0中断服务函数,用于控制蜂鸣器发声 */
void InterruptTimer0() interrupt 1
{TH0 = T0RH;   //重新加载重载值TL0 = T0RL;tmrflag = 1;if (enable)   //使能时反转蜂鸣器控制电平BUZZ = ~BUZZ;else          //未使能时关闭蜂鸣器BUZZ = 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1523148.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud开发实战(二):通过RestTemplate实现远程调用

目录 SpringCloud开发实战&#xff08;一&#xff09;&#xff1a;搭建SpringCloud框架 RestTemplate介绍 RestTemplate 是 Spring 框架中的一个类&#xff0c;它用于促进 HTTP 请求的发送和接收&#xff0c;并且简化了与 RESTful 服务的交互。RestTemplate 提供了许多便利的方…

Redis Zset 类型:Score 属性在数据排序中的作用

Zset 有序集合 一 . zset 的引入二 . 常见命令2.1 zadd、zrange2.2 zcard2.3 zcount2.4 zrevrange、zrangebyscore2.5 zpopmax、zpopmin2.6 bzpopmax、bzpopmin2.7 zrank、zrevrank2.8 zscore2.9 zrem、zremrangebyrank、zremrangebyscore2.10 zincrby2.11 集合间操作交集 : zi…

【算法】PageRank

一、引言 PageRank是由谷歌创始人拉里佩奇和谢尔盖布林在斯坦福大学读研究生时发明的一种算法&#xff0c;用于衡量网页的重要性。它基于一个简单的假设&#xff1a;更重要的网页会有更多的链接指向它。 二、算法原理 PageRank算法的核心思想是&#xff0c;一个网页的重要性可以…

沸点 | LDBC 第18届 TUC 会议召开,专家孙宇熙受邀参加并发表演讲

图数据管理领域国际权威组织LDBC&#xff08;Linked Data Benchmark Council&#xff09;于8月30日至31日在广州举办了第18届LDBC TUC会议。作为图数据库领域的创新引领者&#xff0c;嬴图受邀参加此次盛会&#xff0c;国际高性能计算与存储系统专家、大数据专家、图专家及嬴图…

【从零开始学爬虫】采集58同城房源数据

本文以采集北京市58同城房源数据为例进行演示&#xff1a; l 采集网站 【场景描述】采集58同城房源数据。 【使用工具】前嗅ForeSpider数据采集系统 http://www.forenose.com/view/commodity/forespider.html 【入口网址】 https://bj.58.com/xiaoqu/?PGTID0d000000-000…

三、数组————相关概念详解

数组 前言一、数据理论基础二、数组常用操作2.1 初始化数组2.2 访问数组中的元素2.3 插入元素2.4 删除元素 三、数组扩展3.1 遍历数组3.2 数组扩容 总结1、数组的优点2、数组的不足 前言 在数据结构中&#xff0c;数组可以算得上最基本的数据结构。数组可以用于实现栈、队列、…

YoloV10改进策略:卷积篇|基于PConv的二次创新|附结构图|性能和精度得到大幅度提高(独家原创)

文章目录 摘要论文指导PConv在论文中的描述改进YoloV10的描述改进代码与结构图改进方法测试结果总结摘要 在PConv的基础上做了二次创新,创新后的模型不仅在精度和速度上有了质的提升,还可以支持Stride为2的降采样。 改进方法简单高效,需要发论文的同学不要错过! 论文指导…

机器学习实战篇——肿瘤良性/恶性分类器(二元逻辑回归)

机器学习之实战篇——肿瘤良性/恶性分类器&#xff08;二元逻辑回归&#xff09; 前言数据集和实验文件下载相关文章推荐实验过程导入相关模块数据预处理手写二元逻辑回归模型&#xff08;小批量梯度下降&#xff09;sklearn逻辑回归器 前言 实验中难免有许多缺陷和错误&#…

Mac M1安装Hive

一、下载解压Hive 1.官网地址 https://dlcdn.apache.org/hive/ 2.选择对应版本进行下载&#xff0c;这里我以3.1.3为例&#xff1b; 3.下载好后&#xff0c;进行解压&#xff0c;并重命名为hive-3.1.3&#xff0c;放到资源库目录下&#xff1b; 二、配置系统环境 1.打开~/…

Hack The Box-Infiltrator【更新中】

信息收集&端口利用 nmap -sSVC infiltrator.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-09-02 09:17 CST Nmap scan report for infiltrator.htb Host is up (0.61s latency). Not shown: 987 filtered tcp ports (no-response) PORT STATE SERVICE …

C++竞赛初阶L1-15-第六单元-多维数组(34~35课)551: T456501 计算矩阵边缘元素之和

题目内容 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。 所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 输入格式 第 1 行包含两个整数&#xff0c;分别为行数 m 和列数 n&#xff0c;两个整数之间空格隔开。 第 2 …

【单调栈 】2289. 使数组按非递减顺序排列

本文涉及的基础知识点 单调栈分类、封装和总结 LeetCode2289. 使数组按非递减顺序排列 给你一个下标从 0 开始的整数数组 nums 。在一步操作中&#xff0c;移除所有满足 nums[i - 1] > nums[i] 的 nums[i] &#xff0c;其中 0 < i < nums.length 。 重复执行步骤&a…

Sobel算子,Scharr算子和Laplacian算子

图像边缘检测大幅度地减少了数据量&#xff0c;并且剔除了可以认为不相关的信息&#xff0c;保留了图像重要的结构属性。有许多方法用于边缘检测&#xff0c; 绝大部分可以划分为两类&#xff1a;基于搜索和基于零穿越。 基于搜索:通过寻找图像一阶导数中的最大值来检测边界&am…

4.1 数据分析-excel 基本操作

第四节&#xff1a;数据分析-excel 基本操作 课程目标 学会excel 基本操作 课程内容 数据伪造 产生一份招聘数据 import pandas as pd from faker import Faker import random import numpy as np# 创建一个Faker实例&#xff0c;用于生成假数据&#xff0c;指定中文本地…

c# 笔记 winform添加右键菜单,获取文件大小 ,多条件排序OrderBy、ThenBy,list<double>截取前5个

Winform右键菜单‌ 要在C# Winform应用程序中添加右键菜单&#xff0c;‌你可以按照以下步骤操作&#xff1a;‌ 1.‌创建菜单项‌ 在Form的构造函数或加载事件中&#xff0c;‌创建ContextMenuStrip控件的实例&#xff0c;‌并为其添加菜单项。‌ 2.‌绑定到控件‌ 将Con…

踩坑记录(序列化与反序列化)

问题描述 实体类中设定字段名称为 sValue和yValue 返回给前段后,变成了svalue,yvalue 字段设置 测试结果:与字段不符,匹配失败 解决方法 在字段上添加JsonProperty("字段名")注解

报告 | 以消费者为中心,消费品零售行业数字化建设持续深化

​2024年是“消费促进年”&#xff0c;国内消费市场稳步复苏。在消费需求多样化、国家政策的推动下&#xff0c;“数字化转型”仍是消费品零售行业的年度主题词&#xff0c;是品牌方获取核心竞争力的必要途径。消费品零售行业的数字化转型重心有所调整&#xff0c;从线上渠道布…

虚拟系统VS

定义 虚拟系统VS&#xff08;Virtual System&#xff09;是指将一台物理设备PS&#xff08;Physical System&#xff09;虚拟成多个相互隔离的逻辑系统。每个VS独立工作&#xff0c;在业务功能上等同于一台独立的传统物理设备&#xff0c;如图2-1所示。 目的 随着网络规模的不…

macos OneNote 2016 for Mac 官方pkg下载地址 - macos 10.15 Catalion 可用Onenote版本官方下载地址

macos 10.15 Catalion 版本的系统已经无法正常从应用商店下载到可用的Onenote 应用,原因是版本不受支持, 而且onenote官方链接的应用商店地址https://apps.apple.com/us/app/microsoft-onenote/id784801555?mt12在中国地区也无法访问, 所以中国地区用户如果想使用onenote应用…

C语言 | Leetcode C语言题解之第394题字符串解码

题目&#xff1a; 题解&#xff1a; #define N 2000typedef struct {int data[30];;int top; } Stack;void push(Stack *s, int e) { s->data[(s->top)] e; }int pop(Stack *s) { return s->data[--(s->top)]; }//多位数字串转换成int int strToInt(char *s) {cha…