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

📄 rl_module.c

📁 standdard test protocol
💻 C
字号:
int MemRel[16];

/***********************************************************************/

/************************************ Type A --> AN Adreed ************************************/
int const AddrPCF8574[16] = {0x70,0x72,0x74,0x76,0x78,0x7A,0x7C,0x7E,0x40,0x42,0x44,0x46,0x48,0x4A,0x4C,0x4E};
/**********************************************************************************************/

/**************************************** Output High *****************************************/
int const PCF8574XX_Bit_High[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};  //or old status
/**********************************************************************************************/

/***************************************** Output Low *****************************************/
int const PCF8574XX_Bit_Low[8]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};   //and old status
/**********************************************************************************************/

/*********************** STATUS Details ****************************/
//    0x00 ---> type OFF single
//    0x01 ---> type ON  single
//    0x02 ---> type OFF all
//    0x03 ---> type ON  all
/*******************************************************************/


/*************************** Relay Clear all ****************************/
void clear_relay_all( void )
{
   for( i=0;i<16;i++ )
   {
      i2c_start ( );
      i2c_write( AddrPCF8574[i] );
      i2c_write( 0x00 );
      i2C_stop( );
      MemRel[i] = 0x00;
   }
}
/************************************************************************/

/**************************** Relay Set all *****************************/
void set_relay_all( void )
{
   for( i=0;i<16;i++ )
   {
      i2c_start( );
      i2c_write( AddrPCF8574[i] );
      i2c_write( 0xFF );
      i2C_stop( );
      MemRel[i] = 0xFF;
   }
}
/************************************************************************/
void Addr1_32( void )
{
   if( AddressSub < 9 )
   {
      AddrRel = 0;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-1];
         MemRel[0] = MemRel[0] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-1];
         MemRel[0] = MemRel[0] | OpStat;
      }
   }
   else if( AddressSub > 8 && AddressSub < 17 )
   {
      AddrRel = 1;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-9];
         MemRel[1] = MemRel[1] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-9];
         MemRel[1] = MemRel[1] | OpStat;
      }
   }
   else if( AddressSub > 16 && AddressSub < 25 )
   {
      AddrRel = 2;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-17];
         MemRel[2] = MemRel[2] & OpStat;
      }
      else if (stat==1)
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-17];
         MemRel[2] = MemRel[2] | OpStat;
      }
   }
   else if( AddressSub > 24 && AddressSub < 33 )
   {
      AddrRel = 3;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-25];
         MemRel[3] = MemRel[3] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-25];
         MemRel[3] = MemRel[3] | OpStat;
      }
   }
}
/************************************************************************/

/************************************************************************/
void Addr33_64( void )
{
   if( AddressSub < 41 )
   {
      AddrRel = 4;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-33];
         MemRel[4] = MemRel[4] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-33];
         MemRel[4] = MemRel[4] | OpStat;
      }
   }
   else if( AddressSub > 40 && AddressSub < 49)
   {
      AddrRel = 5;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-41];
         MemRel[5] = MemRel[5] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-41];
         MemRel[5] = MemRel[5] | OpStat;
      }
   }
   else if( AddressSub > 48 && AddressSub < 57 )
   {
      AddrRel = 6;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-49];
         MemRel[6] = MemRel[6] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-49];
         MemRel[6] = MemRel[6] | OpStat;
      }
   }
   else if( AddressSub > 56 && AddressSub < 65)
   {
      AddrRel = 7;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-57];
         MemRel[7] = MemRel[7] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-57];
         MemRel[7] = MemRel[7] | OpStat;
      }
   }
}
/************************************************************************/

/************************************************************************/
void Addr65_96( void )
{
   if( AddressSub < 73 )
   {
      AddrRel = 8;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-65];
         MemRel[8] = MemRel[8] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-65];
         MemRel[8] = MemRel[8] | OpStat;
      }
   }
   else if( AddressSub > 72 && AddressSub < 81 )
   {
      AddrRel = 9;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-73];
         MemRel[9] = MemRel[9] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-73];
         MemRel[9] = MemRel[9] | OpStat;
      }
   }
   else if ( AddressSub > 80 && AddressSub < 89 )
   {
      AddrRel = 10;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-81];
         MemRel[10] = MemRel[10] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-81];
         MemRel[10] = MemRel[10] | OpStat;
      }
   }
   else if( AddressSub > 88 && AddressSub < 97)
   {
      AddrRel = 11;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-89];
         MemRel[11] = MemRel[11] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-89];
         MemRel[11] = MemRel[11] | OpStat;
      }
   }
}
/************************************************************************/

/************************************************************************/
void Addr97_128(void)
{
   if( AddressSub < 105 )
   {
      AddrRel = 12;
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-97];
         MemRel[12] = MemRel[12] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-97];
         MemRel[12] = MemRel[12] | OpStat;
      }
   }
   else if( AddressSub > 104 && AddressSub < 113 )
   {
      AddrRel = 13;        
      if( stat==0  )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-105];
         MemRel[13] = MemRel[13] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-105];
         MemRel[13] = MemRel[13] | OpStat;
      }
   }
   else if( AddressSub > 112 && AddressSub < 121 )
   {
      AddrRel = 14;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-113];
         MemRel[14] = MemRel[14] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-113];
         MemRel[14] = MemRel[14] | OpStat;
      }
   }
   else if( AddressSub > 120 && AddressSub < 129 )
   {
      AddrRel = 15;        
      if( stat==0 )
      {
         OpStat = PCF8574XX_Bit_Low[AddressSub-121];
         MemRel[15] = MemRel[15] & OpStat;
      }
      else if ( stat==1 )
      {
         OpStat = PCF8574XX_Bit_High[AddressSub-121];
         MemRel[15] = MemRel[15] | OpStat;
      }
   }
}
/************************************************************************/

/************************************** I2C Relay Control *************************************/
int relay_control( void )
{
   if( AddressSub == 0 )
   {
      if( stat == 0 )clear_relay_all( );
      else set_relay_all( );
   }
   else if( AddressSub > 0 )
   {
      if( AddressSub < 33 ) Addr1_32( );
      else if( AddressSub < 65 ) Addr33_64( );
      else if( AddressSub < 97 ) Addr65_96( );
      else if( AddressSub < 129 ) Addr97_128( );
    
       
      i2c_start( );
      i2c_write( AddrPCF8574[AddrRel] );
      i2c_write( MemRel[AddrRel] );
      i2C_stop( );
   }
   return ( stat );
}
/**********************************************************************************************/

⌨️ 快捷键说明

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