24c16.c
来自「基于51单片机的A/D芯片tlc24c16驱动程序和调用子函数」· C语言 代码 · 共 134 行
C
134 行
#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 + =
减小字号Ctrl + -
显示快捷键?