#include "stm32f10x.h" #include "pca9555.h" #include "usart.h" #include "timer2.h" #include "wdg.h" #define SCL GPIO_Pin_6 #define SDA GPIO_Pin_7 #define SCL_LED GPIO_Pin_10 #define SDA_LED GPIO_Pin_11 #define IIC_BIT_DELAY 5 #define DELAY delay(100) // ¶¨ÒåPCA9555£¨NXP°ëµ¼ÌåI/OÀ©Õ¹Ð¾Æ¬£¬I2C½Ó¿Ú£© #define PCA9555_SLA (0x40 >> 1) // ¶¨ÒåPAC9555µÄÆ÷¼þµØÖ· #define PCA9555_REG_IN0 0x00 // ¶¨ÒåÊäÈë¼Ä´æÆ÷0µØÖ· #define PCA9555_REG_IN1 0x01 // ¶¨ÒåÊäÈë¼Ä´æÆ÷1µØÖ· #define PCA9555_REG_OUT0 0x02 // ¶¨ÒåÊä³ö¼Ä´æÆ÷0µØÖ· #define PCA9555_REG_OUT1 0x03 // ¶¨ÒåÊä³ö¼Ä´æÆ÷1µØÖ· #define PCA9555_REG_POL0 0x04 // ¶¨Ò弫ÐÔ·´×ª¼Ä´æÆ÷0µØÖ· #define PCA9555_REG_POL1 0x05 // ¶¨Ò弫ÐÔ·´×ª¼Ä´æÆ÷1µØÖ· #define PCA9555_REG_CFG0 0x06 // ¶¨Òå·½ÏòÅäÖüĴæÆ÷0µØÖ· #define PCA9555_REG_CFG1 0x07 // ¶¨Òå·½ÏòÅäÖüĴæÆ÷1µØÖ· #define PCA9555_DEVICE_ADDR 0x40 // ¶¨ÒåPCA9555µØÖ· #define LOOP_COUNT 10000 u8 pro0=0xff,pro1=0xff,pro2=0xff,pro3=0xff,PCA9555_dengban_ADDR,PCA9555_zkb_ADDR; u8 value_keep0_l,value_keep0_h,value_keep1_l,value_keep1_h,value_keep2_l,value_keep2_h; u8 parameters; u16 led_buf[5]; u8 value_feedback0[2],value_feedback1[2],value_feedback2[2]; u16 auto_off_time_count; u16 auto_open_off_time_count[16]; u16 auto_close_off_time_count[16]; u8 doorstate[16]; u8 powerstate[8]; u8 Refresh_Led=0; u8 Refresh_Power=0; /*// ¶¨ÒåÈ«¾Ö±äÁ¿ static unsigned long I2CM_BASE = I2C0_MASTER_BASE; // ¶¨ÒåI2CÖ÷»ú»ùÖ·£¬²¢³õʼ»¯ static tI2CM_DEVICE gtDevice; // Æ÷¼þÊý¾Ý½Ó¿Ú static unsigned short gusStatus = STAT_IDLE; // ¹¤×÷״̬ //static tBoolean gbSendRecv; // ÊÕ·¢²Ù×÷±êÖ¾£¬false·¢ËÍ£¬true½ÓÊÕ static char gcAddr[4]; // Êý¾ÝµØÖ·Êý×é static unsigned short gusAddrIndex; // Êý¾ÝµØÖ·Êý×éË÷Òý±äÁ¿ static unsigned short gusDataIndex; // Êý¾Ý»º³åÇøË÷Òý±äÁ¿ */ void delay(u32 conut) { while(conut -- > 0); } void IIC_SDA_DIR_SET(u8 io_dir) //SDAÒý½ÅÊäÈëÊä³öÉèÖà { GPIO_InitTypeDef GPIO_InitStructure; if(io_dir==0) { GPIO_InitStructure.GPIO_Pin = SDA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//output GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } else if(io_dir==1) { GPIO_InitStructure.GPIO_Pin = SDA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//input pull_up GPIO_Init(GPIOB, &GPIO_InitStructure); } } void IIC_SDA_DIR_SET_LED(u8 io_dir) //SDA_LEDÒý½ÅÊäÈëÊä³öÉèÖà { GPIO_InitTypeDef GPIO_InitStructure; if(io_dir==0) { GPIO_InitStructure.GPIO_Pin = SDA_LED; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;//output GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); } else if(io_dir==1) { GPIO_InitStructure.GPIO_Pin = SDA_LED; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;//input pull_up GPIO_Init(GPIOB, &GPIO_InitStructure); } } void IIC_Ready(void) { GPIO_SetBits(GPIOB,SCL); DELAY; GPIO_SetBits(GPIOB,SDA); DELAY; } void IIC_PORT_INIT(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = SCL|SDA; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); IIC_Ready(); } void IIC_Start(void) { GPIO_SetBits(GPIOB,SDA); DELAY; GPIO_SetBits(GPIOB,SCL); DELAY; GPIO_ResetBits(GPIOB, SDA); DELAY; } void IIC_Stop(void) { GPIO_ResetBits(GPIOB, SDA); DELAY; GPIO_SetBits(GPIOB,SCL); DELAY; GPIO_SetBits(GPIOB,SDA); DELAY; } void IIC_Ack(void) { u16 i; GPIO_SetBits(GPIOB,SCL); DELAY; IIC_SDA_DIR_SET(1); while(GPIO_ReadInputDataBit(GPIOB,SDA)&&(i<0x2b0)) {i++;} IIC_SDA_DIR_SET(0); GPIO_ResetBits(GPIOB,SCL); DELAY; } void IIC_Send_Ack(void) { GPIO_ResetBits(GPIOB,SDA); DELAY; GPIO_SetBits(GPIOB,SCL); DELAY; GPIO_ResetBits(GPIOB,SCL); DELAY; } void IIC_Send_NoAck(void) { GPIO_SetBits(GPIOB,SDA); DELAY; GPIO_SetBits(GPIOB,SCL); DELAY; GPIO_ResetBits(GPIOB,SCL); DELAY; } void IIC_Write_Byte(u8 a) { u16 i; GPIO_ResetBits(GPIOB,SCL); //scl=0; DELAY; for(i=0;i<8;i++) { if(a&0x80) GPIO_SetBits(GPIOB,SDA);//sda=1; else GPIO_ResetBits(GPIOB,SDA); a=a<<1; GPIO_SetBits(GPIOB,SCL);//scl=1; DELAY; GPIO_ResetBits(GPIOB,SCL);//scl=0; DELAY; } GPIO_SetBits(GPIOB,SDA);//sda=1; DELAY; } u8 IIC_Read_Byte(void) { u8 i,temp; temp=0; GPIO_SetBits(GPIOB,SDA);//sda=1; DELAY; GPIO_ResetBits(GPIOB,SCL); //scl=0; DELAY; IIC_SDA_DIR_SET(1); for(i=0;i<8;i++) { GPIO_SetBits(GPIOB,SCL); //scl=1; DELAY; DELAY; temp=(temp<<1)|GPIO_ReadInputDataBit(GPIOB,SDA); DELAY; GPIO_ResetBits(GPIOB,SCL); //scl=0; DELAY; } IIC_SDA_DIR_SET(0); GPIO_SetBits(GPIOB,SDA);//sda=1; DELAY; //GPIO_ResetBits(GPIOB,SCL);//scl=0; //DELAY; return temp; } //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////// void IIC_Ready_LED(void) { GPIO_SetBits(GPIOB,SCL_LED); DELAY; GPIO_SetBits(GPIOB,SDA_LED); DELAY; } void IIC_PORT_INIT_LED(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); GPIO_InitStructure.GPIO_Pin = SCL_LED|SDA_LED; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); IIC_Ready_LED(); } void IIC_Start_LED(void) { GPIO_SetBits(GPIOB,SDA_LED); DELAY; GPIO_SetBits(GPIOB,SCL_LED); DELAY; GPIO_ResetBits(GPIOB, SDA_LED); DELAY; } void IIC_Stop_LED(void) { GPIO_ResetBits(GPIOB, SDA_LED); DELAY; GPIO_SetBits(GPIOB,SCL_LED); DELAY; GPIO_SetBits(GPIOB,SDA_LED); DELAY; } void IIC_Ack_LED(void) { u16 i; GPIO_SetBits(GPIOB,SCL_LED); DELAY; IIC_SDA_DIR_SET_LED(1); while(GPIO_ReadInputDataBit(GPIOB,SDA_LED)&&(i<0x2b0)) {i++;} IIC_SDA_DIR_SET_LED(0); GPIO_ResetBits(GPIOB,SCL_LED); DELAY; } void IIC_Send_Ack_LED(void) { GPIO_ResetBits(GPIOB,SDA_LED); DELAY; GPIO_SetBits(GPIOB,SCL_LED); DELAY; GPIO_ResetBits(GPIOB,SCL_LED); DELAY; } void IIC_Send_NoAck_LED(void) { GPIO_SetBits(GPIOB,SDA_LED); DELAY; GPIO_SetBits(GPIOB,SCL_LED); DELAY; GPIO_ResetBits(GPIOB,SCL_LED); DELAY; } void IIC_Write_Byte_LED(u8 a) { u16 i; GPIO_ResetBits(GPIOB,SCL_LED); //scl=0; DELAY; for(i=0;i<8;i++) { if(a&0x80) GPIO_SetBits(GPIOB,SDA_LED);//sda=1; else GPIO_ResetBits(GPIOB,SDA_LED); a=a<<1; GPIO_SetBits(GPIOB,SCL_LED);//scl=1; DELAY; GPIO_ResetBits(GPIOB,SCL_LED);//scl=0; DELAY; } GPIO_SetBits(GPIOB,SDA_LED);//sda=1; DELAY; } u8 IIC_Read_Byte_LED(void) { u8 i,temp; temp=0; GPIO_SetBits(GPIOB,SDA_LED);//sda=1; DELAY; GPIO_ResetBits(GPIOB,SCL_LED); //scl=0; DELAY; IIC_SDA_DIR_SET_LED(1); for(i=0;i<8;i++) { GPIO_SetBits(GPIOB,SCL_LED); //scl=1; DELAY; DELAY; temp=(temp<<1)|GPIO_ReadInputDataBit(GPIOB,SDA_LED); DELAY; GPIO_ResetBits(GPIOB,SCL_LED); //scl=0; DELAY; } IIC_SDA_DIR_SET_LED(0); GPIO_SetBits(GPIOB,SDA_LED);//sda=1; DELAY; //GPIO_ResetBits(GPIOB,SCL_LED);//scl=0; //DELAY; return temp; } void IIC_Write_Pca9555(u8 addr,u8 reg_addr,u8 low_byte,u8 high_byte) { IIC_Start(); IIC_Write_Byte(addr & 0xfe); IIC_Ack(); IIC_Write_Byte(reg_addr); IIC_Ack(); IIC_Write_Byte(low_byte); IIC_Ack(); IIC_Write_Byte(high_byte); IIC_Ack(); IIC_Stop(); } void IIC_Write_Pca9555_LED(u8 addr,u8 reg_addr,u8 low_byte,u8 high_byte) { IIC_Start_LED(); IIC_Write_Byte_LED(addr & 0xfe); IIC_Ack_LED(); IIC_Write_Byte_LED(reg_addr); IIC_Ack_LED(); IIC_Write_Byte_LED(low_byte); IIC_Ack_LED(); IIC_Write_Byte_LED(high_byte); IIC_Ack_LED(); IIC_Stop_LED(); } void IIC_Read_Pca9555(u8 addr,u8 reg_addr,u8* pBuffer,u16 num) { IIC_Start(); IIC_Write_Byte(addr & 0xfe); IIC_Ack(); IIC_Write_Byte(reg_addr); IIC_Ack(); IIC_Start(); IIC_Write_Byte(addr | 0x01); IIC_Ack(); while (num) { *pBuffer = IIC_Read_Byte(); if (num == 1) { IIC_Send_NoAck(); } else { IIC_Send_Ack(); } pBuffer++; num--; } IIC_Stop(); } void IIC_Read_Pca9555_LED(u8 addr,u8 reg_addr,u8* pBuffer,u16 num) { IIC_Start_LED(); IIC_Write_Byte_LED(addr & 0xfe); IIC_Ack_LED(); IIC_Write_Byte_LED(reg_addr); IIC_Ack_LED(); IIC_Start_LED(); IIC_Write_Byte_LED(addr | 0x01); IIC_Ack_LED(); while (num) { *pBuffer = IIC_Read_Byte_LED(); if (num == 1) { IIC_Send_NoAck_LED(); } else { IIC_Send_Ack_LED(); } pBuffer++; num--; } IIC_Stop_LED(); } // I2CÖ÷»ú³õʼ»¯ void I2CM_Init(void) { // I2CM_DeviceInitSet(>Device, 0, 0, 0, (void *)0, 0); I2C_InitTypeDef I2C_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2 | RCC_APB1Periph_I2C1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); /* PB6,7 SCL and SDA */ GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //ÉèÖùܽÅΪ¸´Óù¦ÄÜ¿ªÂ©Êä³ö GPIO_Init(GPIOB, &GPIO_InitStructure); // I2C_DeInit(I2C2); I2C_DeInit(I2C1); I2C_InitStructure.I2C_Mode = I2C_Mode_I2C; // I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2; // I2C_InitStructure.I2C_OwnAddress1 = 0x30; // I2C_InitStructure.I2C_Ack = I2C_Ack_Enable; // I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; I2C_InitStructure.I2C_ClockSpeed = 400000; // I2C_Cmd(I2C2, ENABLE); I2C_Cmd(I2C1, ENABLE); // I2C_Init(I2C2, &I2C_InitStructure); // I2C_Init(I2C1, &I2C_InitStructure); I2C_AcknowledgeConfig(I2C2, ENABLE); I2C_AcknowledgeConfig(I2C1, ENABLE); } //дÖ÷¿Ø°åÉϵÄpca9555 /* u8 PCA9555_dengban_ADDR оƬµØÖ·£¬0x40±íʾµÚÒ»¸öоƬµØÖ· u8 pro2 дÈëоƬµÄǰ°ËλÊý¾Ý u8 pro3 дÈëоƬµÄǰºóλÊý¾Ý */ void write1(u8 PCA9555_dengban_ADDR,u8 pro2,u8 pro3) { //__disable_irq ; IIC_Write_Pca9555_LED(PCA9555_dengban_ADDR,0x02,pro2,pro3); //IIC_Write_Pca9555_LED(PCA9555_dengban_ADDR,0x06,0x00,0x00); //__enable_irq ; } /********************************Ö÷¿Ø°åÉϵÄpca555¿ØÖƳÌÐò*********************************************/ //////////////////////////////////////////////////////////////////дÃüÁî i2c1²Ù×÷µÄÊÇÖ÷¿Ø°åÉϵÄpca555 void write2(u8 PCA9555_zkb_ADDR,u8 pro0,u8 pro1) { //__disable_irq ; IIC_Write_Pca9555(PCA9555_zkb_ADDR,0x02,pro0,pro1); //IIC_Write_Pca9555(PCA9555_zkb_ADDR,0x06,0x00,0x00); //__enable_irq ; } /*****************************¶ÁÃüÁîÖ÷¿Ø°å*****************************************/ void I2C_ReadS_PCA9555(u8 PCA9555_zhukong_ADDR,u8 PCA9555_REG_IN,u8* pBuffer,u16 no) { /* *Read from register */ //__disable_irq ; //IIC_Write_Pca9555(PCA9555_zhukong_ADDR,0x06,0xff,0xff); IIC_Read_Pca9555(PCA9555_zhukong_ADDR,PCA9555_REG_IN,pBuffer,no); //__enable_irq ; //¿ªÖÐ¶Ï } /*****************************¶ÁÃüÁîµÆ°å*****************************************/ void I2C_ReadS_PCA95552(u8 PCA9555_dengban_ADDR,u8 PCA9555_REG_IN,u8* pBuffer,u16 no) { /* *Read from register */ //__disable_irq ; IIC_Read_Pca9555_LED(PCA9555_dengban_ADDR,PCA9555_REG_IN,pBuffer,no); //__enable_irq ; } void Set_Value_To_Output(u8 num) { if (num <17) { if (num <9) { value_keep0_l |= 0x01<<(num - 1); write2(0x44,value_keep0_l,value_keep0_h); return; } else { value_keep0_h |= 0x01<<(num - 9); write2(0x44,value_keep0_l,value_keep0_h); return; } } else if (num >16 && num <33) { if (num <25) { value_keep1_l |= 0x01<<(num - 17); write2(0x46,value_keep1_l,value_keep1_h); return; } else { value_keep1_h |= 0x01<<(num - 25); write2(0x46,value_keep1_l,value_keep1_h); return; } } else if (num <41) { value_keep2_l |= 0x01<<(num - 33); write2(0x4a,value_keep2_l,value_keep2_h); return; } else { //error } } void Clear_Value_To_Output(u8 num) { if (num <17) { if (num <9) { value_keep0_l &= ~(0x01<<(num - 1)); write2(0x44,value_keep0_l,value_keep0_h); return; } else { value_keep0_h &= ~(0x01<<(num - 9)); write2(0x44,value_keep0_l,value_keep0_h); return; } } else if (num >16 && num <33) { if (num <25) { value_keep1_l &= ~(0x01<<(num - 17)); write2(0x46,value_keep1_l,value_keep1_h); return; } else { value_keep1_h &= ~(0x01<<(num - 25)); write2(0x46,value_keep1_l,value_keep1_h); return; } } else if (num <41) { value_keep2_l &= ~(0x01<<(num - 33)); write2(0x4a,value_keep2_l,value_keep2_h); return; } else { //error } } void Change_Value_To_Output(u8 num,u8 value) { if (value == 0) Clear_Value_To_Output(num); else Set_Value_To_Output(num); } void All_Off__To_Output(void) { write2(0x44,0,0); write2(0x46,0,0); write2(0x4a,0,0); value_keep0_l = 0;value_keep0_h = 0; value_keep1_l = 0;value_keep1_h = 0; value_keep2_l = 0;value_keep2_h = 0; } void All_On__To_Output(void) { write2(0x44,0xff,0xff);//delay(100000); write2(0x46,0xff,0xff);//delay(100000); write2(0x4a,0xff,0xff);//delay(100000); value_keep0_l = 0xff;value_keep0_h = 0xff; value_keep1_l = 0xff;value_keep1_h = 0xff; value_keep2_l = 0xff;value_keep2_h = 0xff; } void All_Off__To_OpenDoor_Output(void) { write2(0x46,0,0); write2(0x44,0,0); value_keep0_l = 0;value_keep0_h = 0; value_keep1_l = 0;value_keep1_h = 0; } void All_On__To_OpenDoor_Output(void) { write2(0x44,0xff,0xff); write2(0x46,0xff,0xff); value_keep0_l = 0xff;value_keep0_h = 0xff; value_keep1_l = 0xff;value_keep1_h = 0xff; } void All_Off__To_CloseDoor_Output(void) { write2(0x46,0,0); write2(0x44,0,0); value_keep0_l = 0;value_keep0_h = 0; value_keep1_l = 0;value_keep1_h = 0; } void All_On__To_CloseDoor_Output(void) { write2(0x44,0,0); write2(0x46,0xff,0xff); value_keep0_l = 0;value_keep0_h = 0; value_keep1_l = 0xff;value_keep1_h = 0xff; } void All_Off__To_Power_Output(void) { write2(0x4a,0,0); value_keep2_l = 0;value_keep2_h = 0; } void All_On__To_Power_Output(void) { write2(0x4a,0xff,0xff); value_keep2_l = 0xff;value_keep2_h = 0xff; } u16 uart_deal_function(void) { u8 i; u8 temp_data[BUFFER_LEN],temp_data_length; u8 state=0; if (uart_data_length > 0 && uart_timerout_count == 0) { //__disable_irq ; for (i=0;i 8) { if (temp_data[i+1] == 'o') if (temp_data[i+2] == 'o') if (temp_data[i+3] == 'r') if (temp_data[i+4] == 's') if (temp_data[i+5] == 't') if (temp_data[i+6] == 'a') if (temp_data[i+7] == 't') if (temp_data[i+8] == 'e') { return 10;//doorstate } state = 0; } } else if (temp_data[i] == 'p') { if (temp_data_length - i > 9) { if (temp_data[i+1] == 'o') if (temp_data[i+2] == 'w') if (temp_data[i+3] == 'e') if (temp_data[i+4] == 'r') if (temp_data[i+5] == 's') if (temp_data[i+6] == 't') if (temp_data[i+7] == 'a') if (temp_data[i+8] == 't') if (temp_data[i+9] == 'e') { return 11;//powerstate } state = 0; } } else { } break; case 10: if (temp_data[i] == 'p') { state = 11; } else if (temp_data[i] == 'n') { if (i + 1 == temp_data_length) { return 3;//on } else { if (temp_data_length - i > 1) { if (temp_data[i+1] > 0x2f && temp_data[i+1] < 0x3a ) { parameters = temp_data[i+1] - 0x30; return 4 + (parameters<<8);//onx } else state = 0; } else return 0; } } else if (temp_data[i] == 'f') { state = 13; } else { state = 0; } break; case 11: if (temp_data[i] == 'e') { state = 14; } else { state = 0; } break; case 12: break; case 13: if (temp_data[i] == 'f') { if (i + 1 == temp_data_length) { return 5;//off } else { if (temp_data_length - i > 1) { if (temp_data[i+1] > 0x2f && temp_data[i+1] < 0x3a ) { parameters = temp_data[i+1] - 0x30; return 6 + (parameters<<8);//offx } else state = 0; } else return 0; } } else { state = 0; } break; case 14: if (temp_data[i] == 'n') { if (i + 1 == temp_data_length) { return 1;//open } else { if (temp_data_length - i > 2) { if (temp_data[i+1] > 0x2f && temp_data[i+1] < 0x3a && temp_data[i+2] > 0x2f && temp_data[i+2] < 0x3a) { parameters = (temp_data[i+1] - 0x30) * 10 + (temp_data[i+2] - 0x30); return 2 + (parameters<<8);//openxx } else state = 0; } else return 0; } } else { state = 0; } break; case 20: if (temp_data[i] == 'l') { state = 21; } else { state = 0; } break; case 21: if (temp_data[i] == 'o') { state = 22; } else { state = 0; } break; case 22: if (temp_data[i] == 's') { state = 23; } else { state = 0; } break; case 23: if (temp_data[i] == 'e') { if (i + 1 == temp_data_length) { return 7;//close } else { if (temp_data_length - i > 2) { if (temp_data[i+1] > 0x2f && temp_data[i+1] < 0x3a && temp_data[i+2] > 0x2f && temp_data[i+2] < 0x3a) { parameters = (temp_data[i+1] - 0x30) * 10 + (temp_data[i+2] - 0x30); return 8 + (parameters<<8);//closexx } else state = 0; } else return 0; } } else { state = 0; } break; case 30: if (temp_data[i] == 'i') { state = 31; } else { state = 0; } break; case 31: if (temp_data[i] == 'm') { state = 32; } else { state = 0; } break; case 32: if (temp_data[i] == 'e') { if (temp_data_length - i > 2) { if (temp_data[i+2] == 's') { if (temp_data[i+1] > 0x30 && temp_data[i+1] < 0x3a) { parameters = temp_data[i+1] - 0x30; return 9 + (parameters<<8);//timexs } else if (temp_data[i+1] == 0x41) { parameters = 0x0a; return 9 + (parameters<<8);//timexs } else state = 0; } else state = 0; } else return 0; } else { state = 0; } break; } } return 0; } else return 0; } void Led_On_RGB(u8 num,u16 value) { if (num < 6) { led_buf[0] &= (~(value<<((num-1)*3))); write1(0x40,led_buf[0],led_buf[0] >> 8); } else if(num > 6 && num <11) { led_buf[1] &= (~(value<<((num-7)*3+2))); write1(0x42,led_buf[1],led_buf[1] >> 8); } else if(num > 11 && num <17) { led_buf[2] &= (~(value<<((num-12)*3+1))); write1(0x44,led_buf[2],led_buf[2] >> 8); } else if(num > 16 && num <22) { led_buf[3] &=( ~(value<<((num-17)*3))); write1(0x46,led_buf[3],led_buf[3] >> 8); } else if(num > 22 && num <25) { led_buf[4] &= (~(value<<((num-23)*3+2))); write1(0x48,led_buf[4],led_buf[4] >> 8); } else if (num == 6) { led_buf[0] &= (~(value<<15)); led_buf[1] &= (0xfffc | (~(value>>1))); write1(0x40,led_buf[0],led_buf[0] >> 8); write1(0x42,led_buf[1],led_buf[1] >> 8); } else if (num == 11) { led_buf[1] &= (~(value<<14)); led_buf[2] &= (0xfffe | (~(value>>2))); write1(0x42,led_buf[1],led_buf[1] >> 8); write1(0x44,led_buf[2],led_buf[2] >> 8); } else if (num == 22) { led_buf[3] &= (~(value<<15)); led_buf[4] &= (0xfffc | (~(value>>1))); write1(0x46,led_buf[3],led_buf[3] >> 8); write1(0x48,led_buf[4],led_buf[4] >> 8); } } void Led_Off_RGB(u8 num,u16 value) { if (num < 6) { led_buf[0] |= (value<<((num-1)*3)); write1(0x40,led_buf[0],led_buf[0] >> 8); } else if(num > 6 && num <11) { led_buf[1] |= (value<<((num-7)*3+2)); write1(0x42,led_buf[1],led_buf[1] >> 8); } else if(num > 11 && num <17) { led_buf[2] |= (value<<((num-12)*3+1)); write1(0x44,led_buf[2],led_buf[2] >> 8); } else if(num > 16 && num <22) { led_buf[3] |= (value<<((num-17)*3)); write1(0x46,led_buf[3],led_buf[3] >> 8); } else if(num > 22 && num <25) { led_buf[4] |= (value<<((num-23)*3+2)); write1(0x48,led_buf[4],led_buf[4] >> 8); } else if (num == 6) { led_buf[0] |= ((~0x7fff) & (value<<15)); led_buf[1] |= ((~0xfffc) & ((value>>1)& 0x7fff)); write1(0x40,led_buf[0],led_buf[0] >> 8); write1(0x42,led_buf[1],led_buf[1] >> 8); } else if (num == 11) { led_buf[1] |= ((~0x3fff) & (value<<14)); led_buf[2] |= ((~0xfffe) & ((value>>2)&0x3fff)); write1(0x42,led_buf[1],led_buf[1] >> 8); write1(0x44,led_buf[2],led_buf[2] >> 8); } else if (num == 22) { led_buf[3] |= ((~0x7fff) & (value<<15)); led_buf[4] |= ((~0xfffc) & ((value>>1)& 0x7fff)); write1(0x46,led_buf[3],led_buf[3] >> 8); write1(0x48,led_buf[4],led_buf[4] >> 8); } } void Led_Off_R(u8 num) { Led_Off_RGB(num,0x0004); } void Led_On_R(u8 num) { Led_On_RGB(num,0x0004); } void Led_Off_G(u8 num) { Led_Off_RGB(num,0x0002); } void Led_On_G(u8 num) { Led_On_RGB(num,0x0002); } void Led_Off_B(u8 num) { Led_Off_RGB(num,0x0001); } void Led_On_B(u8 num) { Led_On_RGB(num,0x0001); } void All_Led_Off(void) { write1(0x40,0xff,0xff); write1(0x42,0xff,0xff); write1(0x44,0xff,0xff); write1(0x46,0xff,0xff); write1(0x48,0xff,0xff); led_buf[0] = ~0; led_buf[1] = ~0; led_buf[2] = ~0; led_buf[3] = ~0; led_buf[4] = ~0; } void All_Led_On(void) { write1(0x40,0x00,0x00); write1(0x42,0x00,0x00); write1(0x44,0x00,0x00); write1(0x46,0x00,0x00); write1(0x48,0x00,0x00); led_buf[0] = 0x00; led_buf[1] = 0x00; led_buf[2] = 0x00; led_buf[3] = 0x00; led_buf[4] = 0x00; } void Refresh_Power_Condition(void) { I2C_ReadS_PCA9555(0x4d,0,value_feedback2,2); Refresh_Power = 1; } void Refresh_Power_Condition_Led(void) { u8 i; for (i=0;i<8;i++) { if (value_feedback2[0] & (0x01<