
#include unsigned char code numtab[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; uchar n_data[]={1,3,5,7,9}; /************************************************************************/ void delay(int i) { } /************************************************************************/ void iic_delay() { _nop_(); _nop_(); _nop_(); _nop_(); } /************************************************************************/ void iic_start() { SDA = 1; SCL = 1; iic_delay(); SDA = 0; iic_delay(); SCL = 0; } /************************************************************************/ void iic_stop() { SDA=0; SCL=0; iic_delay(); SCL=1; iic_delay(); SDA=1; } /************************************************************************/ /* 发送ACK信号 /************************************************************************/ void ack() { SDA=0; iic_delay(); SCL=1; iic_delay(); SCL=0; } /************************************************************************/ /* 发送NOACK信号 */ /************************************************************************/ void iic_noack() { SDA=1; iic_delay(); SCL=1; iic_delay(); SCL=0; } /******************************************************************** 等待ACK信号 ***********************************************************************/ void iic_wait_ack() { uchar tt=200; SDA=1; iic_delay(); SCL=1; iic_delay(); while(SDA && tt--){} SCL=0; } /******************************************************************** 向iic设备发送一个字节 说明:CY是溢出位 ***********************************************************************/ void iic_send_byte(uchar sbyte) { uchar i; for(i=0;i<8;i++) { } } /******************************************************************** MCU从iic设备接收一个字节 ***********************************************************************/ uchar iic_receive_byte() { uchar i; uchar ddata=0; SCL=0; iic_delay(); SDA=1; for(i=0;i<8;i++) { } SCL=0; return ddata; } /******************************************************************** 向iic设备写入N个字节 说明:write_data,写入字节的数组 Address,从address处开始写入 n,写入的字节数 ***********************************************************************/ void AT24C_W(uchar data[], uchar address, uchar n) { uchar i; 每页最多32字节 iic_start(); iic_send_byte(0xa0); 器件地址 iic_wait_ack(); iic_send_byte(address>>8); 传高8位地址 iic_wait_ack(); iic_send_byte(address & 0xff); //传低8位地址 iic_wait_ack(); for(i=0; i i]); iic_wait_ack(); } iic_stop(); } /******************************************************************** 从iic设备读取N个字节 说明:read_data ,存放字节的数组 ; address,指定从address处开始读取 num,读取的字节数 ***********************************************************************/ void AT24C_R(uchar data[], uchar address, uchar n) { uchar i; uchar *pp; 不能大于32,会从头覆盖字节 pp = data; iic_start(); iic_send_byte(0xa0); iic_wait_ack(); iic_send_byte(address>>8); iic_wait_ack(); iic_send_byte(address & 0xff); iic_wait_ack(); iic_start(); iic_send_byte(0xa1); iic_wait_ack(); for (i=0; i pp = iic_receive_byte(); pp++; i < ack(); } iic_noack(); iic_stop(); } void main() { //数码管的段位 //数码管的数据位 }
