单片机蜂鸣器音乐编程对于音乐的编程中 ,音符的十六位数据表是怎样

导读:关于“世上只有妈妈好”的单片机音乐演奏程序1:45,单片机演奏一个音符,这就需要单片机,演奏时,下面是个网上广泛流传的单片机音乐演奏程序,在这个程序中,单片机就可以演奏从低音、中音、高音和超高音,演奏乐曲时,unsignedchartimer0h,timer0l,//-----,//世上只有妈妈好数据表要想演奏不同的乐曲,只需要修改这个数据表codeunsi,v关于“世上只有妈妈好”的单片机音乐演奏程序
21:45 单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。 这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。 众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。 下面是个网上广泛流传的单片机音乐演奏程序,很多人都关心如何修改乐曲的内容,但是不知如何入手。做而论道对这个软件,做了一些说明,希望对大家有所帮助,以后大家自己就能够编写进去新的乐曲。 在这个程序中,包括了两个数据表,其中存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共28个音符。 演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。 乐曲的数据,也要写个数据表:code unsigned char sszymmh[],表中每三个数字,说明了一个音符,它们分别代表: 第一个数字是音符的数值1234567之一,代表多来咪发...; 第二个数字是0123之一,代表低音、中音、高音、超高音;低音:数字下面一个点 中音:没有点 高音:数字上面一个点 超高音:数字上面两个点(两个点纵向排列) 第三个数字是时间长度,以半拍为单位。 音的长短是在音符后面或下面加短横线来表示的。 全音符
5 ― ― ―
唱四拍 二分音符 5 ―
四分音符 5
唱一拍 八分音符 5(在音符下加一条短的横线) 唱半拍 十六分音符5(在音符下加两条短的横线)唱四分之一拍
三十二分音符(在音符下加三条短的横线)唱八分之一拍
乐曲数据表的结尾是三个0。 #include
speaker = P1^7; unsigned char timer0h, timer0l, //-------------------------------------- //单片机晶振采用11.0592MHz // 频率-半周期数据表 高八位
本软件共保存了四个八度的28个频率数据 code unsigned char FREQH[] = {
0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,
//低音1234567
0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i
0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,
//高音 234567
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};
//超高音 1234567 // 频率-半周期数据表 低八位
code unsigned char FREQL[] = {
0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,
//低音1234567
0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i
0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,
//高音 234567
0x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};
//超高音 1234567 //-------------------------------------- //世上只有妈妈好数据表
要想演奏不同的乐曲, 只需要修改这个数据表 code unsigned char sszymmh[] = { 6, 2, 3, 5, 2, 1, 3, 2, 2, 5, 2, 2, 1, 3, 2, 6, 2, 1, 5, 2, 1,
//一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以半拍为单位)。 //6, 2, 3代表:6, 中音, 3个半拍; //5, 2, 1代表:5, 中音, 1个半拍; //3, 2, 2代表:3, 中音, 2个半拍; //5, 2, 2代表:5, 中音, 2个半拍; //1, 3, 2代表:1, 高音, 2个半拍; // 6, 2, 4, 3, 2, 2, 5, 2, 1, 6, 2, 1, 5, 2, 2, 3, 2, 2, 1, 2, 1, 6, 1, 1, 5, 2, 1, 3, 2, 1, 2, 2, 4, 2, 2, 3, 3, 2, 1, 5, 2, 2, 5, 2, 1, 6, 2, 1, 3, 2, 2, 2, 2, 2, 1, 2, 4, 5, 2, 3, 3, 2, 1, 2, 2, 1, 1, 2, 1, 6, 1, 1, 1, 2, 1, 5, 1, 6, 0, 0, 0}; //-------------------------------------- void t0int() interrupt 1
//T0中断程序,控制发音的音调 { TR0 = 0;
//先关闭T0 speaker = !
//输出方波, 发音 TH0 = timer0h;
//下次的中断时间, 这个时间, 控制音调高低 TL0 = timer0l; TR0 = 1;
//启动T0 } //-------------------------------------- void delay(unsigned char t)
//延时程序,控制发音的时间长度 { unsigned char t1; unsigned long t2; for(t1 = 0; t1 < t1++)
//双重循环, 共延时t个半拍
for(t2 = 0; t2 < 8000; t2++); //延时期间, 可进入T0中断去发音 TR0 = 0;
//关闭T0, 停止发音 } //-------------------------------------- void song()
//演奏一个音符 { TH0 = timer0h;
//控制音调 TL0 = timer0l; TR0 = 1;
//启动T0, 由T0输出方波去发音 delay(time);
//控制时间长度 }
//-------------------------------------- void main(void) { unsigned char k, TMOD = 1;
//置T0定时工作方式1 ET0 = 1;
//开T0中断 EA = 1;
//开CPU中断 while(1) {
while(time) {
k = sszymmh[i] + 7 * sszymmh[i + 1] - 1;
//第i个是音符, 第i+1个是第几个八度
timer0h = FREQH[k];
//从数据表中读出频率数值
timer0l = FREQL[k];
//实际上, 是定时的时间长度
time = sszymmh[i + 2];
//读出时间长度数值
//发出一个音符
} } } //====================================== 应网友要求,下面再详细写一下乐谱和数据的转换关系。 以李叔同大师的《送别》的前二小节来说明转换的方法。 这部分的歌词是:“长 亭 外,
古 道 边,”; 这部分的乐谱是:| 5 35 1 - | 6 16 5 - |。 (注意:乐谱中的1是高音,上边是带点的;还有些音符,应该有下划线,在这里都无法标出。感兴趣的网友应该去查看正规的乐谱。) 那么,据此就可以写出《送别》前二小节的数据表: //-------------------------------------- code unsigned char sszymmh[] = { 5, 2, 2,
//嗦,中音,2个半拍; 咪,中音,1个半拍; 嗦,中音,1个半拍; 哆,高音,4个半拍 6, 2, 2,
5, 2, 4, //啦,中音,2个半拍; 哆,高音,1个半拍; 啦,中音,1个半拍; 嗦,中音,4个半拍 0, 0, 0}; //结束标记 //-------------------------------------- 记住:三个数字一组,代表一个音符。 第一个数字是1234567之一,代表音符哆来咪发...; 第二个数字是0123之一,代表低音、中音、高音、超高音; 第三个数字是半拍的个数,代表时间长度。 当三个数字都是0,就代表乐曲数据表的结尾。
用这个数据表,替换掉程序中《世上只有妈妈好》的数据表,本程序就可以播放《送别》的前两小节。
包含总结汇报、外语学习、党团工作、旅游景点、考试资料、文档下载、行业论文、出国留学、资格考试以及单片机蜂鸣器音乐演奏程序的解释等内容。
相关内容搜索网站已改版,请使用新地址访问:
51Music 次程序是将歌曲乐谱转换成51单片机音符代码,通过 驱动蜂鸣器唱歌 SCM 开发 238万源代码下载-
&文件名称: 51Music
& & & & &&]
&&所属分类:
&&开发工具: C++
&&文件大小: 39 KB
&&上传时间:
&&下载次数: 5
&&提 供 者:
&详细说明:次程序是将歌曲乐谱转换成51单片机音符代码,通过单片机驱动蜂鸣器唱歌-The sub-program converts song musical score the 51 MCU note code through the microcontroller drive buzzer singing
文件列表(点击判断是否您需要的文件,如果是垃圾请在下面评价投诉):
&&51Music.exe
&输入关键字,在本站238万海量源码库中尽情搜索:
&[] - 一个用单片机驱动蜂鸣器唱歌的小程序,很,对于单片机初学者来说,很实用。&>&&>&开发技术&>&硬件开发&>&单片机音乐播放器音符提取程序
单片机音乐播放器音符提取程序
上传大小:220KB
单片机音乐播放器音符提取程序,在软件中输入乐谱,可得到数据文件
综合评分:4.5(6位用户评分)
所需积分:
下载次数:42
审核通过送C币
常用视频转换IC资料
创建者:tel
Moubus学习例程
创建者:tox33
Altium Designer Release
创建者:chengdong1314
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var q = $("#form1").serializeArray();
console.log(q);
var res_area_r = $.trim($(".res_area_r").val());
if (res_area_r == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
var mess = $(".res_area_r").val();
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, _username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click",'.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
$(".res_area_r").val($.trim($(".res_area").val()));
评论共有2条
提取音符效果不错,但比较简单,不太适合复杂点的情况,但总体上很不错。
这个软件非常好,提取音符必备神器啊
上传者其他资源上传者专辑
制作电子猫的音频,老鼠的惨叫声,MP3文件
开发技术热门标签
VIP会员动态
前端开发重难点
17年软考最新真题及解析
物联网全栈开发专题
二十大技术领域优质资源
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
CSDN&vip年卡&4000万程序员的必选
单片机音乐播放器音符提取程序
会员到期时间:剩余下载次数:
积分不足!
资源所需积分
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分
当前拥有积分
VIP年卡全年1200次免积分下载
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:求51单片机蜂鸣器播放音乐的教程 C语言
本回答由提问者推荐

我要回帖

更多关于 单片机编程器 的文章

 

随机推荐