📄 8574.c.bak
字号:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P1^0; //模拟I2C 数据传送位
sbit SCL=P1^1; //D釯2C 时钟控制状态标志
sbit DIR17=P1^7;//74HC245输入输出控制 0:A=B 1:B=A
uchar slvadr ; //被控器地址
uchar str[14]={0x01,0x03,0x07,0x0F,0x1F,0x3F,0x7F,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x03};//要显示的内容
void delay1ms(uchar x)
{
unsigned char i,j;
while(x--)
{
for(i=5;i>0;i--)
for(j=132;j>0;j--);
}
}
/*---------------------------------------------------------------------------------------------------
开始:START
描述:启动I2C 总线子程序--发送I2C 起始条件
---------------------------------------------------------------------------------------------------*/
void start(void)
{
SDA=1;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}
/*---------------------------------------------------------------------------------------------------
名称:STOP
描述:停止I2C 总线子程序--发送I2C 总线停止条件
---------------------------------------------------------------------------------------------------*/
void stop(void)
{
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
}
/**************************************************************************************************
名称:SentByte
描述:字节数据传送子程序发送一个字节数据或地址给被控器PCF8574
**************************************************************************************************/
void sentbyte(uchar sentd)
{
uchar i;
for(i=0;i<8;i++) //要传送的数据长度为8 位
{
sentd<<=1; //要发送的数据左移
SDA=CY;
_nop_();
_nop_();
SCL=1; //置时钟线为高通知被控器开始接收数据位
_nop_(); //保证时钟高周期大于4 us
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0; //钳住总线准备接收下一个数据位
}
_nop_();
_nop_();
SDA=1; //8 位发送完后释放数据线准备收应答位
_nop_();
_nop_();
SCL=1; //开始接收应答信号
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); //判断是否接收到应答信号正常转AckEnd
_nop_();
SCL=0; //发送结束钳住总线准备下一步发送或接收数据或进行其它处理
}
/**************************************************************************************************
发送数据程序
名称:SendData
描述:发送1个字节数据给PCF8574
*************************************************************************************************/
void senddata(uchar *ucI)
{
uchar datauci=0;
start();
sentbyte(slvadr);
datauci=*ucI;
sentbyte(datauci);
stop();
delay1ms(10);
}
/*************************************************************************************
地址为addr PCF8574 作为准双向口输出
**************************************************************************************/
void output_control(uchar addr, uchar *outdata)
{
slvadr=addr;
senddata(outdata);
}
/*************************************************************************************
主程序
**************************************************************************************/
void main()
{
uchar *p;
DIR17=0;
while(1)
{
for(p=str;p<(str+14);p++)
{
output_control(0x42,p);
delay1ms(70);
}
}
}
void I2C0_ISR(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -