//共用体共享内存,一个int占四个字节,每个字节占8个bit位,总共占4*8=32个bit位
//共用体体中的结构体共32个int型变量,每个变量占一个bit位
union XBytes
{
unsigned int bytes;
struct
{
unsigned int b00:1,b01:1,b02:1,b03:1,b04:1,b05:1,b06:1,b07:1;
unsigned int b08:1,b09:1,b0a:1,b0b:1,b0c:1,b0d:1,b0e:1,b0f:1;
unsigned int b10:1,b11:1,b12:1,b13:1,b14:1,b15:1,b16:1,b17:1;
unsigned int b18:1,b19:1,b1a:1,b1b:1,b1c:1,b1d:1,b1e:1,b1f:1;
}bits;
};
//根据条件设置开关的每一位.i:是第多少个开关,value是1/0,switch是开关的个数<pre name="code" class="cpp">int getValue(int i)
{
if (i<0||i>=switchSum) return 0;
int index = i/32; //设备编号
int order = i%32; //位编号
switch (order)
{
case 0:return xbyte[index].bits.b00;
case 1:return xbyte[index].bits.b01;
case 2:return xbyte[index].bits.b02;
case 3:return xbyte[index].bits.b03;
case 4:return xbyte[index].bits.b04;
case 5:return xbyte[index].bits.b05;
case 6:return xbyte[index].bits.b06;
case 7:return xbyte[index].bits.b07;
case 8:return xbyte[index].bits.b08;
case 9:return xbyte[index].bits.b09;
case 10:return xbyte[index].bits.b0a;
case 11:return xbyte[index].bits.b0b;
case 12:return xbyte[index].bits.b0c;
case 13:return xbyte[index].bits.b0d;
case 14:return xbyte[index].bits.b0e;
case 15:return xbyte[index].bits.b0f;
case 16:return xbyte[index].bits.b10;
case 17:return xbyte[index].bits.b11;
case 18:return xbyte[index].bits.b12;
case 19:return xbyte[index].bits.b13;
case 20:return xbyte[index].bits.b14;
case 21:return xbyte[index].bits.b15;
case 22:return xbyte[index].bits.b16;
case 23:return xbyte[index].bits.b17;
case 24:return xbyte[index].bits.b18;
case 25:return xbyte[index].bits.b19;
case 26:return xbyte[index].bits.b1a;
case 27:return xbyte[index].bits.b1b;
case 28:return xbyte[index].bits.b1c;
case 29:return xbyte[index].bits.b1d;
case 30:return xbyte[index].bits.b1e;
case 31:return xbyte[index].bits.b1f;
}
}
//得到每一位开关的状态
int getValue(int i)
{
if (i<0||i>=switchSum) return 0;
int index = i/32; //设备编号
int order = i%32; //位编号
switch (order)
{
case 0:return xbyte[index].bits.b00;
case 1:return xbyte[index].bits.b01;
case 2:return xbyte[index].bits.b02;
case 3:return xbyte[index].bits.b03;
case 4:return xbyte[index].bits.b04;
case 5:return xbyte[index].bits.b05;
case 6:return xbyte[index].bits.b06;
case 7:return xbyte[index].bits.b07;
case 8:return xbyte[index].bits.b08;
case 9:return xbyte[index].bits.b09;
case 10:return xbyte[index].bits.b0a;
case 11:return xbyte[index].bits.b0b;
case 12:return xbyte[index].bits.b0c;
case 13:return xbyte[index].bits.b0d;
case 14:return xbyte[index].bits.b0e;
case 15:return xbyte[index].bits.b0f;
case 16:return xbyte[index].bits.b10;
case 17:return xbyte[index].bits.b11;
case 18:return xbyte[index].bits.b12;
case 19:return xbyte[index].bits.b13;
case 20:return xbyte[index].bits.b14;
case 21:return xbyte[index].bits.b15;
case 22:return xbyte[index].bits.b16;
case 23:return xbyte[index].bits.b17;
case 24:return xbyte[index].bits.b18;
case 25:return xbyte[index].bits.b19;
case 26:return xbyte[index].bits.b1a;
case 27:return xbyte[index].bits.b1b;
case 28:return xbyte[index].bits.b1c;
case 29:return xbyte[index].bits.b1d;
case 30:return xbyte[index].bits.b1e;
case 31:return xbyte[index].bits.b1f;
}
}
<pre name="code" class="cpp"> XBytes tmpBytes = xbyte;
//向串口发送数据(只有当状态发生变化时才发送数据)
if(tmpBytes.bytes != xbyte.bytes)
{
unsigned char data[6] = {0xAA,0x00,0x00,0x00,0x00,0x55};//发送的数据0xAA打头,0x55结尾
memcpy(data+1,&xbyte.bytes,4);
serial.writeBytes(data,6);
}