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

📄 soundintel.c.bak

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 BAK
📖 第 1 页 / 共 2 页
字号:
						 		case 0: temp=DTMF_DecordResouce_1;break;
				 				case 1: temp=DTMF_DecordResouce_2;break;
				 				default: return;
				 			}				 			
				 		//资源连接	
						Writesoundway((SingleAddress-EXTTEL_ID),temp,ON);
						
						WriteDTMF_Decord(i,dtmfdecord_res,SingleAddress);
						WriteDTMF_Decord(i,dtmfdecord_state,1);						//资源被启动				
											
						return;						
				}
		} 
}

void	DecordDTMF()
{//扫描是否有信号解出
	idata UCHAR i,temp_dv,temp_data;
	
	EnDetectRing=0;
	PORT=0xff;
	temp_dv=PORT;
	EnDetectRing=1;
	
	PORT=0xff;
	
	for(i=0;i<DTMF_DecordResouceNum;i++)
		{
			if(ReadDTMF_Decord(i,dtmfdecord_state)==1)
				{//出现数据
					if((bit)((temp_dv>>(4+i))&0x01))
						{
							WriteDTMF_Decord(i,dtmfdecord_state,2);													
						}
				}
			else if(ReadDTMF_Decord(i,dtmfdecord_state)==2)
				{
					if((bit)((temp_dv>>(4+i))&0x01))
						{//数据有效期持续						
							return;
						}	
					else
						{//取数据
					 		switch(i)
						 		{
						 			case 0: EnDTMFDecordOut1=1;break;
				 					case 1: EnDTMFDecordOut2=1;break;
				 					default: break;
				 				}			 	
				 			PORT=0xff;									
							temp_data=PORT;
					 		switch(i)
						 		{
						 			case 0: EnDTMFDecordOut1=0;break;
				 					case 1: EnDTMFDecordOut2=0;break;
				 					default: break;
				 				}	
				 				
							temp_data=temp_data&0x0f;
							if(temp_data==0x0a){temp_data=0;}
								
							if(ReadDTMF_Decord(i,dtmfdecord_length)<12)
								{				 												
									WriteDTMF_Decord(i,(ReadDTMF_Decord(i,dtmfdecord_length)+dtmfdecord_datastar),temp_data);
										//数据存储
									WriteDTMF_Decord(i,dtmfdecord_length,(ReadDTMF_Decord(i,dtmfdecord_length)+1));	
										//改变解码数据长度
								}
							else
								{//数据区益处
									;
								}		
							//存储数据
							SendDecodeMessage((ReadDTMF_Decord(i,dtmfdecord_res)), (ReadDTMF_Decord(i,dtmfdecord_length)),i);
							//发送解码消息
							
							WriteDTMF_Decord(i,dtmfdecord_state,1);								
						}			
				}
			else
				{
					WriteDTMF_Decord(i,dtmfdecord_state,0);//出错归原
					return;
				}			
		}
}

UCHAR GetDTMFResNum(UCHAR originresID)
{
	idata UCHAR i,temp=0;
	for(i=0;i<DTMF_DecordResouceNum;i++)
		{
			if(ReadDTMF_Decord(i,dtmfdecord_res)==originresID)
				{
					 switch(i)
						 	{
						 		case 0: temp=DTMF_DecordResouce_1;break;
				 				case 1: temp=DTMF_DecordResouce_2;break;
				 				default: break;
				 			}					
					return(temp);	
				}
		}	
	return(0xff);//出错	
}

void	ReleaseDTMFRes(UCHAR originresID)
{
	idata UCHAR i,j;
	
		//首先要切断DTMF信号通道		
	i=GetDTMFResNum(originresID);
	Writesoundway((originresID-EXTTEL_ID),i,OFF);
	
	for(i=0;i<15;i++)
		{
			if(ReadDTMF_Decord(i,dtmfdecord_res)==originresID)
				{
					for(j=0;j<15;j++)
						{
							WriteDTMF_Decord(i,j,0);
						}
					return;	
				}
		}	
}
	
void ConnectTowPoint_CD22100(UCHAR x,UCHAR y)
{
	idata	UCHAR	add;
	
	add=(x-1)+((y-1)<<2);
	
	///if(add>=16){rs232write(0xfe);return;}	//地址出错
	
	CD22100_DataIn=CD_1;		//接点连接
	
	add=add&0x0f;
	switch(add)
		{
			case 0 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 1 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 2 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 3 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 4 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 5 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 6 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 7 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 8 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 9 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 10:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 11:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 12:CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			case 13:CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			case 14:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			case 15:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			default: break;
		}
		
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	CD22100_Storbe=CD_1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();	
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	CD22100_Storbe=CD_0;
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	_nop_();
	_nop_();
	_nop_();
	_nop_();	
	CD22100_Storbe=CD_1;
	
}

void CutTowPoint_CD22100(UCHAR x,UCHAR y)
{
	idata	UCHAR	add;
	
	add=(x-1)+((y-1)<<2);
	
	///if(add>=16){rs232write(0xfe);return;}	//地址出错
	
	CD22100_DataIn=CD_0;		//断开连接
	
	add=add&0x0f;
	switch(add)
		{
			case 0 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 1 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 2 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 3 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_0 ;break;
			case 4 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 5 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 6 :CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 7 :CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_0 ;break;
			case 8 :CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 9 :CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 10:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 11:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_0 ;CD22100_D=CD_1 ;break;
			case 12:CD22100_A=CD_0 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			case 13:CD22100_A=CD_1 ;CD22100_B=CD_0 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			case 14:CD22100_A=CD_0 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			case 15:CD22100_A=CD_1 ;CD22100_B=CD_1 ;CD22100_C=CD_1 ;CD22100_D=CD_1 ;break;
			default: break;
		}
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	_nop_();
	_nop_();
	_nop_();
	_nop_();			
	CD22100_Storbe=CD_1;
	_nop_();
	_nop_();
	_nop_();
	_nop_();	
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	CD22100_Storbe=CD_0;
	_nop_();
	_nop_();
	_nop_();
	_nop_();		
	_nop_();
	_nop_();
	_nop_();
	_nop_();	
	CD22100_Storbe=CD_1;
	
}


void DTMFSend()
{
	idata UCHAR	i;
	if(DTMFSendStep==0)
		{//检查是否有发送任务
			if(ReadCID(CID_state)==CID_STATE_ENREAD)
				{//允许发送									
					if(ReadCID(CID_length)==0)
						{//发送完毕 允许重新写入
							for(i=0;i<CIDLENGTH;i++)
								{
										WriteCID(i,0x00);
								}	
							WriteCID(CID_state,CID_STATE_SENDOVER);	//发送完毕
							WriteCID(CID_ptr,(CID_ptr+1));//初始化指针	
									
							return;										
						}
									
					DTMFData=ReadCID(ReadCID(CID_ptr));
					if(DTMFData==0){DTMFData=0x0a;}
					DTMFSendStep=1;	//启动发送过程
					
					WriteCID(CID_ptr,(ReadCID(CID_ptr)+1));				//指向下一个数据			
					WriteCID(CID_length,(ReadCID(CID_length)-1)); //长度								
				}
			return;
		}
		
	if(DTMFSendStep==1)
		{//控制产生DTMF信号				
			EnDTMFCreate=0;
				
			//DTMF信号产生
			DTMFData=DTMFData&0x0f;
			for(i=0;i<5;i++)
				{
					DTMF_Data=(bit)((DTMFData>>i)&0x01);
					_nop_();
					DTMF_Clk=0;
					_nop_();
					_nop_();
					DTMF_Clk=1;
				}			
														//调用时间周期为2ms
			DTMFStandingTime=40;  //持续时间为100ms
			DTMFSendStep=2;
			return;
		}
		
  if(DTMFSendStep==2)
		{//持续发送时间
			DTMFStandingTime--;						
				
			if(DTMFStandingTime==0)
				{						
					DTMFSendStep=3;			//调用时间周期为2ms	
					EnDTMFCreate=1;
					DTMFStandingTime=20;//空白间隔时间
				}
			return;		
		}
		
	if(DTMFSendStep==3)
		{//间隙时间
			DTMFStandingTime--;
			if(DTMFStandingTime==0)
				{//完成一个信号的发送,恢复正常状态	
					EnDTMFCreate=0;
					DTMFData=0xff;		//DTMF stop
					for(i=0;i<5;i++)
						{
							DTMF_Data=(bit)((DTMFData>>i)&0x01);
							_nop_();
							DTMF_Clk=0;
							_nop_();
							_nop_();
							DTMF_Clk=1;
						}	
															
					DTMFSendStep=0;
					EnDTMFCreate=1;
					DTMF_Data=1;
					DTMF_Clk=1;
					DTMFStandingTime=0;									
				}
		 return;		
	 }		
}

⌨️ 快捷键说明

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