當前位置:首頁 > 單片機 > 單片機
[導讀]/*************************************************************音樂播放器:按鍵0-9對應最多10首樂曲,當一首樂曲播放完畢后,響應按鍵的動作去播放相應的音樂,另外,右、下這兩個按鍵對應著下一首,左上這兩個按

/*************************************************************

音樂播放器:

按鍵0-9對應最多10首樂曲,當一首樂曲播放完畢后,

響應按鍵的動作去播放相應的音樂,另外,右、下這兩個按鍵

對應著下一首,左上這兩個按鍵對應著上一首。

作者:寧靜致遠

*************************************************************/

#include

#include

#defineRldTmr(fr)65536-(11059200/12)/((fr)<<1)

#defineFuDian(n)((n)<<1)/3//附點n分音符的換算

typedefunsignedcharuchar;

typedefunsignedintuint;

typedefunsignedlongulong;

typedefstructmusic{

char*pNote;

char*pDur;

}Music;

sbitBUZZ=P1^6;

sbitKEY_OUT_3=P2^0;

sbitKEY_OUT_2=P2^1;

sbitKEY_OUT_1=P2^2;

sbitKEY_OUT_0=P2^3;

sbitKEY_IN_0=P2^4;

sbitKEY_IN_1=P2^5;

sbitKEY_IN_2=P2^6;

sbitKEY_IN_3=P2^7;

uintcodenoteFreq[]={//中音1-7和高音1-7對應的頻率列表低音

523,587,659,698,784,880,988,

1047,1175,1319,1397,1568,1760,1976,

//261,293,329,349,392,440,494

};

uintcodetmrRld[]={//中音1-7和高音1-7對應的定時器重載值

RldTmr(523),RldTmr(587),RldTmr(659),RldTmr(698),RldTmr(784),RldTmr(880),RldTmr(988),

RldTmr(1047),RldTmr(1175),RldTmr(1319),RldTmr(1397),RldTmr(1568),RldTmr(1760),RldTmr(1976),

//RldTmr(261),RldTmr(293),RldTmr(329),RldTmr(349),RldTmr(392),RldTmr(440),RldTmr(494)

};

ucharcodekeyCodeMap[4][4]={//矩陣按鍵編號到標準鍵盤鍵碼的映射表

{0x31,0x32,0x33,0x26},//數(shù)字鍵1、數(shù)字鍵2、數(shù)字鍵3、向上鍵

{0x34,0x35,0x36,0x25},//數(shù)字鍵4、數(shù)字鍵5、數(shù)字鍵6、向左鍵

{0x37,0x38,0x39,0x28},//數(shù)字鍵7、數(shù)字鍵8、數(shù)字鍵9、向下鍵

{0x30,0x1B,0x0D,0x27}//數(shù)字鍵0、ESC鍵、回車鍵、向右鍵

};

ucharkeyState[4][4]={//全部矩陣按鍵的當前狀態(tài)

{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}

};

bitenable=1,tmrFlg=0;

ucharT0RH=0XFF,T0RL=0X00;

ucharT1RH,T1RL;

ucharmusicIdx=0;

ucharmusicSpeed=72;

ucharnowMusic=0;

//bitenKey=1;

ucharcodetwoTigerNote[]={//音名

1,2,3,1,

1,2,3,1,

3,4,5,

3,4,5,

5,6,5,4,3,1,

5,6,5,4,3,1,

1,5,1,

1,5,1,

'