www.pudn.com > plc_1.zip > main.c


#include "reg51.h" 
 
bit Read_Test(unsigned char); 
void delay(unsigned int); 
void Led_Show(unsigned char,bit ); 
unsigned char Read_Key(unsigned char *,unsigned char *); 
void Process(void); 
bit I2c_Read(unsigned char,unsigned char); 
bit I2c_Write(unsigned char,unsigned char); 
unsigned char data intr[6]; 
unsigned char error = 0; 
unsigned char old_data = 0,pc = 0,key; 
 
void main() 
{ 
//    unsigned char key; 
//   unsigned char in_data = 0, old_data = 0, pc = 0,old_pc = 0; 
    unsigned char in_data = 0; 
	unsigned char old_pc = 0; 
	bit b = 0,old_b = 0; 
	                                            
    I2c_Read(pc,1); 
	old_data = in_data = intr[0]; 
	Led_Show(in_data,0); 
	while(1) 
	{	 
        key = Read_Key(&in_data,&pc); 
		b = key & 0xf0 ? 1:0; 
 
        switch (key){ 
		            case 0x00: if (old_data != in_data || old_b != b ) 
                               {   
                                   if (old_b != b) 
                                   { 
                                      I2c_Read(pc,1); 
                                      in_data = intr[0]; 
                                    }  
							       old_b = b; 
    					           old_data = in_data; 
      							   Led_Show(in_data,0); 
								} 
								break; 
                    case 0x01: Led_Show(in_data,0); break; 
                    case 0x02: Led_Show(in_data,0); break; 
					case 0x03: if (I2c_Write(pc,in_data) == 0)   // test Wri == 0 
					           {   
							      pc += 1; 
							      Led_Show(pc,1); 
								  while(Read_Key(&key,&pc) == 03) ;  
							      old_b = 1; 
								} 
								else  
								    while(1)  Led_Show(0xee,1); 
							   break; 
					case 0x10:  
					case 0x11: 
					case 0x12: if (old_pc != pc || old_b != b) 
					           { 
							      old_b = b; 
				                  old_pc = pc; 
								  Led_Show(pc,1); 
								  I2c_Read(pc,1); 
								  in_data = intr[0]; 
								}   
				                 break; 
					case 0x13: Process();   // test  DA == 0 and Wri == 0 
                    default: ; 
                     } 
 
	} 
} 
 
void delay(unsigned int count) 
{ 
    unsigned int i; 
	unsigned char j; 
    for (i = 0;i < count;i++) 
	    for (j = 0;j < 100;j++) 
		  ; 
}