IC接口的输入与输出驱动的PCF.docx
- 文档编号:4482757
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:7
- 大小:15.43KB
IC接口的输入与输出驱动的PCF.docx
《IC接口的输入与输出驱动的PCF.docx》由会员分享,可在线阅读,更多相关《IC接口的输入与输出驱动的PCF.docx(7页珍藏版)》请在冰豆网上搜索。
IC接口的输入与输出驱动的PCF
文件排版存档编号:
[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< #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 { }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- IC 接口 输入 输出 驱动 PCF
![提示](https://static.bdocx.com/images/bang_tan.gif)