#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 code HEART_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

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!