#define WRITE_1 0xa0 // 写第一片 #define WRITE_2 0xa2 //写第二 #define WRITE_3 0xa4 //写第三片 #define READ_1 0xa1 //读的一片 #define READ_2 0xa3 //读第二片 #define READ_3 0xa5 //读第三片 #define ZC_AD 0xff10//暂存区首地址
#define HIGH 1 #define LOW 0 #define FALAE 0 #define TRUE ~FALAE sbit D_SDA = P1^7; sbit D_CLOCK=P3^4; //void delay_0(void) // {;} //////////////////// void I_start(void)//工作时序起始 { D_CLOCK=HIGH; Delay(1); D_SDA=LOW; Delay(1); D_CLOCK=LOW; Delay(1); }
void I_stop(void)//工作时序停止 { D_SDA=LOW; Delay(1); D_CLOCK=HIGH; Delay(1); D_SDA=HIGH; Delay(1); D_CLOCK=LOW; Delay(1);
}
void I_init(void)//总线初始化 { D_CLOCK=LOW; I_stop(); }
bit I_clock(void)//总线时钟
{ bit sa; D_CLOCK=HIGH; Delay(1); sa=D_SDA; D_CLOCK=LOW; Delay(1); return (sa); }
bit I_send( uchar I_data)//发送8位数据 { uchar i; for(i=0;i<8;i++) { D_SDA=(bit)(I_data&0x80); I_data=I_data<<i; I_clock(); } D_SDA=HIGH; return(~I_clock()); }
uchar I_receive(void) //接收8位数据 { uchar I_data=0; uchar i; for(i=0;i<8;i++) { I_data*=2; if(I_clock()) {I_data++;} } return(I_data); } void I_Ack(void)//应答信号 { D_SDA=LOW; I_clock(); D_SDA=HIGH; }
bit E_address(uchar WR,uint Address)//向器件写入地址和字节地址,写操作(,写器件地址,器件中地址) { I_start(); if(I_send(WR)) return (I_send(Address)); else return (FALAE); } bit E_read_block(uchar WR,uchar RD, uint Address)//读取字节(读器件地址,读器件内部地址) { uchar i; if(E_address(WR,Address)) { I_start(); if(I_send(RD)) { for(i=0;i<=8;i++) { XBYTE[ZC_AD+i]=(I_receive()); if(i!=8) { I_Ack();} else { I_clock(); I_stop(); } } return (TRUE); } else { I_stop(); return (FALAE); } } else I_stop(); return(FALAE); } bit E_write_block(uchar WR, uint Address)//将外部数据储存的暂时存储数据存储24C64中 { uchar i; for(i=0;i<=8;i++) { if(E_address(WR,Address+i)&&I_send(XBYTE[ZC_AD+i])) {I_stop(); Delay(10);} else return (FALAE); } return (TRUE); }
main() { uchar i,x_0,y_0; uchar j,z,m; uchar xdata abc[9]; z=1; m=1; I_init(); LCDInit(); LCDClear(); Y_1(); Delay(5);
for(j=0;j<8;j++) { XBYTE[ZC_AD+j]=j; /////往数据存储器中存储数据 } Delay(5); z=E_write_block(0x000); Delay(5); for(j=0;j<8;j++) { XBYTE[ZC_AD+j]=j+2; //往数据存储器中存储数据 } z=E_write_block(0x010); Delay(5); m=E_read_block(0x000); Delay(5); for(j=0;j<8;j++) { abc[j]=XBYTE[ZC_AD+j]; } Y_7(); while(1) { x_0=0; y_0=0; DisplayCN(0,32,z); DisplayCN(0,64,m); for(i=0;i<8;i++) { DisplayCN(x_0,y_0,abc); x_0=x_0+2; } } }
请教现在这个程序无法读写24C64,请教问题能出在哪里! |