完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/* 名称:播放音乐
说明:程序运行时播放生日快乐歌, 未使用定时器中断,所有频率完全用延时实现 */ #include #define uchar unsigned char #define uint unsigned int ***it BEEP=P3^7; //生日快乐歌的音符频率表,不同频率由不同的延时来决定 uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; //生日快乐歌节拍表,节拍决定每个音符的演奏长短 uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } //播放函数 void PlayMusic() { uint i=0,j,k; while(SONG_LONG!=0||SONG_TONE!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j { BEEP=~BEEP; //SONG_TONE 延时表决定了每个音符的频率 for(k=0;k } DelayMS(10); i++; } } void main() { BEEP=0; while(1) { PlayMusic(); //播放生日快乐 DelayMS(500); //播放完后暂停一段时间 } }
|
|
相关推荐
6个回答
|
|
|
|
|
|
|
|
|
|
获取数组中的元素,,也不是这么操作的啊,,,建议楼主看看c语言 数组那个方面的知识
|
|
|
|
你的SONG_LONG根本不是拍子长度,这是一个数组名,相当于指针(地址),用地址去乘以20当然不对啦
|
|
|
|
我的理解是这样的:第一个节拍的长度是SONG_LONG[0]={9},然后在这个长度里的频率是SONG_TONE[0]={212},为此写下了以下程序,不知道我的理解正不正确
while(SONG_LONG!=0||SONG_TONE!=0) { for(i=0;i<24;;i++) { for(j=0;j<(SONG_LONG[i]*20);j++) { for(k=0;k<(SONG_TONE[i]/3);k++); { BEEP=~BEEP; DelayMS(10); } } } } |
|
|
|
电人 发表于 2017-7-8 13:00 厉害厉害。。。。。。。。。。。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
6077 浏览 3 评论
7343 浏览 1 评论
7585 浏览 0 评论
Protues中自己封装的芯片元件无Program File、Clock Frequency选项怎么解决,求求大神了!
9373 浏览 1 评论
基于51单片机的车辆倒车雷达报警系统,HC-SR04超声波测距,全套资料
1273 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 01:14 , Processed in 0.593714 second(s), Total 56, Slave 47 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号