资源描述:
《单片机c语言一闪一闪亮晶晶的乐谱程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、单片机c语言一闪一闪亮晶晶的乐谱程序用使用定时器T0的中断控制播放音乐《一闪一闪亮晶晶》1.C音调与频率的对应关系表音调低1(“dao”)低2低3低4低5低6低7频率2622943303493924404941(中音“dao”)音调234567频率523587659698784880988音调高1高2高3高4高5高6高7频率10641175131813971586176019672.定时常数C计算公式610us4608302fC=,1.085usfT0工作方式0.最大计数为8192,在已知定是常数为C的条件下,13位计算器的高8位和
2、低5的初值可由以下公式设定TH0=(8192-C)/32;TL0=(8192-C)%32;简单乐谱3.
3、1155
4、665-
5、4433
6、221-
7、5544
8、332-
9、5544
10、332-
11、1155
12、665-
13、4433
14、221-
15、4..节拍控制本例简谱的节拍为每分钟72拍,则每个节拍需时间(1000*60ms)/72=833ms?“1“为1拍,需延时833ms?“2”为1/2拍,需延时833/2ms?“3“为1/4,需延时833/4ms5.程序/*----------------------------------------------
16、使用定时器T0的中断控制播放音乐《一闪一闪亮晶晶》,T0工作方式0,图表列出了C音调与频率的对应关系。*----------------------------------------------------*/#includesbitsound=P3^7;//定义声音为引脚P3.7unsignedintC;//存储定时器的定时常熟//以下是C调中音的音频定义#definedao523//讲“dao”宏定义为中音“1”的频率523HZ#definere587#definemi659#definefa698#defi
17、nesao784locatedintheTomb,DongShenJiabang,deferthenextdayfocusedontheassassination.Linping,Zhejiang,1ofwhichliquorwinemasters(WuzhensaidinformationisCarpenter),whogotAfewbayonets,duetomissedfatal,whennightcame#definela880#definexi987/*-----------------------------------
18、--------延时子程序200ms-------------------------------------------*/voiddelay(){unsignedchari,j;for(i=0;i<200;i++)for(j=0;j<110;j++);}/*---------------------------------主函数----------------------------------*/voidmain(){unsignedchari,j;unsignedintcodef[]={dao,dao,sao,sao,la,
19、la,sao,fa,fa,mi,mi,re,re,dao,sao,sao,fa,fa,mi,mi,re,sao,sao,fa,fa,mi,mi,re,dao,dao,sao,sao,la,la,sao,fa,fa,mi,mi,re,re,dao,0xff};//以0xff作为音调的结束标志//一下是简谱中的每个音调的节拍,4对应4个延时单位,8对应8个延时单位unsignedcharcodeJP[]={4,4,4,4,//每行对应一小节音频的节拍4,4,8,4,4,4,4,4,4,8,4,4,4,4,4,4,8,4,4,4,4,4,
20、4,8,4,4,4,4,4,4,8,4,4,4,4,4,4,8,};EA=1;//开总中断ET0=1;//定时器T0中断允许locatedintheTomb,DongShenJiabang,deferthenextdayfocusedontheassassination.Linping,Zhejiang,1ofwhichliquorwinemasters(WuzhensaidinformationisCarpenter),whogotAfewbayonets,duetomissedfatal,whennightcameTMOD=0x
21、00;//使用定时器T0的方式0(13位计数器)while(1){i=0;//从第一个音调f[0]开始播放while(f[i]!=0xff)//只要没有读到结束标志就继续播放{C=460830/f[i];TH0=(8192-C)/32