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

📄 pt2313.c

📁 能正常工作的PT2313驱动程序,已可靠的应用于正式的生产中.
💻 C
字号:
    #include < REG52.h >
    #include " pt2313.h "
    #include < intrins.h >
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   PT2313Drive
程序功能:   控制PT2313
入口参数:   无
出口参数:   无
调用子程序: 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
   void PT2313Drive ( uchar TempSign, uchar TempData )
   {
          uchar TempDataA, Count;
			  StartBit ( );
			  I2CWrite ( 0x88 );
			  if ( ! Error_F )
			  {
			           switch ( TempSign )
			          {
			                   case PT2313BASS: 	TempDataA = TempData ;                     //Bass控制
							                        TempDataA |= 0x60;
													I2CWrite ( TempDataA );	   
													break;

							   case PT2313TREB:     TempDataA = TempData ;                     //TERB控制
							                        TempDataA |= 0x70;
													I2CWrite ( TempDataA );	   
													break; 

							   case PT2313VOL:      TempDataA = 56 - TempData ;                  //VOL控制
							                        if ( TempDataA > 56 )
													{
													      TempDataA = 0;
												    } 
							                        TempDataA |= 0;
													I2CWrite ( TempDataA );	   
													break;  
													
							   case PT2313LIN:      TempDataA = TempData ;                     //音源控制
							                        TempDataA |= 0x4C;
													I2CWrite ( TempDataA );	   
													break;
													 
							   case PT2313MUTE:     for ( Count = 0; Count < 4; Count ++ )	       //静音控制
							                        {
													        TempDataA = PT2313Mute_Tab [ Count ];      
													        I2CWrite ( TempDataA );
													}	   
													break; 
													
							   case PT2313SW:       TempDataA = 20-TempData ;                  //SW控制
							                        if ( TempData > 20 )
												    {	   
													        TempDataA = 0;
													}                         
							                        TempDataA |= 0xC0;
													I2CWrite ( TempDataA );
													TempDataA = TempData ;
													TempDataA |= 0xE0;
													I2CWrite ( TempDataA );	   
													break;

							  case PT2313BLA_FL:    TempDataA = TempData ;                     //Bass控制
							                        TempDataA |= 0x80;
													I2CWrite ( TempDataA );	   
													break;  
													
							  case PT2313BLA_FR:    TempDataA = TempData ;                     //Bass控制
							                        TempDataA |= 0xA0;
													I2CWrite ( TempDataA );	   
													break;   
					  }

					  StopBit ( );
			   }
          
   }	
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   StartBit()
程序功能:   I2C开始条件
入口参数:   无
出口参数:   无
调用子程序: void Delay(uint Count)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ 
  void StartBit ( )
  {
         uchar Count;
		 I2CDataPort = 1;
		 for ( Count = 20; Count > 0; Count -- )
		 {
		        if ( I2CDataPort )
				{
		 	            break;
			    }
		 }
		 if ( ! I2CDataPort )
		 {
		         Error_F = 1;
		 }
		 else
		 {
		         I2CSclPort = 1;
				 Delay ( 10, 1 );
				 I2CDataPort = 0;
				 Delay ( 10, 1 );
				 I2CSclPort = 0;
		 }
		 
		 
  }  


/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   void I2CWrite(uchar TempData)
程序功能:   I2C写数据并判断有无响应
入口参数:   TempData
出口参数:   无
调用子程序: 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ 
  void I2CWrite ( uchar TempData )
  {
        uchar Count;
      	for ( Count = 8; Count > 0; Count -- )
		{
		         I2CSclPort = 0;
				 _nop_ ( );
				 _nop_ ( );
				 I2CDataPort = ( bit ) ( TempData & 0x80 );
				 TempData <<= 1;
				 Delay(10, 1);
		  		 I2CSclPort = 1;
				 Delay(10, 1);
		}
		I2CSclPort = 0;
        _nop_ ( );
        I2CDataPort = 1;
        _nop_ ( );
        for ( Count = 0xff; Count; Count -- )
        {
                if ( ! I2CDataPort )
                {
                      break; 
                }                   
        }
        if ( ! I2CDataPort )
        {   
                I2CSclPort = 1;
                _nop_ ( );
                _nop_ ( );
                _nop_ ( );
                I2CSclPort = 0;
		}
		else
		{
		         Error_F = 1;
		}  
   }
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   void StopBit()
程序功能:   I2C停止条件
入口参数:   无
出口参数:   无
调用子程序: 
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ 		         

  void StopBit ()
  {
         uchar Count = 20;
		 while (Count --)
		 {
		        I2CSclPort = 0;
				_nop_ ();
				I2CDataPort = 0;
				_nop_ ();
				_nop_ ();
				I2CSclPort = 1;
				Delay(10, 1);
				I2CDataPort = 1;
				if (I2CDataPort)
				{
				       break;
			    }
		 }
		 Delay(10, 1);
   }
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   void OutBalanc()
程序功能:   平衡输出
入口参数:   无
出口参数:   无
调用子程序: 
备注:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ 
   void OutBalanc()
   {
          uchar TempDataA;
		  uchar TempDataB;

		  TempDataA = 10 - BalancData;
		  if ( TempDataA > 20 )
		  {
		        TempDataA = 20;
		  }

		  TempDataB = BalancData - 10; 
		  if ( TempDataB > 20 )
		  {
		        TempDataA = 20;
		  }

		  PT2313Drive(PT2313BLA_FL, TempDataA);
		  PT2313Drive(PT2313BLA_FR, TempDataA);

	}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   void PT2313ComebackData()
程序功能:   数据恢复与开机计数显示
入口参数:   无
出口参数:   无
调用子程序: 
备注:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ 
  void PT2313ComebackData()
  {
      uchar TempVolumeData, End_F;
	  bit bdata Write_F;
         	PT2313Drive(PT2313BASS, PT2313Tone_Tab[BassData]);      //低音控制
			PT2313Drive(PT2313TREB, PT2313Tone_Tab[TrebleData]);    //高音控制
			OutBalanc();                                            //平衡控制			   
			PT2313Drive(PT2313LIN, INPUT_TAB[InputData]);           //音源输入选择控制
			PT2313Drive(PT2313SW, SwVolumeData);                    //超低音控制 
			VolumeData = ByteRead ( 0x2A00 ); 		                //读第一扇区数据
			if (VolumeData > 56)
			{
			      VolumeData = ByteRead ( 0x2C00 );	                //读第二扇区数据
				   if (VolumeData > 56)
				   {
			   			  VolumeData = 40;
				   }
			}
			if (VolumeData < 0)
		    {
			       VolumeData = 0;
			}
			MutePort = 0;                                          //取消输入功放输入短路
			if(VolumeData > 40)
			{
			       VolumeData = 40;
			}  
			for ( TempVolumeData = 0; TempVolumeData <= VolumeData; TempVolumeData++ )
			{
			        VolumeOut(TempVolumeData);
					VolumeDisplay(TempVolumeData);
					BlinkTime = 10;
					while(BlinkTime)
					{
					       if ((PWDN) || (PWUP))
						   {	 
						         End_F = 1;
						         break;
						   }
						   if ((Rmtok_F) && ((RD_RKEY == RK_VOLUME_DN) ||
						      (RD_RKEY == RK_VOLUME_DN)))
						   {
						        End_F = 1;
						        break;
						   } 
					}
					if (End_F)
					{
					      End_F = 0;
						  break;
					} 					  
			} 
			VolumeData = TempVolumeData;
			SectorErase(0x2A00);                      //擦除音量扇区1数据
			Write_F = ByteProgram(0x2A00, VolumeData);
			if (!Write_F)
			{
			       SectorErase(0x2C00);                      //擦除音量扇区1数据
			       ByteProgram(0x2C00, VolumeData);
			}


			 
  } 
 /*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称:   void VolumeOut()
程序功能:   主音量数据输出
入口参数:   无
出口参数:   无
调用子程序: 
备注:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/  
  void VolumeOut(uchar TempData)
  {
          bit bdata Zero_F;
		  if(!TempData) 
		  {
		         Zero_F = 1;	                             
			     MutePort = 1;                			    //短路功放输入
		  }
		  else
		  {
		         if(Zero_F)
				 {
				        Zero_F = 0;
				 }
				 if(Mute_F)
				 {
				        MutePort = 1;                			    //短路功放输入
				       	PT2313Drive( PT2313VOL, 0 );
				 }
				 else
				 {
				        PT2313Drive( PT2313VOL, TempData );
						MutePort = 0;                			    //打开功放输入				
					 
				 }
				 
		  }
	}     

⌨️ 快捷键说明

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