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

📄 24c16.c

📁 基于51单片机的A/D芯片tlc24c16驱动程序和调用子函数
💻 C
字号:
#include"reg51.h" 

#define uc unsigned char
#define ui unsigned int	  

sbit SCL= P3^0;
sbit SDA= P3^1 ;
uc ack; 
#define CMD_24C16W 0xA0 // 0xA0 = 1010 0000B // b7-b4 1010 : device address // b3-b1 000 : page address // b0 0 : write #define CMD_24C16R 0xA1 // 0xA0 = 1010 0000B // b7-b4 1010 : device address // b3-b1 000 : page address // b0 1 : read 

void delay_clk(ui i) //延时
{ 
while(i--);
 } 

void send_byte(uc c)   //发送命令或数据
{ uc i,chk_bit;
 chk_bit=0x80;
 SCL=0;
 for(i=0;i<8;i++) 
{ 
if((c&chk_bit)==0x80) 
 SDA=1;
 else 
 SDA=0;

SCL=1; 
	delay_clk(3); 
SCL=0; 
	delay_clk(3); 
chk_bit>>=1; 
} 
SDA=1;
SCL=1; 
	delay_clk(3); 
if(SDA==1) 
ack=0; 
SCL=0; 
	delay_clk(3);
SDA=0;
 	delay_clk(2); 
 } 

uc read_byte(void)
 { uc sda_data=0x00; 
   uc i; 
for(i=0;i<8;i++)
{ SCL=1;
	 delay_clk(3);
 sda_data|=SDA; 
 sda_data<<=1; 
 SCL=0; 
	 delay_clk(3);
 } 
     delay_clk(2);
 SDA=1; 
	 delay_clk(3);
 SCL=1; 
	 delay_clk(4);
 SCL=0; 
	delay_clk(3); 
return(sda_data); 
}

void i2c_start(void) 
{ SDA=1;
 SCL=1;
 	delay_clk(2);
 SDA=0; 
	delay_clk(3);
 SCL=0; 
	delay_clk(3);
 } 

void i2c_stop(void) 
{ SDA=0;
 SCL=1; 
	delay_clk(4);
 SDA=1; 
	delay_clk(3);
 } 
//------------------------------------- 
void i2c_write(int addr,uc c)
 { uc page=0x00; 
 uc cmd_24c16w;
 page=(uc)(addr/256);
 cmd_24c16w=CMD_24C16W|(page<<1);
 ack=1; 
 i2c_start();
 send_byte(cmd_24c16w); 
 addr%=256;
 send_byte(addr); 
 send_byte(c); 
 i2c_stop();
 } //------------------------------------- 
uc i2c_read(int addr)
 { uc c;
 uc page=0x00; 
uc cmd_24c16r; 
uc cmd_24c16w; 
page=(uc)(addr/256);
 cmd_24c16w=CMD_24C16W | (page<<1); 
ack=1; 
i2c_start(); 
send_byte(cmd_24c16w); 
delay_clk(4); 
addr%=256; 
send_byte(addr);
SDA=1; 
SCL=1; 
delay_clk(4); 
cmd_24c16r=CMD_24C16R | (page<<1); 
i2c_start(); 
send_byte(cmd_24c16r) ;
delay_clk(4); 
SDA=1; 
c=read_byte(); 
i2c_stop();
 return(c);
  }

void main(void)
 { int addr; 
	uc c; 

//	uart_init();
for(addr=0;addr<2048;addr++) 
	i2c_write(addr,0x01); 	 //2048
/*	for(addr=0;addr<2048;addr++)
{ c=i2c_read(addr);
P1=c;
 }	  */
 } 

⌨️ 快捷键说明

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