?? 8574.c.bak
字號:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA=P1^0; //模擬I2C 數(shù)據(jù)傳送位
sbit SCL=P1^1; //D釯2C 時鐘控制狀態(tài)標(biāo)志
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};//要顯示的內(nèi)容
void delay1ms(uchar x)
{
unsigned char i,j;
while(x--)
{
for(i=5;i>0;i--)
for(j=132;j>0;j--);
}
}
/*---------------------------------------------------------------------------------------------------
開始:START
描述:啟動I2C 總線子程序--發(fā)送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 總線子程序--發(fā)送I2C 總線停止條件
---------------------------------------------------------------------------------------------------*/
void stop(void)
{
SDA=0;
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
}
/**************************************************************************************************
名稱:SentByte
描述:字節(jié)數(shù)據(jù)傳送子程序發(fā)送一個字節(jié)數(shù)據(jù)或地址給被控器PCF8574
**************************************************************************************************/
void sentbyte(uchar sentd)
{
uchar i;
for(i=0;i<8;i++) //要傳送的數(shù)據(jù)長度為8 位
{
sentd<<=1; //要發(fā)送的數(shù)據(jù)左移
SDA=CY;
_nop_();
_nop_();
SCL=1; //置時鐘線為高通知被控器開始接收數(shù)據(jù)位
_nop_(); //保證時鐘高周期大于4 us
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0; //鉗住總線準(zhǔn)備接收下一個數(shù)據(jù)位
}
_nop_();
_nop_();
SDA=1; //8 位發(fā)送完后釋放數(shù)據(jù)線準(zhǔn)備收應(yīng)答位
_nop_();
_nop_();
SCL=1; //開始接收應(yīng)答信號
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); //判斷是否接收到應(yīng)答信號正常轉(zhuǎn)AckEnd
_nop_();
SCL=0; //發(fā)送結(jié)束鉗住總線準(zhǔn)備下一步發(fā)送或接收數(shù)據(jù)或進(jìn)行其它處理
}
/**************************************************************************************************
發(fā)送數(shù)據(jù)程序
名稱:SendData
描述:發(fā)送1個字節(jié)數(shù)據(jù)給PCF8574
*************************************************************************************************/
void senddata(uchar *ucI)
{
uchar datauci=0;
start();
sentbyte(slvadr);
datauci=*ucI;
sentbyte(datauci);
stop();
delay1ms(10);
}
/*************************************************************************************
地址為addr PCF8574 作為準(zhǔn)雙向口輸出
**************************************************************************************/
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)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -