I2C总线读写程序通用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//==========================头文件加载===============================
#include
//===========================端口声明================================
sbit CLK=P3^6; //74hc574时钟信号线
sbit G=P2^4; //74hc574使能
sbit IIC_SDA=P2^6; //声明IIC总线的数据线接在单片机的P2.5端口。
sbit IIC_SCL=P2^5; //声明IIC总线的时钟线接在单片机的P2.7端口。
unsigned char tabl[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x0BF,0x8C};
//0,1,2,3,4,5,6,7,8,9,-,P
//===========================函数声明================================
void display(unsigned char aa);
void delay(unsigned int t);
void delay_IIC(void);
void IIC_Init(void);
void IIC_start(void);
void IIC_stop(void);
bit IIC_Tack(void);
void IIC_single_byte_write(unsigned char Daddr,unsigned char Waddr,unsigned char Data);
unsigned char IIC_single_byte_read(unsigned char Daddr,unsigned char Waddr); void IIC_write_byte(unsigned char Data);
unsigned char IIC_read_byte(void);
//============================主函数=================================
void main() //主函数
{
unsigned char Data=2,addr=0x01;
//---------------------------系统初始化--------------------------
IIC_Init();//初始化IIC总线。
//P1=0x7f;//LED8先亮。
while(1) //死循环
{
IIC_single_byte_write(0xa0,0x02,Data);//保存LED的状态
delay(50000);//延时约0.5S
Data=IIC_single_byte_read(0xa0,0x02);//读出LED的状态
if(Data<10)
Data++;
else
Data=0;
display(Data);
delay(50000);//延时约0.5S
}
}
//==========================功能子函数=============================== void delay(unsigned int t)
{//延时函数
while(t){t--;}; //延时循环计数
}
//-------------------------------------------------------------------void delay_IIC(void)
{//IIC总线限速延时函数。
//该函数是空函数,延时4个机器周期。
;;
}
//-------------------------------------------------------------------void IIC_Init(void)
{//IIC总线初始化函数
IIC_SDA=1;//释放IIC总线的数据线。
IIC_SCL=1;//释放IIC总线的时钟线。
}
//-------------------------------------------------------------------void IIC_start(void)
{//IIC总线产生起始信号函数
IIC_SDA=1;//拉高数据线
IIC_SCL=1;//拉高时钟线
delay_IIC();
IIC_SDA=0;//在时钟线为高电平时,拉低数据线,产生起始信号。
delay_IIC();
IIC_SCL=0;//拉低时钟线
}
//-------------------------------------------------------------------void IIC_stop(void)
{//IIC总线产生停止信号函数
IIC_SDA=0;//拉低数据线
delay_IIC();
IIC_SCL=1;//拉高时钟线。
delay_IIC();
IIC_SDA=1;//时钟时线为高电平时,拉高数据线,产生停止信号。
delay_IIC();
}
//-------------------------------------------------------------------bit IIC_Tack(void)