找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2951|回復(fù): 13
收起左側(cè)

51單片機普通io口如何模擬轉(zhuǎn)換為iic接口?

  [復(fù)制鏈接]
ID:839796 發(fā)表于 2020-12-14 01:12 來自手機 | 顯示全部樓層 |閱讀模式
大佬們,幫幫忙,需要將兩個普通io接口模擬成兩個iic接口,用來進行1602液晶屏的讀寫操作
回復(fù)

使用道具 舉報

ID:716656 發(fā)表于 2020-12-14 07:40 來自手機 | 顯示全部樓層
百度一份,改下sbit
回復(fù)

使用道具 舉報

ID:592807 發(fā)表于 2020-12-14 09:11 | 顯示全部樓層
現(xiàn)在網(wǎng)上搜IIC程序基本都是普通IO口模擬的。

stm32任意引腳模擬IIC.rar

2.6 KB, 下載次數(shù): 11

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:673961 發(fā)表于 2020-12-14 09:49 來自手機 | 顯示全部樓層
之前百度上看到過
回復(fù)

使用道具 舉報

ID:277550 發(fā)表于 2020-12-14 09:54 | 顯示全部樓層
向買iic屏的商家要一份
回復(fù)

使用道具 舉報

ID:860010 發(fā)表于 2020-12-14 11:06 | 顯示全部樓層
上網(wǎng)隨便抄一個I2C單片機驅(qū)動就可以了
回復(fù)

使用道具 舉報

ID:307020 發(fā)表于 2020-12-14 12:09 | 顯示全部樓層
請在論壇中找PCF8547模塊的相關(guān)內(nèi)容。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:517951 發(fā)表于 2020-12-14 19:49 | 顯示全部樓層
用51單片機的IO腳模擬I2C的例程可以可以在51黑論壇里找電子萬年歷的例程:用DS1302等串口的時鐘芯片

void write_byte(uchar dat)
{
        ACC=dat;
        RST=1;
        for(a=8;a>0;a--)
        {
                IO=ACC0;
                SCLK=0;
                SCLK=1;
                ACC=ACC>>1;
        }
}
uchar read_byte()
{
        RST=1;
        for(a=8;a>0;a--)
        {
                ACC7=IO;
                SCLK=1;
                SCLK=0;
                ACC=ACC>>1;

        }
        return (ACC);
}
----------------------------------------
void write_1302(uchar add,uchar dat)
{

        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        write_byte(dat);
        SCLK=1;
        RST=0;
}
uchar read_1302(uchar add)
{
        uchar temp;
        RST=0;
        SCLK=0;
        RST=1;
        write_byte(add);
        temp=read_byte();
        SCLK=1;
        RST=0;
        return(temp);
}

void ds1302_init()
{
RST=0;
SCLK=0;

write_1302(0x8e,0x00);
//write_1302(0x80,0x00);
//write_1302(0x82,0x00);
//write_1302(0x84,0x12);
//write_1302(0x8a,0x04);
//write_1302(0x86,0x07);
//write_1302(0x88,0x01);
//write_1302(0x8c,0x10);
write_1302(0x8e,0x80);
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2020-12-14 21:54 | 顯示全部樓層
現(xiàn)在STC出的很多系列的單片機都是自帶IIC端口的,如果你不會IIC就直接用IIC端口就可以了
不然就去百度一下IIC協(xié)議看一下,或者是參考一下24C01的程序
IIC是相對簡單的一個協(xié)議的,看個兩三天就差不多了

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:839796 發(fā)表于 2020-12-16 01:39 來自手機 | 顯示全部樓層
黃youhui 發(fā)表于 2020-12-14 09:11
現(xiàn)在網(wǎng)上搜IIC程序基本都是普通IO口模擬的。

好的,謝謝
回復(fù)

使用道具 舉報

ID:839796 發(fā)表于 2020-12-16 01:39 來自手機 | 顯示全部樓層
rayin 發(fā)表于 2020-12-14 19:49
用51單片機的IO腳模擬I2C的例程可以可以在51黑論壇里找電子萬年歷的例程:用DS1302等串口的時鐘芯片

voi ...

好的,謝謝
回復(fù)

使用道具 舉報

ID:839796 發(fā)表于 2020-12-16 01:40 來自手機 | 顯示全部樓層
Y_G_G 發(fā)表于 2020-12-14 21:54
現(xiàn)在STC出的很多系列的單片機都是自帶IIC端口的,如果你不會IIC就直接用IIC端口就可以了
不然就去百度一下I ...

好的,謝謝
回復(fù)

使用道具 舉報

ID:280000 發(fā)表于 2020-12-31 14:58 | 顯示全部樓層
需要在程序中設(shè)置的軟IIC接口
回復(fù)

使用道具 舉報

ID:390416 發(fā)表于 2020-12-31 15:02 | 顯示全部樓層
void IIC_Delay()
{
        _nop_();_nop_();_nop_();_nop_();_nop_();
}

void IIC_Init()
{
        P2M0&=0x3f;
        P2M1&=0x3f;
        SDA_GPIO=1;
        SCL_GPIO=1;
}

void IIC_Start()//IIC啟動信號
{
        SDA_GPIO=1;
        SCL_GPIO=1;
        IIC_Delay();
        SDA_GPIO=0;
        IIC_Delay();
        SCL_GPIO=0;
        IIC_Delay();
}

void IIC_Stop()//IIC停止信號
{
        SDA_GPIO=0;
        SCL_GPIO=1;
        

        SDA_GPIO=1;
        IIC_Delay();
}

void IIC_Write_Byte(u8 IIC_Byte)//向總線發(fā)送一個字節(jié)
{
        u8 i;
        SCL_GPIO=0;
        SDA_GPIO=1;
        for(i=0;i<8;i++)
        {
                SDA_GPIO=(bit)(IIC_Byte&0x80);
                IIC_Byte<<=1;
                IIC_Delay();
                SCL_GPIO=1;
                IIC_Delay();
                SCL_GPIO=0;
                IIC_Delay();
        }
}

u8 IIC_Read_Byte()
{
        u8 i,Value;
        SCL_GPIO=0;
        SDA_GPIO=1;
        for(i=0;i<8;i++)
        {
                Value=(Value<<1)|SDA_GPIO;
                IIC_Delay();
                SCL_GPIO=1;
                IIC_Delay();
                SCL_GPIO=0;
                IIC_Delay();
        }
        return Value;
}

u8 IIC_Read_Ack()//單片機檢測IIC從機發(fā)來的應(yīng)答信號
{
        u8 ack=1,i=0;
        SCL_GPIO=1;
        IIC_Delay();
        while((ack)&&(i<5))
        {
                ack=SDA_GPIO;
                i++;
        }
        SCL_GPIO=0;
        return ack;
}

void IIC_Write_Ack(bit ack)//單片機發(fā)送應(yīng)答給從機
{
        SDA_GPIO=ack;
        IIC_Delay();
        SCL_GPIO=1;
        IIC_Delay();
        SCL_GPIO=0;
        IIC_Delay();
        SDA_GPIO=1;
        IIC_Delay();
}

IIC代碼 用我這個
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表