- 1、本文档共3页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
关于“世上只有妈妈好”的单片机音乐演奏程序2009-11-2221:45
单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。
这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。
众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。
在这个程序中,包括了两个数据表,其中存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共28个音符。
演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。
乐曲的数据,也要写个数据表:codeunsignedcharsszymmh[],表中每三个数字,说明了一个音符,它们分别代表:
第一个数字是音符的数值1234567之一,代表多来咪发...;
第二个数字是0123之一,代表低音、中音、高音、超高音;第三个数字是时间长度,以半拍为单位。
乐曲数据表的结尾是三个0。
#includereg52.h
sbit speaker=P1^7;
unsignedchartimer0h,timer0l,time;
//--------------------------------------
//单片机晶振采用11.0592MHz
//频率-半周期数据表高八位 本软件共保存了四个八度的28个频率数据codeunsignedcharFREQH[]={
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
//频率-半周期数据表低八位
codeunsignedchar
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
//--------------------------------------
//世上只有妈妈好数据表 要想演奏不同的乐曲,只需要修改这个数据表codeunsignedcharsszymmh[]={
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};
//--------------------------------------
voidt0int()interrupt1 //T0中断程序,控制发音的音调
{
TR0=0; //先关闭T0
speaker=!speaker; //输出方波,发音
TH0=timer0h; //下次的中断时间,这个时间,控制音调高低TL0=timer0l;
TR0=1; //启动T0
}
//---
您可能关注的文档
最近下载
- 兵工科技2014-14.pdf
- DL T 5745-2016 电力建设工程工程量清单计价规范.docx VIP
- 运单填写规范.ppt
- 岗位风险告知卡(挖掘机、装载机司机岗位).docx VIP
- 西师大版四年级上册数学第七单元 三位数除以两位数的除法 测试卷(突破训练)word版.docx
- 党团基本知识学习与社会实践思想报告【4篇】.docx VIP
- 文华财经指标公式源码WH6指标公式期货软件指标画线指标公式.doc
- 征地应急预案共5篇.docx VIP
- 精品解析:2024年天津市部分区中考二模语文试题(解析版).docx VIP
- 2022儿科副护士长竞聘职位PPT简医院儿科副护士长岗位竞聘自我介绍PPT课件(带内容).pptx
文档评论(0)