/*******************************************************************/
用单片机模拟IIC总线通信协议。在24C02C中的指定地址
(如:3)写入指定数据(如:0x0f)。然后再从24C02C中把刚才写入的数据读出来,送P1口的LED显示出来。 /**************************************************/
/*******************************************************************/
#include sbit scl=P2^1; void delay() {;;} void delay1(uint z ) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void start() { sda=1; scl=1; delay(); sda=0; delay(); scl=0; } void stop() { sda=0; scl=1; delay(); sda=1; delay(); scl=0; } void ack() { uchar i=0; scl=1; while((sda==1)&&(i<250))i++; scl=0; delay(); } void init() { sda=1; scl=1; } void write_byte(uchar date) { uchar i,temp; temp=date; scl=0; delay(); for(i=0;i<8;i++) { temp=temp<<1; sda=CY; delay(); scl=1; delay(); scl=0; delay(); } sda=1; } uchar read_byte() { uchar i,j; scl=0; delay(); sda=1; delay(); for(i=0;i<8;i++) { scl=1; delay(); j=(j<<1)|sda; scl=0; delay(); } return j; } void write_addr(uchar addr,uchar date) { start(); write_byte(0xa0); ack(); write_byte(addr); ack(); write_byte(date); ack(); stop(); } uchar read_addr(uchar addr) { uchar date; start(); } write_byte(0xa0); ack(); write_byte(addr); ack(); start(); write_byte(0xa1); ack(); date=read_byte(); stop(); return date; void main() { } init(); write_addr(3,0x0f); delay1(100); P1=read_addr(3); while(1); 因篇幅问题不能全部显示,请点此查看更多更全内容