⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twi.c

📁 用AVR M8控制PT2134音频芯片的程序,显示是LCM2402,还带有有红外遥控功能.
💻 C
字号:

#include <avr/io.h>
#include <util/delay.h> 
#include "TWI.h"


uchar fo;
//*************************************
void i2c_start(){             //其始信号   
   SET_SCL;
   SET_SDA;
   _delay_us(6);
   CLR_SDA;
   _delay_us(6);
   CLR_SCL;                   //当SCL为高电位时SDA上的数据无效,当SCL为低电位SDA有效       
   }
//***************************************
void i2c_stop(){              //停止信号   
   CLR_SDA;
   SET_SCL; 
   _delay_us(6);

   SET_SDA;  
   _delay_us(6);

   CLR_SCL; 
   }
//****************************************
void i2c_ack(){           //答应信号   
   CLR_SDA;
   SET_SCL;
   _delay_us(6);

   CLR_SCL; 
   SET_SDA;     
  }
//****************************************
void i2c_nack(){           //非答应信号     
   SET_SDA;
   SET_SCL;
   _delay_us(6);

   CLR_SCL;
   CLR_SDA;  
  }
//****************************************
 write_byte(uchar c){               //写一字节     
   uchar i;
   for(i=0;i<8;i++){
     if((c<<i)&0x80)SET_SDA;
	 else CLR_SDA;
     SET_SCL;
     _delay_us(6);

	 CLR_SCL;
	}
	 SET_SDA;
	 SET_SCL;
	 _delay_us(6);

	  if (PINC&(1<<PC4))fo=0;
	 else fo=1;
	 CLR_SCL;
   }
//**************************************
/*uchar read_byte(){      //读一字节    
     uchar ii;
	 uchar r=0;
	 SET_SDA;
	 for(ii=0;ii<8;ii++){
	   r=r<<1;
       SET_SCL;
      _delay_us(6);      

	  if (PINC&(1<<PC4))r++;
	   CLR_SCL;
	}
	return r;
   }*/
//****************************************
/*uchar write_nbyte(uchar slave,uchar addr,uchar *ss,uchar num){    //写N字节    
    uchar iii;
	i2c_start();
	write_byte(slave);
	if(fo==0)return 0;
	write_byte(addr);
	if(fo==0)return 0;
	for(iii=0;iii<num;iii++){
	 write_byte(*ss);
	 if(fo==0)return 0;
	 ss++;
	}
	i2c_stop();
	return(1);
  }*/

//****************************************
/*uchar read_nbyte(uchar slave,uchar addr,uchar *s,uchar num){    //读N字节     
    uchar is;
	i2c_start();
	write_byte(slave);  //写操作  
	if(fo==0)return 0;
	write_byte(addr);
	if(fo==0)return 0;
	i2c_start();
	write_byte(slave+1);//读操作 
	if(fo==0)return 0;
	for(is=0;is<num;is++){
	   *s=read_byte();
       i2c_ack();
	   s++;
	}
	*s=read_byte();
	i2c_nack();
	i2c_stop();
	return(1);
  }*/
 //***************************************************
uchar write_nbyte1(uchar slave,uchar dat){    //写1字节    
 
	i2c_start();
	write_byte(slave);
	if(fo==0)return 0;
	write_byte(dat);
	if(fo==0)return 0;
	i2c_stop();
	return(1);
  }



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -