⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pc3f8563.c

📁 单片机I2C协议代码
💻 C
字号:
#include<reg51.h>
#include<stdlib.h>
#define byte unsigned char

sbit scl=0x81; 					//定义串行I/O口
sbit sda=0x80;
idata byte rom_sed[9];
idata byte rom_rec[7];
idata byte j,k;
bit flag,flag1;

void delay(void) 						//延时子程序
{
data byte i;
for(i=0;i<6;i++);
}

void I_start(void) 				//发送I2C总线起始条件子程序
{
sda=1;
;
scl=1;
delay();
sda=0;
delay();
scl=0;
;
}

void I_stop(void) 				//I2C总线停止条件子程序
{
sda=0;
;
scl=1;
delay();
sda=1;
delay();
}

bit I_send(byte I_data) 			//字节数据传送子程序
{
data byte i;
for(i=0;i<8;i++)
{
sda=(bit)(I_data&0x80);
I_data=I_data<<1;
;
scl=1;
delay();
scl=0;
}
;
;
sda=1;
;
;							//准备接收ACK位
scl=1;
;
;							//开始接收ack位
flag=0;
if(sda==0)flag=0;
else flag=1; 					//返回(~I_clock());
scl=0;
return(flag);
}

byte I_receive(void) 				//字节数据接收子程序
{
data byte i;
byte I_data=0;
sda=1;
for(i=0;i<8;i++)
{
I_data*=2;
;
scl=0;
delay();
scl=1; 
;
;
if(sda==1)I_data++;
;
;
}
scl=0; 
;
;
;
sda=0;
if(flag1==0) 					//不是最后一个ACK
{
;
;
scl=1;
delay();
scl=0;
}
else						//是最后一个ACK
{
sda=1; 
;
;
scl=1;
delay();
scl=0;
flag1=0;
}
return(I_data);
}

void main() 					//主程序
{
data byte i;
rom_sed[0]=0x00; rom_sed[1]=0x00;
rom_sed[2]=0x00; rom_sed[3]=0x55;
rom_sed[4]=0x23; rom_sed[5]=0x31;
rom_sed[6]=0x06; rom_sed[7]=0x92;
rom_sed[8]=0x99;
for(i=0;i<255;i++)delay();
I_start();
if(~I_send(0xa2)) 				//pcf_write地址
{
if(~I_send(0x02)) 			//pcf_status寄存器地址
{
for(i=0;i<9;i++)
{
if(~I_send(rom_sed[i]));
else;
}
I_stop();
}
else;
}
else;

start: I_start();
if(~I_send(0xa2)) 				// pcf_write地址
{
if(~I_send(0x02)) 			// pcf_status寄存器地址
{
I_start();
if(~I_send(0xa3)) 			//写状态寄存器
{
for(i=0;i<7;i++)
{
if(i==6)
flag1=1;
else
flag1=0;
rom_rec[i]=I_receive();
switch(i)
{
case 1:rom_rec[i]=rom_rec[i]&0x7f;break;
case 2:
case 3:rom_rec[i]=rom_rec[i]&0x3f;break;
case 4:rom_rec[i]=rom_rec[i]&0x07;break;
case 5:rom_rec[i]=rom_rec[i]&0x9f;break;
default:break;
}
}
I_stop();
}
}
}
goto start;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -