用I2C总线传输数据控制继电器工作
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define dig_num P2
#define dig_seg P0
#define ADD_t1 0x10
#define ADD_t2 0x20
#define somenop(); _nop_();_nop_();_nop_();_nop_();_nop_();
bit ACK; /*应答标志位*/
sbit jdq=P3^7;
sbit key=P3^3;
sbit led3=P1^2;
sbit led1=P1^0;
sbit sw1=P2^7;
sbit sw2=P2^6;
sbit sw3=P2^5;
sbit sw5=P2^3;
sbit sw6=P2^2;
sbit beep=P2^0;
bit f_run,f_run_t;
sbit SDA=P3^4;
sbit SCL=P3^2;
uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
uchar data count_1s;
uchar data buff_t1,buff_t2,t1,t2;
uchar data buff_led1,buff_led2,buff_led5,buff_led6,buff;
uchar dig_num0;
uchar data SLA _at_ 0x2e;
uchar data MTD _at_ 0x2f;
uchar data MRD _at_ 0x30;
void INT_0(void);
void delay(uint t);
void key_down(void);
void Input_I2C(uchar add,uchar add_t,uchar dat);
void Start_I2c();
void Stop_I2c();
void SendByte(uchar c);
void Ack_I2c(bit a);
uchar RcvByte(void);
//***********************************************************
void main(void)
{
sw1=0;sw2=0;sw3=0;sw5=0;sw6=0;key=1;
TMOD=0x01;
TH0=0xf0;TL0=0x60;
TCON=0x10; //TR0=1,IE0=0;
IE=0x82; //EA=1,EX0=1,ET0=1;
Start_I2c();
SLA=0xAE;
SendByte(SLA);
while(!ACK)SendByte(SLA);
SendByte(ADD_t1);
while(!ACK)SendByte(ADD_t1);
Start_I2c();
SLA=0xAF;
SendByte(SLA);
while(!ACK)SendByte(SLA);
t1=RcvByte();
Ack_I2c(ACK);
Stop_I2c();
buff_t1=t1;
Start_I2c();
SLA=0xAE;
SendByte(SLA);
while(!ACK)SendByte(SLA);
SendByte(ADD_t2);
while(!ACK)SendByte(ADD_t2);
Start_I2c();
SLA=0xAF;
SendByte(SLA);
while(!ACK)SendByte(SLA);
t2=RcvByte();
Ack_I2c(ACK);
Stop_I2c();
buff_t2=t2;
while(1)
{
if(!key)key_down();
if(f_run_t==0){f_run=0;buff_t1=t1;buff_t2=t2;}
}
}
//***************************************************************
//***************************************************************
void key_down(void)
{
if(sw1==0) //加1
{if(t1>=99){t1=0;
beep