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

📄 fntelgen.c

📁 一个完整的用用AVR单片机开发的电话交换机程序 希望对想学习AVR开发人有帮助
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "main.h"


unsigned char fnFindFreeExt(unsigned char mOutNum)
{
   if(!Ext1_FunPt)
    {		
		Ext1_NumdialIn=mOutNum;	// 1 = Line In 1 2=Line In 2	
        Ext1_FunPt=15;
        Ext1_dialtime=0;
		SetBit(ExtTelRingState,cExt1Num); 
        return 1;
	 }

    if(!Ext2_FunPt)
	{		
		Ext2_NumdialIn=mOutNum;	// 1 = Line In 1 2=Line In 2
        Ext2_FunPt=15;
		Ext2_dialtime=0;
		SetBit(ExtTelRingState,cExt2Num); 
		return 2;
	 }
       
	if(!Ext3_FunPt)
	{
		Ext3_NumdialIn=mOutNum;	// 1 = Line In 1 2=Line In 2
        Ext3_FunPt=15;
		Ext3_dialtime=0;
		SetBit(ExtTelRingState,cExt3Num); 
        return 3;
	 }
       
    if(!Ext4_FunPt)
	{
		Ext4_NumdialIn=mOutNum;	// 1 = Line In 1 2=Line In 2
        Ext4_FunPt=15;
		Ext4_dialtime=0;
		SetBit(ExtTelRingState,cExt4Num); 
        return 4;
	  }

    if(!Ext5_FunPt)
	 {
		Ext5_NumdialIn=mOutNum;	// 1 = Line In 1 2=Line In 2
        Ext5_FunPt=15;
		Ext5_dialtime=0;
		SetBit(ExtTelRingState,cExt5Num); 
        return 5;
	  }

    if(!Ext6_FunPt)
	 {
		Ext6_NumdialIn=mOutNum;	// 1 = Line In 1 2=Line In 2
        Ext6_FunPt=15;
		Ext6_dialtime=0;
	    SetBit(ExtTelRingState,cExt6Num); 
        return 6;
	  }
	  return 0;
}


void fnStopOutRing(unsigned char mOutNum)
{
    switch(mOutNum)
    {
       case 1:
            Ext1_FunPt=0;
            Writesoundway(SigCallID,cX_Ex1,OFF);      //连接响铃
			ClrBit(ExtTelRingState,cExt1Num); 
            break;
       case 2:
            Ext2_FunPt=0;
            Writesoundway(SigCallID,cX_Ex2,OFF);      //连接响铃
			ClrBit(ExtTelRingState,cExt2Num); 
            break;
       case 3:
            Ext3_FunPt=0;
            Writesoundway(SigCallID,cX_Ex3,OFF);      //连接响铃
			ClrBit(ExtTelRingState,cExt3Num); 
            break;
       case 4:
            Ext4_FunPt=0;
            Writesoundway(SigCallID,cX_Ex4,OFF);      //连接响铃
			ClrBit(ExtTelRingState,cExt4Num); 
            break;
       case 5:
            Ext5_FunPt=0;
            Writesoundway(SigCallID,cX_Ex5,OFF);      //连接响铃
			ClrBit(ExtTelRingState,cExt5Num); 
            break;
       case 6:
            Ext6_FunPt=0;
            Writesoundway(SigCallID,cX_Ex6,OFF);      //连接响铃
			ClrBit(ExtTelRingState,cExt6Num); 
            break;

      default:
           return;
	 }
}


void fnStopExtRing(unsigned char mExtNum)
{

 		switch(mExtNum)
		{
		 case 1:
               Ext1_FunPt=0;                        //0 内线空闲 
			   Writesoundway(SigCallID,cX_Ex1,OFF);//断开响铃
			   ClrBit(ExtTelRingState,cExt1Num);	       
			   break;
         case 2:
               Ext2_FunPt=0;                        //0 内线空闲 
			   Writesoundway(SigCallID,cX_Ex2,OFF);//断开响铃
			   ClrBit(ExtTelRingState,cExt2Num);	       
			   break;
		 case 3:
               Ext3_FunPt=0;                        //0 内线空闲 
			   Writesoundway(SigCallID,cX_Ex3,OFF);//断开响铃
			   ClrBit(ExtTelRingState,cExt3Num);	       
			   break;
		 case 4:
               Ext4_FunPt=0;                        //0 内线空闲 
			   Writesoundway(SigCallID,cX_Ex4,OFF);//断开响铃
			   ClrBit(ExtTelRingState,cExt4Num);	       
			   break;
		 case 5:
               Ext5_FunPt=0;                        //0 内线空闲 
			   Writesoundway(SigCallID,cX_Ex5,OFF);//断开响铃
			   ClrBit(ExtTelRingState,cExt5Num);	       
			   break;
		 case 6:
               Ext6_FunPt=0;                        //0 内线空闲 
			   Writesoundway(SigCallID,cX_Ex6,OFF);//断开响铃
			   ClrBit(ExtTelRingState,cExt6Num);	       
			   break;
		 default:break;
        }

}


void fnCutOffExtLineAndLinkToBusy(unsigned char mY4Y5Nm)
{
 unsigned char i;

 for(i=0;i<cExtTelNum;i++)
 {
   if(Ext_LineY4Y5Num[i]==mY4Y5Nm)
   {
     Ext_FunPt[i]=5;    // fnExt1_Err
	 Writesoundway(Connect_Busy,i,ON);
	 Ext_LineY4Y5Num[i]=0;
    }
  }
}	


void fnStopExtWaitRing(unsigned char mExt_FPt,unsigned char mExtNum)
{
 switch(mExtNum)
 {
	case 1:
           if(mExt_FPt==7)
		    {
		     Ext1_FunPt=7;                                 //7 fnExt2_LinkExtPhone 内线连内线
			 Writesoundway(Ext1_LineY4Y5Num,WaitRing,OFF); //断开回铃声
		     }
            else if(mExt_FPt==18)
			{
             Ext1_FunPt=18;
			}
		   Ext1_dialtime=0;
		   break;
    case 2:
           if(mExt_FPt==7)
		    {
		     Ext2_FunPt=7;                                 //7 fnExt2_LinkExtPhone 内线连内线
			 Writesoundway(Ext2_LineY4Y5Num,WaitRing,OFF); //断开回铃声
		     }
            else if(mExt_FPt==18)
			{
             Ext2_FunPt=18;
			}
		   Ext2_dialtime=0;
		   break;
	case 3:
           if(mExt_FPt==7)
		    {
		     Ext3_FunPt=7;                                 //7 fnExt2_LinkExtPhone 内线连内线
			 Writesoundway(Ext3_LineY4Y5Num,WaitRing,OFF); //断开回铃声
		     }
            else if(mExt_FPt==18)
			{
             Ext3_FunPt=18;
			}
		   Ext3_dialtime=0;
		   break;
	case 4:
           if(mExt_FPt==7)
		    {
		     Ext4_FunPt=7;                                 //7 fnExt2_LinkExtPhone 内线连内线
			 Writesoundway(Ext4_LineY4Y5Num,WaitRing,OFF); //断开回铃声
		     }
            else if(mExt_FPt==18)
			{
             Ext4_FunPt=18;
			}
		   Ext4_dialtime=0;
		   break;
	case 5:
           if(mExt_FPt==7)
		    {
		     Ext5_FunPt=7;                                 //7 fnExt2_LinkExtPhone 内线连内线
			 Writesoundway(Ext5_LineY4Y5Num,WaitRing,OFF); //断开回铃声
		     }
            else if(mExt_FPt==18)
			{
             Ext5_FunPt=18;
			}
		   Ext5_dialtime=0;
		   break;
	case 6:
           if(mExt_FPt==7)
		    {
		     Ext6_FunPt=7;                                 //7 fnExt2_LinkExtPhone 内线连内线
			 Writesoundway(Ext6_LineY4Y5Num,WaitRing,OFF); //断开回铃声
		     }
            else if(mExt_FPt==18)
			{
             Ext6_FunPt=18;
			}
		   Ext6_dialtime=0;
		   break;
	default:break;
	
   }
}


void fnExtLinkMusic(unsigned char mExtNum)
{
 switch(mExtNum)
 {
	case 1:
		   Ext1_FunPt=13;                                  //13 连音乐
		   Writesoundway(Ext1_LineY4Y5Num,cX_Music,ON);     //连接音乐
		   break;
    case 2:
		   Ext2_FunPt=13;                                  //13 连音乐
		   Writesoundway(Ext2_LineY4Y5Num,cX_Music,ON);     //连接音乐
		   break;
	case 3:
		   Ext3_FunPt=13;                                  //13 连音乐
		   Writesoundway(Ext3_LineY4Y5Num,cX_Music,ON);     //连接音乐
		   break;
	case 4:
		   Ext4_FunPt=13;                                  //13 连音乐
		   Writesoundway(Ext4_LineY4Y5Num,cX_Music,ON);     //连接音乐
		   break;
	case 5:
		   Ext5_FunPt=13;                                  //13 连音乐
		   Writesoundway(Ext5_LineY4Y5Num,cX_Music,ON);     //连接音乐
		   break;
	case 6:
		   Ext6_FunPt=13;                                  //13 连音乐
		   Writesoundway(Ext6_LineY4Y5Num,cX_Music,ON);     //连接音乐
		   break;
	default:break;
	
   }
}


void fnExtCutOffMusic(unsigned char mExt_FPt,unsigned char mExtNum)
{
 switch(mExtNum)
 {
	case 1:
		   Ext1_FunPt=mExt_FPt;
		   Writesoundway(Ext1_LineY4Y5Num,cX_Music,OFF);     //断开音乐	   
		   break;
    case 2:
		   Ext2_FunPt=mExt_FPt;
		   Writesoundway(Ext2_LineY4Y5Num,cX_Music,OFF);     //断开音乐	 
		   break;
	case 3:
		   Ext3_FunPt=mExt_FPt;
		   Writesoundway(Ext3_LineY4Y5Num,cX_Music,OFF);     //断开音乐	 
		   break;
	case 4:
		   Ext4_FunPt=mExt_FPt;
		   Writesoundway(Ext4_LineY4Y5Num,cX_Music,OFF);     //断开音乐	 
		   break;
	case 5:
		   Ext5_FunPt=mExt_FPt;
		   Writesoundway(Ext5_LineY4Y5Num,cX_Music,OFF);     //断开音乐	 
		   break;
	case 6:
		   Ext6_FunPt=mExt_FPt;
		   Writesoundway(Ext6_LineY4Y5Num,cX_Music,OFF);     //断开音乐	 
		   break;
	default:break;
	
   }
}



void fnConnectionOutLine(unsigned char cNumIn ,unsigned char mExtNum)
{
  switch(cNumIn)
   {
	 case 1:
           Out1_FunPt=2;
		   SetBit(PORTC,Line_LedCtr);               //外线提示灯亮
		   Writesoundway(cY_Outside1,mExtNum,ON);    //提机接听     
		   Out1_NumdialOut =mExtNum;                      			                             		   	       
		   return;
     case 2:
           Out2_FunPt=2;
		   SetBit(PORTC,Line2_LedCtr);               //外线提示灯亮 
		   Writesoundway(cY_Outside2,mExtNum,ON);    //提机接听		   
		   Out2_NumdialOut =mExtNum;                      			                             		   	       
		   return;

	 default:break;
   }

}


void fnCutOffLineIn(unsigned char mLineNm)   // 1= Line 1 , 2=Line 2
{
unsigned char i;

	if (mLineNm == 1)
	 {
		for (i=0; i<16; i++)
	 	{ 
	 	   Writesoundway(cY_Outside1,i,OFF);
	 	}

		 ClrBit(PORTC,Line_LedCtr);           //外线提示灯亮 
		 ClrBit(OutsideBusy_Free,0);               //外线释放
		 Out1_FunPt=0;
	  }
	 else if (mLineNm == 2)
	 {
		for (i=0; i<16; i++)
	 	{ 
	 	   Writesoundway(cY_Outside2,i,OFF);
	 	}
		 ClrBit(PORTC,Line2_LedCtr);           //外线提示灯亮 
		 ClrBit(OutsideBusy_Free,1);               //外线释放
		 Out2_FunPt=0;
     }
}


void fnCutOffY4Y5(unsigned char mY4Y5Nm) // 4= Y4 , 5= Y5
{
unsigned char i;

	if (mY4Y5Nm == 4)
	 {
		for (i=0; i<16; i++)
	 	{ 
	 	   Writesoundway(Connect_Ext1,i,OFF);
	 	}
       ClrBit(OutsideBusy_Free,4);               //Y4Y5被占
	  }
	 else if (mY4Y5Nm == 5)
	 {
		for (i=0; i<16; i++)
	 	{ 
	 	   Writesoundway(Connect_Ext2,i,OFF);
	 	}
		ClrBit(OutsideBusy_Free,5);               //Y4Y5被占
     }
}


void fnCutOffDTMF(unsigned char mDTMFNm) // 1= DTMF 1 , 2=DTMF 2
{
	unsigned char i;

	if (mDTMFNm==1)
	 {	
	    for (i=0; i<8; i++)	
		 {	
		   Writesoundway(i,cX_DTMF1,OFF); 	
		   }
        ClrBit(DTMFBusy_Free,0);               //DTMF释放
     }
	else if (mDTMFNm==2)
	{	
	   for (i=0; i<8; i++)	 	
	    { 
		  Writesoundway(i,cX_DTMF2,OFF); 	
		 }
        ClrBit(DTMFBusy_Free,1);               //DTMF释放
    }
}


unsigned char fnLinkLineIn_Ext(unsigned char mExtenNm)  //mExtenNm 0-5  return: 0:Unsuccess 1= Line 1 2= Line 2
{

     if(bit_is_clear(OutsideBusy_Free,cOut1Num))     //查找空闲外线
      {	 
		SetBit(OutsideBusy_Free,cOut1Num);               //外线被占
		SetBit(PORTC,(Line_LedCtr));           //外线提示灯亮 
		Writesoundway(cY_Outside1,mExtenNm,ON);
		return (1);
	  }

     if(bit_is_clear(OutsideBusy_Free,cOut2Num))     //查找空闲外线
      {	 
		SetBit(OutsideBusy_Free,cOut2Num);               //外线被占
		SetBit(PORTC,(Line2_LedCtr));           //外线提示灯亮 
		Writesoundway(cY_Outside2,mExtenNm,ON);
		return (2);
	  }
  return 0;
}


unsigned char fnLinkExtLineY4Y5(unsigned char mExtenNm) //mExtenNm 0-5  return: 0:Unsuccess 4= Y4 5= Y5
{
  
  if(bit_is_clear(OutsideBusy_Free,4))     //查找空闲外线
      {	 
		SetBit(OutsideBusy_Free,4);               //外线被占

⌨️ 快捷键说明

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