1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 单片机蜂鸣器播放音乐C语言Protues 仿真实验

单片机蜂鸣器播放音乐C语言Protues 仿真实验

时间:2018-09-29 07:47:45

相关推荐

单片机蜂鸣器播放音乐C语言Protues 仿真实验

#include "reg52.h"//reg52.h在安装目录下D:\Keil_v5\C51\INC\Atmel中sbit BEEP=P1^5; //蜂鸣器管脚定义#define FLICKER 500 //定时值/*变量命名规则:驼峰法(Camel-Case),小驼峰法用于变量和方法,uc 小写表示unsigned char ,KEY中K大写,Long中L大写。 */unsigned char ucKeyLong=0; //按键切换unsigned int uiTimeStart=0;//定时器初值决定蜂鸣器的音调unsigned int uiTimeCount=0;//定时器计数器//循环中的语句是尾和首相连接的,特别是延时要求比较高的程序要特别注意//右移指令需要注意i=i>>1;不能写成i>>1//必须在中断服务程序中重装初值TMR0必须重装初值#define ZERO 0x00 //休止符//C调低音的音频宏定义do 1 频率HZ#define DAOL 130#define REL 146#define MIL 164#define FAL 174#define SOL 196#define LAL 220#define XIL 247//C调中音的音频宏定义do 1 频率523HZ#define DAO 262#define RE 294#define MI 330#define FA 349#define SO 392#define LA 440#define XI 494//c调高音的音频宏定义#define DAOH 523#define REH 587#define MIH 659#define FAH 689#define SOH 784#define LAH 880#define XIH 988//c调试音unsigned int TONE[]={DAOL,REL,MIL,FAL,SOL,LAL,XIL,DAO,0xff};unsigned int DELAY[]={4,4,4,4,4,4,4,4};//两只老虎unsigned int code TWO_TIGER_TONE[]={DAO,RE,MI,DAO,//简谱记号1=C 4/4拍DAO,RE,MI,DAO,MI,FA,SO,MI,FA,SO,SO,LA,SO,FA,MI,DAO,SO,LA,SO,FA,MI,DAO,DAO,SOL,DAO,DAO,SOL,DAO,0xff};//以0xff作为音乐的结束标志unsigned int code TWO_TIGER_DELAY[]={8,8,8,8,//节拍时长记号8,8,8,8,8,8,16,8,8,16,6,2,6,2,8,8,6,2,6,2,8,8,8,8,16,8,8,16,};//黑蝙蝠中队unsigned int code HEI_TONE[]={MI,MI,RE,MI,LA,//简谱记号1=C 4/4拍DAOH,XI,LA,SO,MI,RE,MI,RE,MI,LA,XI,LA,SO,SO,LA,MI,SO,MI,RE,DAO,RE,LA,XI,DAOH,REH,XI,XI,XI,SO,SO,LA,MI,RE,DAO,RE,FA,MI,XIL,RE,DAO,LAL,0xff};//以0xff作为音乐的结束标志unsigned int code HEI_DELAY[]={8,6,2,12,4,//节拍时长记号6,2,4,4,16,8,6,2,12,4,6,2,2,4,2,16,8,2,2,2,12,4,6,2,8,2,2,4,4,8,8,2,2,2,8,8,6,2,4,4,16,};//爱的故事上集unsigned int code LOVE_TONE[]={MI,MI,MI,RE,RE,RE,MI,//简谱记号1=F 4/4拍DAO,LAL,LAL,LAL,LAL,LA,LA,LA,LA,SO,SO,SO,RE,MI,ZERO,ZERO,MI,MI,MI,MI,RE,RE,RE,MI,DAO,LAL,LAL,LAL,LAL,XIL,XIL,DAO,RE,DAO,XIL,XIL,LAL,LAL,LAL,ZERO,MI,MI,MI,RE,RE,MI,DAO,LAL,LAL,LAL,LAL,LA,LA,LA,LA,SO,SO,SO,RE,MI,ZERO,ZERO,MI,MI,MI,MI,RE,RE,RE,MI,DAO,LAL,LAL,LAL,LAL,XIL,XIL,XIL,DAO,RE,DAO,XIL,XIL,LAL,ZERO,0xff};//以0xff作为音乐的结束标志unsigned int code LOVE_DELAY[]={8,4,4,4,4,4,4,//节拍时长记号4,4,16,4,4,4,4,4,4,4,4,4,4,16,8,8,4,4,4,4,4,4,4,4,4,4,16,4,4,8,4,4,4,4,4,4,4,4,16,8,8,4,4,4,8,4,4,4,16,4,4,4,4,4,4,4,4,4,4,16,8,8,4,4,4,4,4,4,4,4,4,4,16,4,4,4,4,4,4,4,4,4,4,24,8,};//七里香unsigned int code SEVEN_TONE[]={ZERO,LA,DAOH,XI,DAOH,DAOH,DAOH,DAOH,DAOH,XI,LA,XI,LA,LA,SO,SO,SO,SO,FA,MI,SO,SO,SO,SO,SO,RE,RE,FA,FA,MI,MI,MI,SO,DAOH,XI,DAOH,DAOH,DAOH,DAOH,DAOH,XI,DAOH,REH,REH,DAOH,REH,DAOH,XI,DAOH,DAOH,DAOH,DAOH,XI,XI,LA,LA,LA,XI,LA,LA,SO,SO,SO,DAOH,DAOH,MI,LA,LA,SO,REH,REH,RE,MI,FA,MI,MI,MI,SO,SO,FA,MI,MI,MI,RE,RE,RE,DAO,DAO,MI,RE,RE,RE,FA,MI,SO,DAOH,DAOH,MI,LA,LA,SO,SO,REH,REH,RE,RE,FA,MI,SO,SO,MIH,MIH,REH,REH,DAOH,DAOH,REH,DAOH,MIH,MIH,REH,REH,SO,DAOH,DAOH,DAOH,DAOH,DAOH,DAOH,XI,SO,SO,XI,DAOH,REH,DAOH,DAOH,SO,DAOH,DAOH,DAOH,DAOH,DAOH,DAOH,XI,SO,SO,REH,MIH,FAH,MIH,MIH,SO,DAOH,DAOH,DAOH,0xff, };code unsigned int SEVEN_DELAY[]={4,4,8,4,2,2,12,4,4,4,4,2,2,2,6,4,4,8,4,2,2,12,4,4,2,2,4,2,2,2,6,4,4,8,2,2,2,16,2,4,4,4,2,2,2,6,4,4,4,2,2,4,2,2,2,6,4,2,2,2,6,16,4,4,8,4,4,8,4,4,8,4,2,2,2,6,4,4,4,4,4,2,2,2,4,2,2,4,2,2,6,4,4,8,4,4,8,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2,16,2,4,2,2,14,2,4,4,4,4,4,4,6,2,4,4,4,2,2,14,2,4,4,4,4,4,4,6,2,4,4,4,2,2,};//My heart will go onunsigned int codeHEART_TONE[]={DAO,DAOL,DAO,DAO,XIL,DAO,ZERO,DAO,XIL,DAO,ZERO,RE,MI,RE,RE,DAO,DAOL,DAO,DAO,XIL,DAO,ZERO,DAO,SOL,SOL,DAO,DAO,DAO,DAO,XIL,DAO,ZERO,DAO,XIL,DAO,ZERO,RE,MI,RE,RE,DAO,DAO,DAO,DAO,XIL,DAO,ZERO,DAO,SOL,SOL,ZERO,DAO,RE,SOL,SOL,SO,FA,FA,MI,MI,RE,RE,MI,FA,MI,RE,DAO,DAO,XIL,DAO,ZERO,DAO,LAL,LAL,XIL,LAL,SOL,ZERO,DAO,0xff};unsigned int code HEART_DELAY[]={12,4,8,8,8,16,4,4,8,16,4,4,4,12,16,12,4,8,8,8,16,4,4,32,32,12,4,12,4,8,16,4,4,8,16,4,4,8,8,16,12,4,8,8,8,16,4,4,32,24,8,32,24,4,4,12,4,4,4,4,4,16,8,8,16,4,4,8,8,16,4,4,24,4,2,2,24,8,32,};/************************************延时函数: Delay功能: i=1时,延时 10us************************************/void DelayUs(unsigned char i){while(i--);}/***********************************************************函数名称:DelayXms函数功能:毫秒级非精准延时入口参数:x - 延时时间出口参数:备 注:***********************************************************/void DelayXms(unsigned char x){unsigned char i,j;for(i=x;i>0;i--)for(j=153;j>0;j--);}void Init_System(){EA=1; //开总中断ET0=1;//允许定时器中断TR0=1;//启动定时器中断TMOD=0x01;//设置定时器0为工作方式1TH0=(65535-2000)/256;TL0=(65535-2000)%256;;}void Timer0_ISR (void) interrupt 1{TF0=0;//清除中断标志TR0=0;// 关闭定时器中断if(uiTimeCount<65535)uiTimeCount++; //累加定时中断的次数,if(uiTimeCount>FLICKER){//P2=~P2;uiTimeCount=0;}TH0=uiTimeStart/256;TL0=uiTimeStart%256;TR0=1; //启动定时器BEEP=~BEEP;}void SoundPlay( unsigned int PLAY[], unsigned int DELAY_BEEP[],unsigned char speed){unsigned int i,j;j=0;while(PLAY[j]!=0xff){if(PLAY[j]==0x00){TR0=0;BEEP=0;}else{uiTimeStart=65535-12000000/(PLAY[j]*speed)/2/16;TR0=1;TH0=uiTimeStart/256;TL0=uiTimeStart%256;}for(i=0;i<DELAY_BEEP[j];i++)DelayXms(150);TR0=0;BEEP=0;DelayXms(255);j++;}DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);}/**********************************main主函数入口***************************************/void main(void){DelayUs(10);Init_System();DelayXms(10);while(1){switch (ucKeyLong){case 0:ucKeyLong=1;SoundPlay(TWO_TIGER_TONE,TWO_TIGER_DELAY,2);DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);SoundPlay(LOVE_TONE,LOVE_DELAY,1);DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);SoundPlay(HEI_TONE,HEI_DELAY,1);DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);SoundPlay(SEVEN_TONE,SEVEN_DELAY,1);DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);SoundPlay(HEART_TONE,HEART_DELAY,1);DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);break;case 1:ucKeyLong=0;SoundPlay(TONE,DELAY,1);DelayXms(255);DelayXms(255);DelayXms(255);DelayXms(255);break;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。