< t; 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, i;TMOD = 1; //置T0定时工作方式1ET0 = 1; //开T0中断EA = 1; //开CPU中断while(1) { i = 0; time = 1; while(time) { k = sszymmh[i] + 7 * sszymmh[i + 1] - 1; //第i个是音符, 第i+1个是第几个八度 timer0h = FREQH[k]; //从数据表中读出频率数值 timer0l = FREQL[k]; //实际上, 是定时的时间长度 time = sszymmh[i + 2]; //读出时间长度数值 i += 3; song(); //发出一个音符 }}}/*======================================应网友要求,下面再详细写一下乐谱和数据的转换关系 。以李叔同大师的《送别》的前二小节来说明转换的方法 。这部分的歌词是:"长 亭 外,古 道 边,";这部分的乐谱是:| 5 35 1 - | 6 16 5 - | 。(注意:乐谱中的1是高音,上边是带点的;还有些音符,应该有下划线,在这里都无法标出 。感兴趣的网友应该去查看正规的乐谱 。)那么,据此就可以写出《送别》前二小节的数据表://--------------------------------------*///code unsigned char sszymmh[] = {//5, 2, 2, 3, 2, 1, 5, 2, 1, 1, 3, 4, //嗦,中音,2个半拍; 咪,中音,1个半拍; 嗦,中音,1个半拍; 哆,高音,4个半拍//6, 2, 2, 1, 3, 1, 6, 2, 1, 5, 2, 4,//啦,中音,2个半拍; 哆,高音,1个半拍; 啦,中音,1个半拍; 嗦,中音,4个半拍//0, 0, 0};//结束标记/*--------------------------------------记住:三个数字一组,代表一个音符 。第一个数字是1234567之一,代表音符哆来咪发...;第二个数字是0123之一,代表低音、中音、高音、超高音;第三个数字是半拍的个数,代表时间长度 。当三个数字都是0,就代表乐曲数据表的结尾 。用这个数据表,替换掉程序中《世上只有妈妈好》的数据表,本程序就可以播放《送别》的前两小节 。*/
【求c51单片机蜂鸣器演奏《青花瓷》c语言程序】
猜你喜欢
- 求《叶明的五劈生活》《诱罪》《豺狼,别过来》及水印墨、麒麟、无欢也笑、SJ姣儿、 万灭之殇 的作品,谢
- 《我的前半生》txt下载在线阅读全文,求百度网盘云资源
- 我是初中生,老师让办关于预防青少年违法犯罪的手抄报。求哥哥姐姐们帮忙弄点资料,不要太长。
- 跪求心怀恶意2018年上映的由博亚娜·诺瓦科维奇主演的在线免费播放资源
- 求4399账号 和密码
- 卫生手消毒效果应达到的要求是什么
- ispm15标准
- 《二十四小尸》txt下载在线阅读全文,求百度网盘云资源
- 跪求《来自星星的你》2013年百度云资源,金秀贤主演的
- 求电影“天堂回信”下载地址
