- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]
文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]
IC接口的输入与输出驱动的PCF
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<<Place))
#defineCLRBIT(VAR,Place)(VAR&=((1<<Place)^255))
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_
文档评论(0)