電子音樂盒的設(shè)計(jì) 設(shè)計(jì)任務(wù):1. 查閱資料,了解單片機(jī)控制單音喇叭發(fā)聲原理; 2. 設(shè)計(jì)基于單片機(jī)的電子音樂盒; 3.通過(guò)按鈕可選擇不同的音樂,切換3首音樂
QQ截圖20190624204836.png (16.25 KB, 下載次數(shù): 23)
下載附件
2019-6-24 20:48 上傳
單片機(jī)源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit BEEP = P3^7;
- uint code Tone_Delay_Table[] =
- {64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178};
- uchar code Song1_Tone [] =
- {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0xFF};
- uchar code Song1_Time [] =
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xFF};
- uchar code Song2_Tone [] =
- {3,5,5,3,3,2,1,2,3,5,3,2,3,5,3,2,1,2,3,2,1,1,0xFF};
- uchar code Song2_Time [] =
- {2,1,1,2,1,1,1,2,1,1,1,2,1,1,2,1,1,1,2,1,1,1,0xFF};
- uchar code Song3_Tone [] =
- {1,3,3,3,3,5,4,2,5,3,7,6,5,5,7,4,4,3,6,7,2,1,0xFF};
- uchar code Song3_Time [] =
- {2,1,1,2,1,1,1,2,1,1,3,2,1,1,2,4,1,1,2,1,1,1,0xFF};
- uchar Song_Index = 0,Tone_Index = 0;
- uchar*Song_Tone_Pointer,*Song_Time_Pointer;
- uchar i = 0;
- void DelayMS(uint ms)
- {
- uchar t;
- while(ms--) for (t = 0; t < 120; t++);
- }
- void Key_Press() interrupt 0
- {
- TR0 = 0;
- Song_Index = ( Song_Index + 1 ) % 3;
- switch (Song_Index)
- {
- case 0: Song_Tone_Pointer = Song1_Tone;
- Song_Time_Pointer = Song1_Time;
- break;
- case 1: Song_Tone_Pointer = Song2_Tone;
- Song_Time_Pointer = Song2_Time;
- break;
- case 2: Song_Tone_Pointer = Song3_Tone;
- Song_Time_Pointer = Song3_Time;
- break;
- }
- i = 0;
- TR0 = 1;
- }
- //----------------------------------------------------------------------------
- void Timer0_Play_Music() interrupt 1
- {
- TH0 = Tone_Delay_Table[ Tone_Index ] / 256;
- TL0 = Tone_Delay_Table[ Tone_Index ] % 256;
- BEEP =~BEEP;
- }
- //-------------------------------------------------------------------------------
- void main()
- {
- TMOD = 0x01;
- IP =0x01;
- IE =0x83;
- TR0 =0;
- Song_Tone_Pointer =Song1_Tone;
- Song_Tone_Pointer =Song1_Time;
- while (1)
- {
- Tone_Index = Song_Tone_Pointer[i];
- if (Tone_Index==0xFF)
- {
- i=0;
- DelayMS(2000);
- continue;
- }
- TR0 = 1;
- DelayMS(Song_Time_Pointer[Tone_Index]*240);
- TR0 = 0;
- i++;
- }
- }
復(fù)制代碼
所有資料51hei提供下載:
代碼.docx
(15.87 KB, 下載次數(shù): 19)
2019-6-24 20:49 上傳
點(diǎn)擊文件名下載附件
原代碼 下載積分: 黑幣 -5
|