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

📄 soundintel.lst

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 LST
📖 第 1 页 / 共 3 页
字号:
 229   3                                      }
 230   2                                      
 231   2                              if(ReadHintSound(i,TYPE)==HintSoundType_wait)
 232   2                                      {//等待提示音
 233   3                                              temp=ReadHintSound(i,TIMEH);
 234   3                                              temp=(temp<<8)+ReadHintSound(i,TIMEL);          
 235   3                                              if(ReadHintSound(i,STATE)==STATE_ON)    //状态翻转
 236   3                                                      {//由 接通状态 到 断开状态
 237   4                                                              if(temp<HintSound_1S)
 238   4                                                                      {//时间还没有达到
 239   5                                                                              temp++;
 240   5                                                                              WriteHintSound(i,TIMEH,(temp>>8));
 241   5                                                                              WriteHintSound(i,TIMEL,(temp));
C51 COMPILER V7.06   SOUNDINTEL                                                            11/15/2007 09:02:22 PAGE 5   

 242   5                                                                      }
 243   4                                                              else    
 244   4                                                                      {
 245   5                                                                              WriteHintSound(i,TIMEH,0);      
 246   5                                                                              WriteHintSound(i,TIMEL,0);
 247   5                                                                              WriteHintSound(i,STATE,STATE_OFF);
 248   5                                                                              Writesoundway(i,HINTSOUND,OFF);                         
 249   5                                                                      }
 250   4                                                      }               
 251   3                                              else
 252   3                                                      {//由 断开状态 到 接通状态
 253   4                                                              if(temp<HintSound_4S)
 254   4                                                                      {//时间还没有达到4S
 255   5                                                                              temp++;
 256   5                                                                              WriteHintSound(i,TIMEH,(temp>>8));
 257   5                                                                              WriteHintSound(i,TIMEL,(temp));
 258   5                                                                      }
 259   4                                                              else    
 260   4                                                                      {
 261   5                                                                              WriteHintSound(i,TIMEH,0);      
 262   5                                                                              WriteHintSound(i,TIMEL,0);
 263   5                                                                              WriteHintSound(i,STATE,STATE_ON);
 264   5                                                                              Writesoundway(i,HINTSOUND,ON);                          
 265   5                                                                      }                                                       
 266   4                                                      }               
 267   3                                      }                               
 268   2                      }
 269   1      }
 270          
 271          void    SoundWayLoop(void)
 272          {
 273   1              idata UCHAR i,j;
 274   1              for(i=0;i<16;i++)
 275   1                      {
 276   2                              for(j=0;j<8;j++)
 277   2                                      {
 278   3                                              if(Readsoundway(i,j)==OFF)
 279   3                                                      {CutTowPoint(i,j);}                     //关断状态
 280   3                                              else if(Readsoundway(i,j)==ON)
 281   3                                                      {ConnectTowPoint(i,j);} //连通状态
 282   3                                              else
 283   3                                                      {Writesoundway(i,j,OFF);}       //出错状态 ,关闭通道
 284   3                                      }
 285   2                      }
 286   1      }
 287          
 288          void    ConnectTowPoint(UCHAR point_x,UCHAR point_y)
 289          {
 290   1              idata   UCHAR   address,x,y;
 291   1              
 292   1              address=0x00;                                           
 293   1              x=point_x&0x0f;
 294   1              y=point_y&0x07;
 295   1              
 296   1              address=address<<3;
 297   1              address=address|y;
 298   1              address=address<<4;
 299   1              address=address|x;      
 300   1              address=address|0x80;           //connect
 301   1      
 302   1              PORT=address;
 303   1              SoundSwitchStorbe=0;    
C51 COMPILER V7.06   SOUNDINTEL                                                            11/15/2007 09:02:22 PAGE 6   

 304   1              SoundSwitchStorbe=1;
 305   1              SoundSwitchStorbe=0;    
 306   1      
 307   1              PORT=0xff;
 308   1      }
 309          
 310          
 311          void    CutTowPoint(UCHAR point_x,UCHAR point_y)
 312          {
 313   1              idata   UCHAR   address,x,y;
 314   1      
 315   1              address=0x00;                                           
 316   1              x=point_x&0x0f;
 317   1              y=point_y&0x07;
 318   1              
 319   1              address=address<<3;
 320   1              address=address|y;      
 321   1              address=address<<4;
 322   1              address=address|x;
 323   1              address=address&0x7f;           //cut
 324   1      
 325   1              PORT=address;
 326   1              SoundSwitchStorbe=0;    
 327   1              SoundSwitchStorbe=1;
 328   1              SoundSwitchStorbe=0;    
 329   1              
 330   1              PORT=0xff;      
 331   1      }
 332          
 333          void StarDecordDTMF(UCHAR       SingleAddress)
 334          {
 335   1              idata UCHAR i,temp;
 336   1              //查找是否有解码资源
 337   1              for(i=0;i<DTMF_DecordResouceNum;i++)
 338   1                      {
 339   2                              if(ReadDTMF_Decord(i,dtmfdecord_state)==0)
 340   2                                      {//找到空闲的解码芯片           //连接输入信号                  
 341   3                                               switch(i)
 342   3                                                              {
 343   4                                                                      case 0: temp=DTMF_DecordResouce_1;break;
 344   4                                                                      case 1: temp=DTMF_DecordResouce_2;break;
 345   4                                                                      default: return;
 346   4                                                              }                                                       
 347   3                                                      //资源连接      
 348   3                                                      Writesoundway((SingleAddress-EXTTEL_ID),temp,ON);
 349   3                                                      
 350   3                                                      WriteDTMF_Decord(i,dtmfdecord_res,SingleAddress);
 351   3                                                      WriteDTMF_Decord(i,dtmfdecord_state,1);                                         //资源被启动                            
 352   3                                                                                              
 353   3                                                      return;                                         
 354   3                                      }
 355   2                      } 
 356   1      }
 357          
 358          void    DecordDTMF()
 359          {//扫描是否有信号解出
 360   1              idata UCHAR i,temp_dv,temp_data;
 361   1              
 362   1              EnDetectRing=0;
 363   1              PORT=0xff;
 364   1              temp_dv=PORT;
 365   1              EnDetectRing=1;
C51 COMPILER V7.06   SOUNDINTEL                                                            11/15/2007 09:02:22 PAGE 7   

 366   1              
 367   1              PORT=0xff;
 368   1              
 369   1              for(i=0;i<DTMF_DecordResouceNum;i++)
 370   1                      {
 371   2                              if(ReadDTMF_Decord(i,dtmfdecord_state)==1)
 372   2                                      {//出现数据
 373   3                                              if((bit)((temp_dv>>(4+i))&0x01))
 374   3                                                      {
 375   4                                                              WriteDTMF_Decord(i,dtmfdecord_state,2);                                                                                                 
 376   4                                                      }
 377   3                                      }
 378   2                              else if(ReadDTMF_Decord(i,dtmfdecord_state)==2)
 379   2                                      {
 380   3                                              if((bit)((temp_dv>>(4+i))&0x01))
 381   3                                                      {//数据有效期持续                                               
 382   4                                                              return;
 383   4                                                      }       
 384   3                                              else
 385   3                                                      {//取数据
 386   4                                                              switch(i)
 387   4                                                                      {
 388   5                                                                              case 0: EnDTMFDecordOut1=1;break;
 389   5                                                                              case 1: EnDTMFDecordOut2=1;break;
 390   5                                                                              default: break;
 391   5                                                                      }                               
 392   4                                                              PORT=0xff;                                                                      
 393   4                                                              temp_data=PORT;
 394   4                                                              switch(i)
 395   4                                                                      {
 396   5                                                                              case 0: EnDTMFDecordOut1=0;break;
 397   5                                                                              case 1: EnDTMFDecordOut2=0;break;
 398   5                                                                              default: break;
 399   5                                                                      }       
 400   4                                                                      
 401   4                                                              temp_data=temp_data&0x0f;
 402   4                                                              if(temp_data==0x0a){temp_data=0;}
 403   4                                                                      
 404   4                                                              if(ReadDTMF_Decord(i,dtmfdecord_length)<12)
 405   4                                                                      {                                                                                                                               
 406   5                                                                              WriteDTMF_Decord(i,(ReadDTMF_Decord(i,dtmfdecord_length)+dtmfdecord_datastar),temp_data);
 407   5                                                                                      //数据存储
 408   5                                                                              WriteDTMF_Decord(i,dtmfdecord_length,(ReadDTMF_Decord(i,dtmfdecord_length)+1)); 
 409   5                                                                                      //改变解码数据长度
 410   5                                                                      }
 411   4                                                              else
 412   4                                                                      {//数据区益处
 413   5                                                                              ;
 414   5                                                                      }               
 415   4                                                              //存储数据
 416   4                                                              SendDecodeMessage((ReadDTMF_Decord(i,dtmfdecord_res)), (ReadDTMF_Decord(i,dtmfdecord_length)),i);
 417   4                                                              //发送解码消息
 418   4                                                              
 419   4                                                              WriteDTMF_Decord(i,dtmfdecord_state,1);                                                         
 420   4                                                      }                       
 421   3                                      }
 422   2                              else
 423   2                                      {
 424   3                                              WriteDTMF_Decord(i,dtmfdecord_state,0);//出错归原
 425   3                                              return;
 426   3                                      }                       
 427   2                      }
C51 COMPILER V7.06   SOUNDINTEL                                                            11/15/2007 09:02:22 PAGE 8   

 428   1      }
 429          
 430          UCHAR GetDTMFResNum(UCHAR originresID)
 431          {
 432   1              idata UCHAR i,temp=0;
 433   1              for(i=0;i<DTMF_DecordResouceNum;i++)
 434   1                      {
 435   2                              if(ReadDTMF_Decord(i,dtmfdecord_res)==originresID)
 436   2                                      {
 437   3                                               switch(i)
 438   3                                                              {
 439   4                                                                      case 0: temp=DTMF_DecordResouce_1;break;
 440   4                                                                      case 1: temp=DTMF_DecordResouce_2;break;
 441   4                                                                      default: break;
 442   4                                                              }                                       
 443   3                                              return(temp);   
 444   3                                      }
 445   2                      }       
 446   1              return(0xff);//出错     
 447   1      }
 448          
 449          void    ReleaseDTMFRes(UCHAR originresID)
 450          {
 451   1              idata UCHAR i,j;
 452   1              
 453   1                      //首先要切断DTMF信号通道                
 454   1              i=GetDTMFResNum(originresID);
 455   1              Writesoundway((originresID-EXTTEL_ID),i,OFF);
 456   1              
 457   1              for(i=0;i<15;i++)
 458   1                      {
 459   2                              if(ReadDTMF_Decord(i,dtmfdecord_res)==originresID)
 460   2                                      {
 461   3                                              for(j=0;j<15;j++)
 462   3                                                      {
 463   4                                                              WriteDTMF_Decord(i,j,0);

⌨️ 快捷键说明

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