51 单片机读写 AT24C02 源代码(详细注释) 在 P1 口上接八个 led 灯,结果就显示在这八个灯上面。AT24C02 的接线方式见程序的顶部的定义。以下是源代码: #include ;//包含头文件typedef unsigned char uchar;typedef unsigned int uint;#define write_c02 0xa0#define read_c02 0xa1sbit sda = P2^0;sbit scl = P2^1;void delay(){ //delay:5us;;}//i2c:initvoid i2c_init(){sda = 1;delay();scl = 1;delay();}//delayms:void delayms(uint xms){uchar x, y;for(x = xms; x >; 0; x--) for(y = 110; y >; 0; y--); }//start:void start() //启动 i2c{sda = 1;scl = 1;delay();//延时必须大于 4.7us,此约为五微秒sda = 0; //在 scl 为高电平常,sda 一个下降沿为启动信号delay();}//stop:void stop() //停止 i2c{sda = 0;scl = 1;delay();sda = 1; //在 scl 为高电平常,sdasda 一个上升沿为停止信号delay();}//ack:void ack() //应答信号 0{uchar i = 0; //等待变量scl = 1;//在 scl 为高电平期间等待应答delay();while((sda == 1) && i < 250)//若为应答 0 即退出,从机向主机发送应答信号i++;//等待一段时间scl = 0; //应答之后将 scl 拉低delay();}//nack:void nack() //非应答{scl = 1;//在 scl 为高电平期间,由主机向从机发送一个 1,非应答信号delay();sda = 1;scl = 0; //应答之后将 scl 拉低delay();}//send byte:void send_byte(uchar date)//写一个字节{uchar i, temp;temp = date; //存入要写入的数据,即要发送到 sda 上的数据for(i = 0; i < 8; i++){ //发送 8 位 temp <<= 1; //to CY 将数据的最高位移入到 PSW 中的CY 位中 scl = 0;//只有在 scl 为低电平常,才允许 sda 上的数据变化 delay(); sda = CY; //将 CY 里的数据发送到 sda 数据线上 delay(); //可以延时 scl = 1; //在 scl 为高电平常,不允许 sda 上的数据变化,使数据稳定 delay(); scl = 0;//允许 sda 数据线的数据变化,等待下一个数据的传输 delay(); }//wait ack:发送完一个字节数据后要主机要等待从机的应答,第九位scl = 0;//允许 sda 变化delay();sda = 1;//wait:ack,sda 拉高等待应答,当 sda=0 时,表示从机的应答delay();}//read: byteuchar read_byt...