微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > I2C总线控制程序 求大神帮忙啊 忙活一个下午了

I2C总线控制程序 求大神帮忙啊 忙活一个下午了

时间:10-02 整理:3721RD 点击:
这个是控制led 第一个亮  但是结果是全亮

#include<reg52.h>
#define uchar unsigned char
sbit  sda=P2^0;
sbit  scl=P2^1;
uchar a;
void delay1(int z)
{
   int i,j;
   for(i=0;i<110;i++)
   for(j=0;j<z;j++);

}
void delay()
{ ;; }
void start()
{
  sda=1;
  delay();
  scl=1;
  delay();
  sda=0;
  delay();
// scl=0;
// delay();

}
void stop()
{
  sda=0;
  delay();
  scl=1;
  delay();
  sda=1;
   delay();

}
void respons()       
{
   uchar i;
   scl=1;
   delay();
   while((sda==1)&&(i<255))i++;
   scl=0;
   delay();

}
void init()         //shifangzongxian
{
  sda=1;
   delay();
  scl=1;
   delay();

}
void write_byte(uchar date)
{
   uchar i,temp;
   temp=date;
   for(i=0;i<8;i++)
   {    temp=temp<<1;//zuoyiyiwei
      scl=0;
      delay();

            sda=CY;//zuogaowei
         delay();
         scl=1;
         delay();
         scl=0;         //keyibianhua
         delay();
   }
   scl=0;
   delay();
   sda=1;//zongxianshifang wei         l yingdaxinhaonengduqu
  delay();
}
unsigned uchar read_byte()
{
  unsigned uchar i,j,k;
   scl=0;
   delay();
   sda=1;//shujuzongxian shifang wendingshi duqushuju
   for(i=0;i<8;i++)
   {
     scl=0;
     delay();
         if(sda==1)
         j=1;
         else
         j=0;
         k=(k<<1)|j;
            scl=0;
            delay();
   }  
     //delay();
         return k;
}
void main()
{         
            init();//初始化 总线拉高 1电平
         start(); //开始信号
         write_byte(0xa0);//a是器件的地址3位 0表示写
h
         respons();//应答每次都要
         write_byte(3);//写入数据的地址,在哪写
          respons();
         write_byte(0xfd);         //写数据 0xfe
          respons();
          stop();  //写完了 停止
          //delay1(100);//停止后要延时下在开始 不然器件反应不过来
         
         start(); //开始读数据,前面是写  复制过程
         write_byte(0xa0);//写数据
          respons();
          write_byte(3);
           respons();//congna里 duqu  每次都要写地址
         start();
         write_byte(0xa1);//读数据
         respons();
         a=read_byte();
         stop();
          P1=a;
         while(1);
}







Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top