⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 music.lst

📁 单片机音乐编程
💻 LST
字号:
C51 COMPILER V7.20   MUSIC                                                                 05/01/2007 17:13:37 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE MUSIC
OBJECT MODULE PLACED IN music.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE music.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          //模 块 名 :  PWM音乐演示程序
   3          //创 建 者 :  杨 勇     
   4                日期 :   2007年4月29日 23:10                              
   5          //修 改 者 :                                                                    
   6                日期 :
   7          //功能描述 :  
   8          //其他说明 :  22.1184MHz晶振 
   9          //芯片型号 :   AT89S52
  10          //配    置 : 
  11          //版    本 :  V1.0
  12          ********************************************************************/
  13          
  14          
  15          
  16          #include <reg52.h>   
  17          #include <intrins.h>
  18          
  19          #define uint unsigned int
  20          #define uchar unsigned char
  21          
  22          //本例采用89C52, 晶振为 22.1184MHzMHZ
  23          //关于如何编制音乐代码, 其实十分简单,各位可以看以下代码.
  24          //频率常数即音乐术语中的音调,而节拍常数即音乐术语中的多少拍;
  25          
  26          unsigned char n=0;       //n为节拍常数变量
  27          unsigned char code music_tab[] ={
  28          0x18, 0x30, 0x1C , 0x10, //格式为: 频率常数, 节拍常数, 频率常数, 节拍常数,
  29          0x20, 0x40, 0x1C , 0x10,
  30          0x18, 0x10, 0x20 , 0x10,
  31          0x1C, 0x10, 0x18 , 0x40,
  32          0x1C, 0x20, 0x20 , 0x20,
  33          0x1C, 0x20, 0x18 , 0x20,
  34          0x20, 0x80, 0xFF , 0x20,
  35          0x30, 0x1C, 0x10 , 0x18,
  36          0x20, 0x15, 0x20 , 0x1C,
  37          0x20, 0x20, 0x20 , 0x26,
  38          0x40, 0x20, 0x20 , 0x2B,
  39          0x20, 0x26, 0x20 , 0x20,
  40          0x20, 0x30, 0x80 , 0xFF,
  41          0x20, 0x20, 0x1C , 0x10,
  42          0x18, 0x10, 0x20 , 0x20,
  43          0x26, 0x20, 0x2B , 0x20,
  44          0x30, 0x20, 0x2B , 0x40,
  45          0x20, 0x20, 0x1C , 0x10,
  46          0x18, 0x10, 0x20 , 0x20,
  47          0x26, 0x20, 0x2B , 0x20,
  48          0x30, 0x20, 0x2B , 0x40,
  49          0x20, 0x30, 0x1C , 0x10,
  50          0x18, 0x20, 0x15 , 0x20,
  51          0x1C, 0x20, 0x20 , 0x20,
  52          0x26, 0x40, 0x20 , 0x20,
  53          0x2B, 0x20, 0x26 , 0x20,
  54          0x20, 0x20, 0x30 , 0x80,
  55          0x20, 0x30, 0x1C , 0x10,
C51 COMPILER V7.20   MUSIC                                                                 05/01/2007 17:13:37 PAGE 2   

  56          0x20, 0x10, 0x1C , 0x10,
  57          0x20, 0x20, 0x26 , 0x20,
  58          0x2B, 0x20, 0x30 , 0x20,
  59          0x2B, 0x40, 0x20 , 0x15,
  60          0x1F, 0x05, 0x20 , 0x10,
  61          0x1C, 0x10, 0x20 , 0x20,
  62          0x26, 0x20, 0x2B , 0x20,
  63          0x30, 0x20, 0x2B , 0x40,
  64          0x20, 0x30, 0x1C , 0x10,
  65          0x18, 0x20, 0x15 , 0x20,
  66          0x1C, 0x20, 0x20 , 0x20,
  67          0x26, 0x40, 0x20 , 0x20,
  68          0x2B, 0x20, 0x26 , 0x20,
  69          0x20, 0x20, 0x30 , 0x30,
  70          0x20, 0x30, 0x1C , 0x10,
  71          0x18, 0x40, 0x1C , 0x20,
  72          0x20, 0x20, 0x26 , 0x40,
  73          0x13, 0x60, 0x18 , 0x20,
  74          0x15, 0x40, 0x13 , 0x40,
  75          0x18, 0x80, 0x00
  76          };
  77          
  78          
  79          void Music_Play(void);
  80          void delay (unsigned char m);
  81          void delayms(unsigned char a);
  82          
  83          
  84          /*=============================================================================
  85          //函 数 名:  void Music_Play(void)
  86          //参    数:  无
  87          //返 回 值:  无
  88          //函数功能:  音乐播放函数
  89          //编 写 者:  杨 勇
  90          //编写日期:  2007年4月29日 23:12
  91          ===============================================================================*/
  92          void Music_Play(void)
  93          { 
  94   1        uchar p,m;   //m为频率常数变量
  95   1        uchar i=0;
  96   1        TMOD&=0x0f;
  97   1        TMOD =0x01;
  98   1        TH0=0xc6;
  99   1        TL0=0xb6;
 100   1        IE=0x82;
 101   1      
 102   1      play:
 103   1         while(1)
 104   1          {
 105   2          a: p=music_tab[i];
 106   2             if(p==0x00)      
 107   2                 { 
 108   3                   i=0; 
 109   3                       delayms(2000);
 110   3                       goto play;
 111   3                 }     //如果碰到结束符,延时1秒,回到开始再来一遍
 112   2             else
 113   2                  if(p==0xff) 
 114   2                  { 
 115   3                        i=i+1;
 116   3                        delayms(200);
 117   3                        TR0=0; 
C51 COMPILER V7.20   MUSIC                                                                 05/01/2007 17:13:37 PAGE 3   

 118   3                        goto a;
 119   3                      }  //若碰到休止符,延时100ms,继续取下一音符          
 120   2                      else        
 121   2                  {
 122   3                        m=music_tab[i++];
 123   3                        n=music_tab[i++];
 124   3                      }  //取频率常数 和 节拍常数
 125   2              TR0=1;                                             //开定时器1
 126   2              while(n!=0)
 127   2                      {
 128   3                        P3 |=0x40;       
 129   3                    delay(m);                        //等待节拍完成, 通过P1口输出音频(可多声道哦!)
 130   3                        P3 &=0xbf;       
 131   3                    delay(m); 
 132   3                      }
 133   2                TR0=0;                                             //关定时器1
 134   2          } 
 135   1      }
 136          
 137          
 138          /*=============================================================================
 139          //函 数 名:  void int0()  interrupt 1 
 140          //参    数:  无
 141          //返 回 值:  无
 142          //函数功能:  定时器0中断服务函数
 143          //编 写 者:  杨 勇
 144          //编写日期:  2007年4月29日 23:16
 145          ===============================================================================*/
 146          void int0()  interrupt 1   //采用中断0 控制节拍
 147          {  
 148   1        TH0=0xc6;
 149   1        TL0=0xb6;
 150   1        n--;
 151   1      }
 152          
 153          /*=============================================================================
 154          //函 数 名:  void delay (unsigned char m)
 155          //参    数:  无
 156          //返 回 值:  无
 157          //函数功能:  延时函数
 158          //编 写 者:  杨 勇
 159          //编写日期:  2007年4月29日 23:17
 160          ===============================================================================*/
 161          void delay (unsigned char m)   //控制频率延时
 162          { 
 163   1       unsigned i=3*m;
 164   1       while(--i);
 165   1      }
 166          
 167          /*=============================================================================
 168          //函 数 名:  void delay (unsigned char m)
 169          //参    数:  无
 170          //返 回 值:  无
 171          //函数功能:  延时函数
 172          //编 写 者:  杨 勇
 173          //编写日期:  2007年4月29日 23:17
 174          ===============================================================================*/
 175          void delayms(unsigned char a)  //豪秒延时子程序
 176          {
 177   1        while(--a);                  //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
 178   1      }
 179          
C51 COMPILER V7.20   MUSIC                                                                 05/01/2007 17:13:37 PAGE 4   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    130    ----
   CONSTANT SIZE    =    191    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -