用I2C总线传输数据控制继电器工作

用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值