单片机蜂鸣器音乐演奏程序解释.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机蜂鸣器音乐演奏程序解释

关于“世上只有妈妈好”的单片机音乐演奏程序 2009-11-22 21:45 单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。 这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。 众所周知,周期为频率的倒数,可以通过音符的频率计算出周期;演奏时,要根据音符的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。 下面是个网上广泛流传的单片机音乐演奏程序,很多人都关心如何修改乐曲的内容,但是不知如何入手。做而论道对这个软件,做了一些说明,希望对大家有所帮助,以后大家自己就能够编写进去新的乐曲。 在这个程序中,包括了两个数据表,其中存放了事先算好的、各种音符频率所对应的、半周期的定时时间初始值。有了这些数据,单片机就可以演奏从低音、中音、高音和超高音,四个八度共28个音符。 演奏乐曲时,就根据音符的不同数值,从表中找到定时时间初始值,送入定时器即可控制音调。 乐曲的数据,也要写个数据表:code unsigned char sszymmh[],表中每三个数字,说明了一个音符,它们分别代表: 第一个数字是音符的数值1234567之一,代表多来咪发...; 第二个数字是0123之一,代表低音、中音、高音、超高音; 第三个数字是时间长度,以半拍为单位。 乐曲数据表的结尾是三个0。 #include reg52.h sbit?? speaker = P1^7; unsigned char timer0h, timer0l, time; //-------------------------------------- //单片机晶振采用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()

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档