您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > AVR单片机-mega16-C语言-蜂鸣器唱歌实验程序
/*******************************************文件:BEEP.C环境:编译为ICCAVR6.25A,仿真为AVRStudio4.10硬件:ATMEGA16芯片日期:2006年12月10日功能:驱动开发板上的蜂鸣器备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)/******************************************/#includeiom16v.h//包含型号头文件#includemacros.h//包含位操作头文件#includestdio.h//标准输入输出头文件#includeAVR_PQ1A.h//包含自定义常量头文件#pragmainterrupt_handlerTimer1_Ov:10/*-------------两只老虎-------------*/constucharMusicTable2[77]={13,2,15,2,17,2,13,1,0,1,13,2,15,2,17,2,13,1,0,1,17,2,18,2,20,2,0,2,17,2,18,2,20,2,0,2,20,1,22,1,20,1,18,1,17,2,13,2,20,1,22,1,20,1,18,1,17,2,13,2,15,2,8,2,13,2,0,2,15,2,8,2,13,2,0,2,0xff};/*-----------------新年好------------------*/constucharMusicTable1[129]={13,1,13,1,13,2,8,2,//音符,拍数,17,1,17,1,17,2,13,2,13,1,17,1,20,2,20,2,18,1,17,1,15,2,0,2,15,1,17,1,18,2,18,2,17,1,15,1,17,2,13,2,13,1,17,1,15,2,8,2,12,1,15,1,13,2,0,2,13,1,13,1,13,2,8,2,//音符,拍数,17,1,17,1,17,2,13,2,13,1,17,1,20,2,20,2,18,1,17,1,15,2,0,2,15,1,17,1,18,2,18,2,17,1,15,1,17,2,13,2,13,1,17,1,15,2,8,2,12,1,15,1,13,2,0,2,0xff};//0,1,#1,2,#2,3,4,#4,5,#5,6,#6,7,uintToneTable[37]={ZERO,DO_L,DOA_L,RE_L,REA_L,MI_L,FA_L,FAA_L,SO_L,SOA_L,LA_L,LAA_L,TI_L,DO,DOA,RE,REA,MI,FA,FAA,SO,SOA,LA,LAA,TI,DO_H,DOA_H,RE_H,REA_H,MI_H,FA_H,FAA_H,SO_H,SOA_H,LA_H,LAA_H,TI_H};uinttone;/*******************************************函数名称:Timer1_Ov功能:定时器1溢出中断服务函数(完成单个音的产生)参数:无返回值:无/********************************************/voidTimer1_Ov(void){if(tone)//若不是休止符,则发声{TCNT1=tone;//计数值装入寄存器PORTA^=BIT(BEEP);//蜂鸣器接口电平翻转}}/*******************************************函数名称:Timer1_init功能:Timer1的初始化参数:无返回值:无/********************************************/voidTimer1_init(void){TCCR1A=0x00;//普通端口操作TCCR1B=0x02;//8分频SREG|=0x80;//开放全局中断}/*******************************************函数名称:Music功能:完成整曲的音乐演奏参数:pmusic--曲谱数组指针返回值:无/********************************************/voidMusic(constuchar*pMusic){while(*pMusic!=0xFF)//0xFF为音乐结尾符{TIMSK=0x04;//Timer1溢出中断使能tone=ToneTable[*pMusic];//取音调频率TCNT1=tone;//将频率值对应的计数值写入计时器,开始发声pMusic++;//乐谱音符指针+1,取拍数Delayms((*pMusic)*100);//按拍数延时Delayms((*pMusic)*100);TIMSK=0x00;//发声结束,屏蔽Timer1溢出中断pMusic++;//乐谱音符指针+1,取下一音符}Delayms(1000);//曲谱结束,等待}/*******************************************函数名称:main功能:演奏指定的音乐参数:无返回值:无/********************************************/voidmain(void){Board_init();//初始化开发板/Timer1_init();//Timer1初始化while(1){Music(MusicTable2);//循环演奏歌曲(改变参数MusicTable1可以变换歌曲)}}
本文标题:AVR单片机-mega16-C语言-蜂鸣器唱歌实验程序
链接地址:https://www.777doc.com/doc-2406053 .html