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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}?
}
voidPCF8574_l ni t(void)
{
IC_Write_Data(OxfO);〃输入状态的必须开始的时候置为1,输出为0
}
voidma in(v oid)
{
un sig nedchartemp3;
Timer0_l ni t();
PCF8574_I ni t();
while(1)
{ຫໍສະໝຸດ Baidu
temp3=IC_Read_Data();
IC_Write_Data(OxOf);
Delay();
;中间可以添加你需要的模块,比如显示或者其他的操作等
中断服务子程序
*******************************************************
externvoidexternalO_rt(void)i nterruptO//INTO
exter nv oideitO_rt(void)i nterrupt1//TO
THO=Ox1e;
{
}
voideit1_rt(void)i nterrupt3usi ng1//T1,标准
voidsci_rt(void)i nterrupt4usi ng1//UART
I2C
pcf8574采用I2C接口,有8个准双向口,可以和外部电路连接,来实现输入
输出功能,可以用来对口线进行扩展
有几点需要注意
1•某位作为输入的时候,必须首先置为高电平
2.地址是0100A2A1A0R/W
3.最多可以扩展8片
4•低电流损耗,静态电流10uA,驱动电流比较大,而且有索存功能,能够驱动LED发光管
IC_Receive_Ack();?
IC_Stop();
if(IC_Err_Flag==0)
break;
}?
}
un sig nedcharlC_Read_Data(void)
{
un sig nedcharReturn_Data;
un sig nedcharread_time;
for(read_time=0;read_time<=2;read_time++)
if(IC_SDA==O)
{
IC_Err_Flag=1;
}
}
IC_SCL=O;
Delay();
}
〃voidlC_Send_ACK(void)〃发送ACK
//{//ifreadma ny datasatatime,thisca nbeused
〃IC_SDA=O;
〃Delay();
〃IC_SCL=1;
〃Delay();
{?
IC_Start();
IC_Write_Byte(0x41);?
IC_Receive_Ack();?
Return_Data=IC_Read_Byte();?
IC_Se nd_NAck();
IC_Stop();?
if(IC_Err_Flag==0)
{
return(Return_Data);
break;
un sig nedcharwrite_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);
voidlC_Start(void)〃启动IC通信
{?
IC_SDA=1;
}
voidlC_Stop(void)〃停止IC通信
{
}
voidlC_Receive_Ack(void)〃接受ACK
{?
IC_SDA=1;
IC_SCL=1;
?
Delay();?
IC_Re_Time=O;?while(IC_Re_Time<=30) {
{
if(VALBIT(Data,(7-i)))//dataoutmsb
IC_SDA=1;
else
IC_SDA=0;
IC_SCL=1;
Delay();
IC_SCL=0;
}
unsignedcharlC_Read_Byte(void)〃从8574读取一个数据
un sig nedchari;
un sig nedcharData;
〃IC_SCL=O;
〃Delay();
〃IC_SDA=1;
//}
voidlC_Send_NAck(void)〃发送NACK
Delay();
}
voidlC_Write_Byte(unsignedcharData)//写数据到8574
{
un sig nedchari;?
for(i=0;i<=7;i++)
sbitIC_SDA=P3A7;
un sig nedcharlC_Re_Time;
un sig nedcharlC_Err_Flag; voidTimerO」nit(void)
{
TMOD=OxOO;信方式:I2C
2.通信端口:IC_SCL,IC_SDA
3.通信地址:0x0101000x?
*********************************************
for(i=0;i<=7;i++)
SETBIT(Data,(7-i));//datai nm sbtoo else
CLRBIT(Data,(7-i));
IC_SCL=0;
Delay();
}
return(Data);
}
voidlC_Write_Data(u nsig nedcharData)
{
un sig nedcharwrite_time;
5.带有外部中断输出,低电平有效
我作了一个电路,其中P7-P4作为输入检测开关状态,P3-P0作为输出来驱动
LED灯
程序如下
#i nclude""
#defi neSETBIT(VAR,Place)(VAR|=(1<<Place))
#defi neCLRBIT(VAR,Place)(VAR&=((1<<PlaceF255)) sbitlC_SCL=P3W;
相关文档
最新文档