基于单片机的电子音乐门铃设计
0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF}; //超高音 1234567 // 频率-半周期数据表 低八位 unsigned char code 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 void main(void) {
TMOD=0x11; //T0 T1 均在工作方式1 ET0=1; //T0开中断 EA=1; //CPU开中断 while(1) {
music_play(); //根据当前状态播放相应歌曲的某个音符 if(!pause) {
delayms(5); if(!pause) {
if(music_num==0) //music_num=0只有在刚开机,且未按下暂停键时存在,
//暂停键处理
表示刚开机时的状态,按下后从第一首开始播放
{ } else { }
while(!pause) //若按着暂停键不放手时的处理 {
if(play_enable==0){}
//如果是暂停,则显示时间不变//(暂停时
play_enable=~play_enable; speaker=1;
music_num=1; //歌曲序号置1 num=0; //从头播放 play_enable=1;
//允许播放
play_enable==0)
29
基于单片机的电子音乐门铃设计
}
}
}//暂停键处理结束
}//while结束 }
void delayms(unsigned int t) //MS延时子程序 { }
void delay(unsigned char t) //延时子函数,控制发音的时间长度,每个节拍0.4S {
unsigned char t1; unsigned long t2;
for(t1=0;t1 for(t2=0;t2<8000;t2++) //延时期间, 可进入T0中断去发音 unsigned int i,j; for(i=0;i for(j=0;j<123;j++); } } TR0=0; //关闭T0, 停止发音 void timer0(void) interrupt 1 //T0中断程序,控制发音的音调 { } void song(void) //演奏一个音符 { } //////////////////////////////////////////////////////////////////////////////////// 30 speaker=!speaker;//输出方波, 发音 TH0=timer0h; //下次的中断时间,这个时间控制音调高低 TL0=timer0l; TH0=timer0h; //控制音调 TL0=timer0l; TR0=1; //启动T0, 由T0输出方波发音 delay(time); //每个音符的演奏时间 基于单片机的电子音乐门铃设计 void music_play(void)//播放相应歌曲的某个音符 { if((music_num==1)&&(play_enable==1)) { fre=song1[num]+7*song1[num+1]-1;//第i个是音符,第i+1个是第几个八度 timer0l=FREQL[fre]; time=song1[num+2]; //读出时间长度数值 num+=3; if(fre==-1) { } song(); //发出一个音符 num=0; //下一首从头播放 music_num=2; play_enable=0; //判断歌曲的结束位,结束后转到下一首 } if((music_num==2)&&(play_enable==1)) { fre=song2[num]+7*song2[num+1]-1; timer0h=FREQH[fre]; timer0l=FREQL[fre]; time=song2[num+2]; num+=3; if(fre==-1) { } song(); play_enable=0; } { if((music_num==3)&&(play_enable==1)) fre=song3[num]+7*song3[num+1]-1; timer0h=FREQH[fre]; timer0l=FREQL[fre]; time=song3[num+2]; num+=3; if(fre==-1) { 31 基于单片机的电子音乐门铃设计 { } } num=0; music_num=4; play_enable=0; song(); if((music_num==4)&&(play_enable==1)) fre=song4[num]+7*song4[num+1]-1; timer0h=FREQH[fre]; num+=3; if(fre==-1) { } song(); num=0; music_num=5; play_enable=0; if((music_num==5)&&(play_enable==1)) { fre=song5[num]+7*song5[num+1]-1; timer0h=FREQH[fre]; timer0l=FREQL[fre]; time=song5[num+2]; num+=3; if(fre==-1) { } song(); num=0; music_num=1; play_enable=0; } } 32 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于单片机的电子音乐门铃的设计(8)在线全文阅读。
相关推荐: