常州信息职业技术学院电子与电气工程学院 毕业设计论文
附录二:仿真图
常州信息职业技术学院电子与电气工程学院 毕业设计论文
附录三:源程序
include
#define sound_amount 5 //歌曲的数量 sbit pause=P2^5; //播放\\暂停 sbit speaker=P2^7; //无源蜂鸣器
//////////////////////////////////////////////
unsigned char timer0h,timer0l,time;//timer0h,timer0l为定时器T0的高低位初值,time为对应的节拍时间
unsigned char music_num,num; //music_num为歌曲编号,music_num=0表示刚开机时的状态,num是查找歌曲数据表的地址
signed char fre; //对应频率数据表的地址
bit play_enable; //歌曲播放的使能标志位,用于播放\\暂停
void delay(unsigned char t); //延时子函数,控制发音的时间长度 void delayms(unsigned int t); //普通延时子程序,可用于按键消抖 void song(void); //演奏一个音符 void music_play(void); //播放歌曲 ////////////////////////////////////////////// //每三个数字,代表一个音符
//第一个数字是音符的数值1234567之一(第几个音),代表哆来咪发... //第二个数字是0123之一,代表低音\\中音\\高音\\超高音(第几个八度) //第三个数字是时间长度,以半拍为单位,乐曲数据表的结尾是三个0 ////////////////////////////////////////////// //《祝你生日快乐》
unsigned char code song1[]={
5,1,1, 5,1,1, 6,1,2, 5,1,2, 1,2,2, 7,1,4, 5,1,1, 5,1,1, 6,1,2, 5,1,2, 2,2,2, 1,2,4,
5,1,1, 5,1,1, 5,2,2, 3,2,2, 1,2,2, 7,1,2, 6,1,2, 4,2,1, 4,2,1, 3,2,2, 1,2,2, 2,2,2, 1,2,4, 0,0,0};
//《世上只有妈妈好》
unsigned char code song2[]={
6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,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个半拍; //...
5,2,1,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};
常州信息职业技术学院电子与电气工程学院 毕业设计论文
//《当你孤单你会想起谁》 unsigned char code song3[]={
3,2,2, 3,2,1, 4,2,1, 3,2,2, 2,2,1, 1,2,1, 2,2,2, 5,2,2, 2,2,2, 2,2,3, 1,2,2, 1,2,1, 2,2,1, 1,2,2, 7,1,1, 6,1,1, 7,1,2, 3,2,2, 7,1,2, 7,1,3, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 5,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,2, 6,1,2, 2,2,1, 3,2,1, 2,2,1, 1,2,1, 6,1,1, 7,1,1, 1,2,6, 0,0,0 }; //《乡间小路》
unsigned char code song4[]={
3,1,2, 3,1,1, 3,1,1, 6,0,1, 6,0,1, 1,1,2,
6,0,1, 5,0,1, 6,0,4, 6,0,2, 6,0,1 ,6,0,1, 6,0,2, 6,0,1, 1,1,1, 2,1,2, 2,1,1, 3,1,1, 2,1,4, 3,1,1, 3,1,1, 3,1,1, 2,1,1, 4,1,2, 4,1,2, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 7,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 5,0,1, 6,0,1, 7,0,1, 7,0,1, 6,0,1, 5,0,1, 6,0,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 5,1,1, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 4,1,2, 4,1,1, 3,1,1, 2,1,2, 1,1,1, 2,1,1, 3,1,1, 2,1,1, 1,1,1, 2,1,1, 3,1,4, 6,1,2, 3,1,1, 6,1,1, 7,1,1, 6,1,1, 5,1,1, 5,1,2, 2,1,1, 5,1,1, 6,1,1, 5,1,1, 4,1,1, 0,0,0}; //《送别》
unsigned char code song5[]={
5,1,2, 3,1,3, 5,1,1, 1,2,3, 6,1,2, 1,2,2,
5,1,4, 5,1,2, 1,1,1, 2,1,1, 3,1,2, 2,1,1, 1,1,1, 2,1,4, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,1, 1,1,4, 6,1,2, 1,2,2, 1,2,4, 7,1,2, 6,1,1, 7,1,1, 1,2,4, 6,1,1, 7,1,1, 1,2,1, 6,1,1, 6,1,1, 5,1,1, 3,1,1, 1,1,1, 2,1,8, 5,1,2, 3,1,1, 5,1,1, 1,2,2, 7,1,1, 6,1,2, 1,2,2, 5,1,4, 5,1,2, 2,1,1, 3,1,1, 4,1,2, 7,0,2, 1,1,4, 0,0,0}; // 频率-半周期数据表 高八位 共保存了四个八度的28个频率数据 unsigned char code 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 // 频率-半周期数据表 低八位 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只有在刚开机,且未按下暂停键时存在,表示刚开机时的状态,按下后从第一首开始播放 { music_num=1; //歌曲序号置1 num=0; //从头播放 play_enable=1; //允许播放 } else { play_enable=~play_enable; speaker=1; } while(!pause) //若按着暂停键不放手时的处理 { if(play_enable==0){} //如果是暂停,则显示时间不变//(暂停时play_enable==0) } }//暂停键处理结束 }//while结束 } }
void delayms(unsigned int t) //MS延时子程序 { unsigned int i,j; for(i=0;i 常州信息职业技术学院电子与电气工程学院 毕业设计论文 void delay(unsigned char t) //延时子函数,控制发音的时间长度,每个节拍0.4S { unsigned char t1; unsigned long t2; for(t1=0;t1 for(t2=0;t2<8000;t2++) //延时期间, 可进入T0中断去发音 } TR0=0; //关闭T0, 停止发音 } void timer0(void) interrupt 1 //T0中断程序,控制发音的音调 { speaker=!speaker;//输出方波, 发音 TH0=timer0h; //下次的中断时间,这个时间控制音调高低 TL0=timer0l; } void song(void) //演奏一个音符 { 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) //判断歌曲的结束位,结束后转到下一首 { num=0; //下一首从头播放 music_num=2; play_enable=0; } 百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于单片机的电子音乐门铃设计(7)在线全文阅读。
相关推荐: