IC接口的输入与输出驱动的PCFWord文档下载推荐.docx
《IC接口的输入与输出驱动的PCFWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《IC接口的输入与输出驱动的PCFWord文档下载推荐.docx(7页珍藏版)》请在冰豆网上搜索。
![IC接口的输入与输出驱动的PCFWord文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/1/d0be964a-e80a-43bd-8c7d-260bfc2b1ec1/d0be964a-e80a-43bd-8c7d-260bfc2b1ec11.gif)
我作了一个电路,其中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;
IC_SDA=0;
IC_SCL=0;
}
voidIC_Stop(void)//停止IC通信
voidIC_Receive_Ack(void)//接受ACK
IC_Re_Time=0;
while(IC_Re_Time<
=30)
if(IC_SDA==0)
IC_Err_Flag=0;
break;
else
IC_Err_Flag=1;
//voidIC_Send_ACK(void)//发送ACK
//{//ifreadmanydatasatatime,thiscanbeused
//IC_SDA=0;
//Delay();
//IC_SCL=1;
//IC_SCL=0;
//IC_SDA=1;
//}
voidIC_Send_NAck(void)//发送NACK
voidIC_Write_Byte(unsignedcharData)//写数据到8574
unsignedchari;
for(i=0;
i<
=7;
i++)
if(VALBIT(Data,(7-i)))//dataoutmsb
unsignedcharIC_Read_Byte(void)//从8574读取一个数据
unsignedcharData;
if(IC_SDA)
SETBIT(Data,(7-i));
//datainmsbtoo
CLRBIT(Data,(7-i));
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_Stop();
if(IC_Err_Flag==0)
unsignedcharIC_Read_Data(void)
unsignedcharReturn_Data;
unsignedcharread_time;
for(read_time=0;
read_time<
read_time++)
IC_Write_Byte(0x41);
Return_Data=IC_Read_Byte();
IC_Send_NAck();
return(Return_Data);
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);
;
中间可以添加你需要的模块,比如显示或者其他的操作等
/*********************************************************
*中断服务子程序*
*********************************************************/
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