I2C接口的输入与输出驱动的PCF8574.docx
- 文档编号:14105037
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:13
- 大小:80.30KB
I2C接口的输入与输出驱动的PCF8574.docx
《I2C接口的输入与输出驱动的PCF8574.docx》由会员分享,可在线阅读,更多相关《I2C接口的输入与输出驱动的PCF8574.docx(13页珍藏版)》请在冰点文库上搜索。
I2C接口的输入与输出驱动的PCF8574
I2C接口的输入与输出驱动的PCF8574
pcf8574采用I2C接口,有8个准双向口,可以和外部电路连接,来实现输入
输出功能,可以用来对口线进行扩展
有几点需要注意
1•某位作为输入的时候,必须首先置为高电平
2.地址是0100A2A1A0R/W
3.最多可以扩展8片
4•低电流损耗,静态电流10uA,驱动电流比较大,而且有索存功能,能够驱动LED发光管
5.带有外部中断输出,低电平有效
我作了一个电路,其中P7-P4作为输入检测开关状态,P3-P0作为输出来驱动
LED灯
......范文范例学习参考指导.......
程序如下
#include"reg51.h"
#defineSETBIT(VAR,Place)(VAR|=(1< #defineCLRBIT(VAR,Place)(VAR&=((1< sbitIC_SCL=P3A6; sbitIC_SDA=P3A7; unsignedcharIC_Re_Time; unsignedcharIC_Err_Flag; voidTimerO」nit(void) { TMOD=OxOO;//timerO工作定时器方式0,13位技术 TH0=0x1e;//5ms TLO=OxOc;//5ms TRO=1;//启动时钟O ETO=1;//允许时钟O进行中断 EA=1;//开放所有中断 } voidDelay(void) { ……范文范例学习参考指导.…… unsignedchari; for(i=0;i<=10;i++) { J } } unsignedcharVALBIT(unsignedintVal,unsignedcharBit) { unsignedintBuf; Buf=0x0001; if(Bit) Buf<<=Bit; Val&=Buf; if(Val) return(0xff); else return(0x00); } /********************************************** 下面是PCF8574的操作程序 1.通信方式: I2C 2.通信端口: IC_SCL(P3.6),IC_SDA(P3.7) ……范文范例学习参考指导.…… 3.通信地址: 0x0101000x ********************************************* voidIC_Start(void)//启动IC通信 { } voidIC_Stop(void)//停止IC通信 { } voidIC_Receive_Ack(void)//接受ACK { IC_SDA=1; IC_SCL=1; Delay(); IC_Re_Time=O; while(IC_Re_Time<=30) { } IC_SCL=0; Delay(); } word...专业技术行业资料 //voidIC_Send_ACK(void)//发送ACK //{//ifreadmanydatasatatime,thiscanbeused //IC_SDA=0; //Delay(); //IC_SCL=1; //Delay(); //IC_SCL=0; //Delay(); //IC_SDA=1; //} } //发送NACK 写数据到8574 idIC_Write_Byte(unsignedcharData)// { 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); word...专业技术行业资料 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」nit(void) { IC_Write_Data(OxfO);//输入状态的必须开始的时候置为1,输出为0 } voidmain(void) { unsignedchartemp3; Timer。 」nit(); PCF8574_Init(); while (1) { temp3=IC_Read_Data(); IC_Write_Data(OxOf); Delay(); ;中间可以添加你需要的模块,比如显示或者其他的操作等 } } /********************************************************* *中断服务子程序* *********************************************************/ externvoidexternalO_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 { word...专业技术行业资料 } } voidPCA_rt(void)interrupt6using1//PCA { } voidKBDIT_rt(void)interrupt7using〔//keyboard { } voidspi_rt(void)interrupt9using1//SPI { }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- I2C 接口 输入 输出 驱动 PCF8574