內附三首小音樂。
0.png (32.13 KB, 下載次數: 121)
下載附件
2017-4-30 02:26 上傳
0.png (68.8 KB, 下載次數: 84)
下載附件
2017-4-30 02:25 上傳
全部源碼和仿真下載:
音樂會.zip
(61.05 KB, 下載次數: 140)
2017-4-27 21:06 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序:
- #include<reg51.h>
- sbit fx_buzzer=P3^7; //蜂鳴器音樂輸出,可根據需要自行修改
- sbit music_1 = P2^0; //第一首音樂
- sbit music_2 = P2^1; //第二首音樂
- sbit music_3 = P2^2; //第二首音樂
- unsigned int tone; //簡譜音調計數
- unsigned char fx_timeh,fx_timel,music,speed; //fx_timeh:TH0初值,fx_timel:TL0初值; music =1播放,=0停止
- unsigned char code fx_tone0[]={ //音調對應定時器初值
- 0xFC,0x8E, 0xFC,0xED, 0xFD,0x43, //中音
- 0xFD,0x6A, 0xFD,0xB3, 0xFD,0xF3, 0xFE,0x2D,
- 0xFE,0x47, 0xFE,0x76, 0xFE,0xA1, //高音
- 0xFE,0xC7, 0xFE,0xD9, 0xFE,0xF9, 0xFF,0x16
- };
- unsigned char code songbie[]={//送別
- 0x54,0x32,0x52,0x88,0x64,0x84,0x58,0x54,0x12,0x22,0x34,0x22,0x12,0x2c,0x04,
- 0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,
- 0x64,0x8c,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x52,0x32,0x12,0x2f,
- 0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,
- 0x64,0x8c,0x74,0x62,0x72,0x88,0x62,0x72,0x82,0x62,0x52,0x32,0x12,0x2f,
- 0x54,0x32,0x52,0x86,0x72,0x64,0x84,0x58,0x54,0x22,0x32,0x46,0x72,0x1c,
- 0xff};
- unsigned char code qnzl[]={ //千年之戀
- 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,
- 0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,0x32,0x31,
- 0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,0x31,
- 0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,0x32,
- 0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,0x32,
- 0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,0x63,0xA1,
- 0xA2,0x62,0x92,0x82,0x52,0x31,0x51,0x63,0x51,0x63,
- 0x51,0x63,0x51,0x62,0x82,0x7C,0x02,0x61,0x71,0x82,
- 0x71,0x62,0xA2,0x71,0x76,0x61,0x71,0x82,0x71,0x62,
- 0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,0x73,
- 0x62,0x53,0x42,0x63,0x83,0x83,0x91,0x91,0x61,0x71,
- 0x82,0x71,0x62,0x0A2,0x71,0x76,0x61,0x71,0x82,0x71,
- 0x62,0x52,0x31,0x36,0x61,0x71,0x82,0x71,0x62,0xA3,
- 0x73,0x62,0x53,0x42,0x82,0x88,0x02,0x74,0x93,0x89,
- 0xff};
- unsigned char code laohu[]={ //兩只老虎
- 0x14,0x14,0x24,0x34,0x14,0x14,0x24,0x34,0x14,
- 0x34,0x44,0x58,0x34,0x44,0x58,
- 0x53,0x61,0x53,0x41,0x34,0x14,
- 0x53,0x61,0x53,0x41,0x34,0x14,
- 0x14,0x54,0x18,
- 0x14,0x54,0x18,
- 0xFF};
- unsigned char keyValue; //存儲按下的鍵值
- void init() //初始化函數
- {
- EA=1;//開總中斷
- TMOD=0x10;//定時器0工作在方式1
- TH1=0;
- TL1=0;
- ET1=1;
- music=1; //默認播放
- tone=0;
- speed=20; //播放速度
- }
- void fx_delay(unsigned char i) //音長延時函數
- {
- unsigned int j,k;
- for(i;i>0;i--)
- for(k=speed;k>0;k--)
- for(j=625;j>0;j--);
- }
- void play(unsigned char *temp) //音階播放函數
- {
- if(speed<1) speed=1; //速度范圍設定
- if(speed>60) speed=60;
- while(1)
- {
- if(!music) break;
-
- if(music==2) {tone=0;music=1;break;} //配合按鈕換歌
- if(temp[tone]==0xff){tone=0;break;};
- if(temp[tone]/16!=0) //取高4位的音階判斷
- {
- fx_timeh=fx_tone0[temp[tone]/16*2-2];
- fx_timel=fx_tone0[temp[tone]/16*2-1];
- TR1=1;
- }
- fx_delay(temp[tone]%16); //取數的低4位
- TR1=0;
- tone++;
- }
- TR1=0;
- }
- void fx_tone() interrupt 3 //用于產生各種音調
- {
- TH1=fx_timeh;
- TL1=fx_timel;
- fx_buzzer=~fx_buzzer;
- }
- void Delay10ms(unsigned int n) //延時函數,延時10ms
- {
- unsigned char a, b;
- for (; n>0; n--)
- {
- for (b=38; b>0; b--)
- {
- for (a=130; a>0; a--);
- }
- }
- }
- void EX0_INT(void) interrupt 0 //外部INT0
- {
- if(tone !=0 ) music = 2;
- if(music_1 == 0)
- {
- Delay10ms(1);
- if(music_1 == 0)
- {
- while(music_1 == 0); //等待松開按鈕
- keyValue = 1; //播放第一首音樂-送別
- }
- }
-
- if(music_2 == 0)
- {
- Delay10ms(1);
- if(music_2 == 0)
- {
- while(music_2 == 0); //等待松開按鈕
- keyValue = 2; //播放第二首音樂
- }
- }
-
- if(music_3 == 0)
- {
- Delay10ms(1);
- if(music_3 == 0)
- {
- while(music_3 == 0); //等待松開按鈕
- keyValue = 3; //播放第三首音樂
- }
-
- }
- }
- //主函數
- void main()
- {
- init(); //初始化函數
- //play(song1); //音階播放函數
- IT0=1; //外部中斷INT0位下降沿觸發
- EX0=1; //開INT0中斷允許
-
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
|