电子音乐盒的设计 设计任务:1. 查阅资料,了解单片机控制单音喇叭发声原理; 2. 设计基于单片机的电子音乐盒; 3.通过按钮可选择不同的音乐,切换3首音乐
单片机源程序如下:
- #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++;
- }
- }
复制代码
所有资料51hei提供下载:
代码.docx
(15.87 KB, 下载次数: 19)
|