51hei圖片_20230623141032.png (59.02 KB, 下載次數(shù): 32)
下載附件
2023-6-23 14:27 上傳
#include "reg52.h" //reg52.h在安裝目錄下D:\Keil_v5\C51\INC\Atmel中
sbit BEEP=P1^5; //蜂鳴器管腳定義
#define FLICKER 500 //定時值
/*變量命名規(guī)則:駝峰法(Camel-Case),小駝峰法用于變量和方法,
uc 小寫表示unsigned char ,KEY中K大寫,Long中L大寫。 */
unsigned char ucKeyLong=0; //按鍵切換
unsigned int uiTimeStart=0;//定時器初值決定蜂鳴器的音調(diào)
unsigned int uiTimeCount=0;//定時器計數(shù)器
//循環(huán)中的語句是尾和首相連接的,特別是延時要求比較高的程序要特別注意
//右移指令需要注意i=i>>1;不能寫成i>>1
//必須在中斷服務程序中重裝初值TMR0必須重裝初值
#define ZERO 0x00 //休止符
//C調(diào)低音的音頻宏定義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調(diào)中音的音頻宏定義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調(diào)高音的音頻宏定義
#define DAOH 523
#define REH 587
#define MIH 659
#define FAH 689
#define SOH 784
#define LAH 880
#define XIH 988
//c調(diào)試音
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,//節(jié)拍時長記號
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,//節(jié)拍時長記號
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,//節(jié)拍時長記號
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 on
unsigned 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,};
/************************************
延時函數(shù): Delay
功能: i=1時,延時 10us
************************************/
void DelayUs(unsigned char i)
{
while(i--);
}
/***********************************************************
函數(shù)名稱:DelayXms
函數(shù)功能:毫秒級非精準延時
入口參數(shù):x - 延時時間
出口參數(shù):
備 注:
***********************************************************/
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為工作方式1
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
;
}
void Timer0_ISR (void) interrupt 1
{
TF0=0;//清除中斷標志
TR0=0;// 關閉定時器中斷
if(uiTimeCount<65535)
uiTimeCount++; //累加定時中斷的次數(shù),
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主函數(shù)入口
***************************************/
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;
}
}
}
https://live.csdn.net/v/306578
|