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

📄 auto_music doorbell.lst

📁 单片机音乐程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 138              255-FREQ/24/1112/256,256-FREQ/24/1112%256,      //1 do
 139              255-FREQ/24/1248/256,256-FREQ/24/1248%256,      //2 re
 140              255-FREQ/24/1400/256,256-FREQ/24/1400%256,      //3 mi
 141              255-FREQ/24/1484/256,256-FREQ/24/1484%256,      //4 fa
 142              255-FREQ/24/1618/256,256-FREQ/24/1618%256,      //5 suo
 143              255-FREQ/24/1764/256,256-FREQ/24/1764%256,      //6 la
 144              255-FREQ/24/1968/256,256-FREQ/24/1968%256,      //7 xi
 145          };
 146          unsigned char temp_TH1;
 147          unsigned char temp_TL1;
 148          
 149              //  音乐_编码2 -- IO定义  //
 150          sbit PIN_MSC=P1^0;                   //  音乐输出端口  //
 151          
 152              //  音乐_编码2 -- 函数原型//
 153          void music_delay(unsigned char x);   //音乐节拍延时
 154          void music_play(unsigned char *msc); //播放音乐子程序
 155          
 156              //  音乐_编码2 -- 函数    //
 157          //---------------------------------------------------------------------------//
 158          void music_int_t1 (void) interrupt 3 using 1    //定时中断1//
 159              {
 160   1          PIN_MSC=~PIN_MSC;
 161   1          TH1=temp_TH1;
 162   1          TL1=temp_TL1;
 163   1      }
 164          
 165          //---------------------------------------------------------------------------//
 166          void music_delay(unsigned char n)     //延时 125*n 毫秒
 167              {
 168   1          unsigned char i=125,j;
 169   1          do {
C51 COMPILER V8.08   AUTO_MUSIC_DOORBELL                                                   04/24/2009 16:41:45 PAGE 4   

 170   2              do {
 171   3                  for (j=0; j<230; j++) _nop_(); //j=(11159KHz/12-10)/4
 172   3              }while(--i);
 173   2          }while(--n);
 174   1      }
 175          
 176          //---------------------------------------------------------------------------//
 177          void music_play(unsigned char *msc)   //音乐
 178              {
 179   1          unsigned char music_freq=32;      //音高 
 180   1          unsigned char music_long;         //节拍
 181   1          unsigned char music_data=0;       //音符数据
 182   1          bit music_up=0;                   //升半音
 183   1          bit music_break=0;                //断奏
 184   1          temp_TH1=0xff;
 185   1          temp_TL1=0xea;                    //关输出(输出超声波)
 186   1          TMOD=0x11;                        //T0:16位定时器、T1:16位定时器
 187   1      //    ET0=0;                          //关T0定时器中断
 188   1          ET1=1;                            //开T1定时器中断
 189   1      //---------------------------------------------------------
 190   1          while (*msc != 0x00)
 191   1              {
 192   2              music_data=*msc & 0x07;
 193   2              music_long=*msc>>4;
 194   2              //---------------------------------------------------------
 195   2              if (music_long != 0)          //是音符
 196   2                  {
 197   3                  if (*msc >=128)           //需升降调
 198   3                      {
 199   4                      if (((*msc) & 0x08) == 0)
 200   4                          {if (music_freq >= 16) music_freq -= 16;}    //音高下降 
 201   4                      else
 202   4                          {if (music_freq <  48) music_freq += 16;}    //音高上升
 203   4                   }
 204   3                  //---------------------------------------------------------
 205   3                  if (music_up==1)          //升半音
 206   3                      {
 207   4                      temp_TH1=music_frequp_tab[(music_freq  + (music_data <<1))];
 208   4                      temp_TL1=music_frequp_tab[(music_freq + (music_data <<1)+1)];
 209   4                  }
 210   3                  else                      //不升半音
 211   3                      {
 212   4                      temp_TH1=music_freq_tab[(music_freq + (music_data <<1))];
 213   4                      temp_TL1=music_freq_tab[(music_freq + (music_data <<1)+ 1)];
 214   4                  }
 215   3                  //---------------------------------------------------------
 216   3                  if (music_break)          //断奏
 217   3                      {
 218   4                      music_delay(music_l_tab[music_long&0x07]-1);
 219   4                      temp_TH1=0xff;
 220   4                      temp_TL1=0xea;
 221   4                      music_delay(1);
 222   4                  }
 223   3                  else                      //连奏
 224   3                      music_delay(music_l_tab[music_long&0x07]);
 225   3              }
 226   2              //---------------------------------------------------------
 227   2              else                          //是功能码
 228   2                  {
 229   3                  switch(music_data)
 230   3                      {
 231   4                      case 0x04:
C51 COMPILER V8.08   AUTO_MUSIC_DOORBELL                                                   04/24/2009 16:41:45 PAGE 5   

 232   4                          music_up=0;       //不升半音
 233   4                          break;
 234   4                      case 0x05:
 235   4                          music_up=1;       //升半音
 236   4                          break;
 237   4                      case 0x06:
 238   4                          music_break=0;    //断奏
 239   4                          break;
 240   4                      case 0x07:
 241   4                          music_break=1;    //连奏
 242   4                          break;
 243   4                      default:
 244   4                          break;
 245   4                  }
 246   3              }
 247   2              //---------------------------------------------------------
 248   2              msc++;
 249   2          }
 250   1          ET1=0;                           //播放结束,关T1中断
 251   1          PIN_MSC=1;                       //关输出
 252   1      //    temp_TH1=0xff;
 253   1      //    temp_TL1=0xea;                 //关输出(输出超声波)
 254   1      //    ET0=1;                         //开T0定时器中断
 255   1      //    TMOD=0x51;                     //T0:16位定时器、T1:16位计数器
 256   1      }
 257          
 258          //---------------------------------------------------------------------------//
 259          void main(void)                      //示例
 260          {
 261   1          //    设置定时器--------------------------------------
 262   1              TMOD   =  0x11;         // TMOD: 定时器1:模式1:16位;定时器2:模式1:16
 263   1      位   //
*** ERROR C100 IN LINE 263 OF AUTO_MUSIC DOORBELL.C: unprintable character 0xCE skipped
*** ERROR C100 IN LINE 263 OF AUTO_MUSIC DOORBELL.C: unprintable character 0xBB skipped
 264   1      //        TCON   =  0x50;       // TCON: 定时器 1运行;      定时器 2运
 265   1      行         //
*** ERROR C100 IN LINE 265 OF AUTO_MUSIC DOORBELL.C: unprintable character 0xD0 skipped
*** ERROR C100 IN LINE 265 OF AUTO_MUSIC DOORBELL.C: unprintable character 0xD0 skipped
 266   1          //    设置并开启中断: 
 267   1              IP  = 0x08;             //中断优先寄存器IP:|D7_x |x|x  
 268   1      |PS|PT1|PX1|PT0|D0_PX0|//
*** ERROR C141 IN LINE 268 OF AUTO_MUSIC DOORBELL.C: syntax error near '|'
*** ERROR C202 IN LINE 268 OF AUTO_MUSIC DOORBELL.C: 'D0_PX0': undefined identifier
 269   1              IE  = 0x88;             //中断允许寄存器
*** ERROR C141 IN LINE 269 OF AUTO_MUSIC DOORBELL.C: syntax error near '='
 270   1                      IE:|D7_EA|x|ET2|ES|ET1|EX1|ET0|D0_EX0|//
*** ERROR C141 IN LINE 270 OF AUTO_MUSIC DOORBELL.C: syntax error near '|'
*** ERROR C202 IN LINE 270 OF AUTO_MUSIC DOORBELL.C: 'D7_EA': undefined identifier
 271   1         for (;;) {
*** ERROR C141 IN LINE 271 OF AUTO_MUSIC DOORBELL.C: syntax error near 'for'
 272   2            //在此调用键盘和显示函数//
 273   2            music_play(music_tab1);
 274   2            music_play(music_tab2);
 275   2            music_play(music_tab3);
 276   2            music_play(music_tab4);
 277   2         }
 278   1      }
 279          //---------------------------------------------------------------------------//

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

⌨️ 快捷键说明

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