I2C接口的输入与输出驱动的.docx

上传人:b****8 文档编号:10587026 上传时间:2023-02-21 格式:DOCX 页数:9 大小:15.28KB
下载 相关 举报
I2C接口的输入与输出驱动的.docx_第1页
第1页 / 共9页
I2C接口的输入与输出驱动的.docx_第2页
第2页 / 共9页
I2C接口的输入与输出驱动的.docx_第3页
第3页 / 共9页
I2C接口的输入与输出驱动的.docx_第4页
第4页 / 共9页
I2C接口的输入与输出驱动的.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

I2C接口的输入与输出驱动的.docx

《I2C接口的输入与输出驱动的.docx》由会员分享,可在线阅读,更多相关《I2C接口的输入与输出驱动的.docx(9页珍藏版)》请在冰豆网上搜索。

I2C接口的输入与输出驱动的.docx

I2C接口的输入与输出驱动的

I2C接口的输入与输出驱动的PCF8574-

pcf8574采用I2C接口,有8个准双向口,可以和外部电路连接,来实现输入输出功能,可以用来对口线进行扩展

有几点需要注意

1.某位作为输入的时候,必须首先置为高电平

2.地址是0100A2A1A0R/W

3.最多可以扩展8片

4.低电流损耗,静态电流10uA,驱动电流比较大,而且有索存功能,能够驱动LED发光管

5.带有外部中断输出,低电平有效

我作了一个电路,其中P7-P4作为输入检测开关状态,P3-P0作为输出来驱动LED灯

程序如下

#include""

#defineSETBIT(VAR,Place)(VAR|=(1<

#defineCLRBIT(VAR,Place)(VAR&=((1<

sbitIC_SCL=P3^6;

sbitIC_SDA=P3^7;

unsignedcharIC_Re_Time;

unsignedcharIC_Err_Flag;

voidTimer0_Init(void)

{

TMOD=0x00;信方式:

I2C

2.通信端口:

IC_SCL,IC_SDA

3.通信地址:

0x0101000x?

***********************************************/?

voidIC_Start(void)//启动IC通信

{?

IC_SDA=1;

Delay();

IC_SCL=1;

Delay();

IC_SDA=0;

Delay();

IC_SCL=0;

Delay();?

}

voidIC_Stop(void)//停止IC通信

{

IC_SDA=0;

Delay();

IC_SCL=1;

Delay();

IC_SDA=1;

Delay();?

}

voidIC_Receive_Ack(void)//接受ACK

{?

IC_SDA=1;

IC_SCL=1;?

Delay();?

IC_Re_Time=0;?

while(IC_Re_Time<=30)

{

if(IC_SDA==0)

{

IC_Err_Flag=0;

break;

}?

else

{

IC_Err_Flag=1;

}

}

IC_SCL=0;

Delay();

}

//voidIC_Send_ACK(void)//发送ACK

//{//ifreadmanydatasatatime,thiscanbeused

//IC_SDA=0;

//Delay();

//IC_SCL=1;

//Delay();

//IC_SCL=0;

//Delay();

//IC_SDA=1;

//}

voidIC_Send_NAck(void)//发送NACK

{

IC_SDA=1;

Delay();

IC_SCL=1;

Delay();

IC_SCL=0;

Delay();

}

voidIC_Write_Byte(unsignedcharData)//写数据到8574

{

unsignedchari;?

for(i=0;i<=7;i++)

{

if(VALBIT(Data,(7-i)))//dataoutmsb

IC_SDA=1;

else

IC_SDA=0;

IC_SCL=1;

Delay();

IC_SCL=0;

Delay();?

}?

}

unsignedcharIC_Read_Byte(void)//从8574读取一个数据

{

unsignedchari;

unsignedcharData;

for(i=0;i<=7;i++)

{

IC_SCL=1;

Delay();

IC_SDA=1;

Delay();?

if(IC_SDA)

SETBIT(Data,(7-i));//datainmsbtoo

else

CLRBIT(Data,(7-i));

IC_SCL=0;

Delay();

}

return(Data);

}

voidIC_Write_Data(unsignedcharData)

{

unsignedcharwrite_time;

unsignedcharwrite_data;

write_data=Data;

for(write_time=0;write_time<=2;write_time++)

{?

IC_Start();

IC_Write_Byte(0x40);

IC_Receive_Ack();

IC_Write_Byte(write_data);

IC_Receive_Ack();?

IC_Stop();

if(IC_Err_Flag==0)

break;

}?

}

unsignedcharIC_Read_Data(void)

{

unsignedcharReturn_Data;

unsignedcharread_time;

for(read_time=0;read_time<=2;read_time++)

{?

IC_Start();

IC_Write_Byte(0x41);?

IC_Receive_Ack();?

Return_Data=IC_Read_Byte();?

IC_Send_NAck();

IC_Stop();?

if(IC_Err_Flag==0)

{

return(Return_Data);

break;

}

}?

}

voidPCF8574_Init(void)

{

IC_Write_Data(0xf0);//输入状态的必须开始的时候置为1,输出为0

}

voidmain(void)

{

unsignedchartemp3;

Timer0_Init();

PCF8574_Init();

while

(1)

{

temp3=IC_Read_Data();

IC_Write_Data(0x0f);

Delay();

;中间可以添加你需要的模块,比如显示或者其他的操作等

}

}

/*********************************************************

*中断服务子程序*

*********************************************************/

externvoidexternal0_rt(void)interrupt0//INT0

{

}

externvoideit0_rt(void)interrupt1//T0,标准,定时中断

{

TH0=0x1e;

TL0=0x0c;

IC_Re_Time++;?

}

voidexternal1_rt(void)interrupt2using1//INT1

{

}

voideit1_rt(void)interrupt3using1//T1,标准

{

}

voidsci_rt(void)interrupt4using1//UART

{

}

voideit2_rt(void)interrupt5using1//T23种工作模式,输入捕捉、自动重载和波形发生器

{

}

voidPCA_rt(void)interrupt6using1//PCA

{

}

voidKBDIT_rt(void)interrupt7using1//keyboard

{

}

voidspi_rt(void)interrupt9using1//SPI

{

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1