📄 rl_module.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 + -