资源简介

使用51单片机的蜂鸣器输出三首音乐:送别、爬音阶、八月桂花。当然了,可以随意更换乐曲,把谱输入数组就行。在播放过程中,使用外部中断来暂停音乐,使用独立按键来选择音乐。经过调试该程序可行。其中蜂鸣器接p1.5,独立按键1接p3.2(外部中断0)实现暂停播放,独立按键2和3接p0.1和p0.0,实现音乐的选择

资源截图

代码片段和文件信息

#include     
#include           

sbit Beep =  P1^5 ;
sbit p1 = P0^1;
sbit p2 = P0^2;
unsigned char pause;
   
unsigned char n=0;  //constant of beat-time counter
/*0xff
0x200x400x260x400x180x400x1c
0x400x180x400x200x400x200x40
0x300x400x260x400x2b0x400x2b
0x400x000x400x260x400x18
0x400x190x400x1c0x400x180x40
0x200x400x200x400x2b0x400x24
0x400x330x400x300x400x00
*/
unsigned char code music_tab1[] = {
0x600x100x550x100x4c0x100x48
0x100x400x100x390x100x330x10
0x300x100x2b0x100x260x100x24
0x100x200x100x1c0x100x190x10
0x180x100x150x100x130x100x12
0x100x100x100x0e0x100x0d0x10
0x00
};   
unsigned char code music_tab2[] ={   
0x18 0x30 0x1C  0x10 //form:frequence beat frequence beat
0x20 0x40 0x1C  0x10   
0x18 0x10 0x20  0x10   
0x1C 0x10 0x18  0x40   
0x1C 0x20 0x20  0x20   
0x1C 0x20 0x18  0x20   
0x20 0x80 0xFF  0x20   
0x30 0x1C 0x10  0x18   
0x20 0x15 0x20  0x1C   
0x20 0x20 0x20  0x26   
0x40 0x20 0x20  0x2B   
0x20 0x26 0x20  0x20   
0x20 0x30 0x80  0xFF   
0x20 0x20 0x1C  0x10   
0x18 0x10 0x20  0x20   
0x26 0x20 0x2B  0x20   
0x30 0x20 0x2B  0x40   
0x20 0x20 0x1C  0x10   
0x18 0x10 0x20  0x20   
0x26 0x20 0x2B  0x20   
0x30 0x20 0x2B  0x40   
0x20 0x30 0x1C  0x10   
0x18 0x20 0x15  0x20   
0x1C 0x20 0x20  0x20   
0x26 0x40 0x20  0x20   
0x2B 0x20 0x26  0x20   
0x20 0x20 0x30  0x80   
0x20 0x30 0x1C  0x10   
0x20 0x10 0x1C  0x10   
0x20 0x20 0x26  0x20   
0x2B 0x20 0x30  0x20   
0x2B 0x40 0x20  0x15   
0x1F 0x05 0x20  0x10   
0x1C 0x10 0x20  0x20   
0x26 0x20 0x2B  0x20   
0x30 0x20 0x2B  0x40   
0x20 0x30 0x1C  0x10   
0x18 0x20 0x15  0x20   
0x1C 0x20 0x20  0x20   
0x26 0x40 0x20  0x20   
0x2B 0x20 0x26  0x20   
0x20 0x20 0x30  0x30   
0x20 0x30 0x1C  0x10   
0x18 0x40 0x1C  0x20   
0x20 0x20 0x26  0x40   
0x13 0x60 0x18  0x20   
0x15 0x40 0x13  0x40   
0x18 0x80 0x00   
};     
void int0()  interrupt 1   //n controls the time of beat    
{  
   TH0=0xd8;   
   TL0=0xef;   
   n--;   
}   
   
void delay(unsigned char m)   //control the delay of frequecy  
{   
   unsigned  i=3*m;   
   while(--i);   
}   
   
void delayms(unsigned char a)  //function of ms-delay   
{   
   while(--a);                  //can‘t be a--

  
void pause_music() interrupt 0
{
//delayms(100);
pause = ~ pause;
delayms(100);
/* if(p1 == 0)
{
//load the first song
goto begin;
}
else if(p2 == 0)
{
//load the second song
goto begin;
}
*/
}
 
void main()   
{
//   unsigned char code music_tab[191];
//  unsigned char n1n2;
   unsigned char pm;   //m:constant of frequency    
   unsigned char i=0;
   unsigned char code* addr = music_tab1;
 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5048  2017-05-05 17:06  程序\music

     文件       4716  2017-05-05 17:07  程序\music.c

     文件       1803  2017-05-05 17:06  程序\music.hex

     文件         43  2017-05-05 17:06  程序\music.lnp

     文件      12949  2017-05-05 17:06  程序\music.LST

     文件       9640  2017-05-05 17:06  程序\music.M51

     文件       5020  2017-05-05 17:06  程序\music.OBJ

     文件        172  2017-05-05 18:57  程序\music.plg

     文件      57506  2017-05-05 18:57  程序\music.uvopt

     文件      13398  2017-05-03 21:54  程序\music.uvproj

     目录          0  2017-05-05 18:57  程序

----------- ---------  ---------- -----  ----

               110295                    11


评论

共有 条评论