⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i2c.c

📁 attendace system on 8051 chipset from intel.
💻 C
字号:
/**********************************JBB**************************************/

#include <i2c.h>

sbit SCL = 0x90;
sbit SDA = 0x91;

void i2cdelay(unsigned char dy1)
{
        unsigned char dy2;
        while(dy1>0)
        {
                for (dy2=0;dy2<=40;dy2++);dy1--;
        }
}               

void writetoi2c(unsigned char into)
{
        //OK.
        unsigned char var  = 0;
        unsigned char mask = 0x80;

        while(var <= 7)
        {
                SCL = 0;
                i2cdelay(I2C_DELAY);
                if((mask & into) == 0)
                {
                        SDA = 0;
                }
                else
                {
                        SDA = 1;
                }
                i2cdelay(I2C_DELAY);
                SCL = 1;
                i2cdelay(I2C_DELAY);
                mask >>= 1;
                var++;
        }//ENDWHILE(VAR <= 7).
}

char i2cgetc(unsigned char device,unsigned char loc)
{
        //OK.
        unsigned char check;
        char fetch = 0x00;
        unsigned char value;
        unsigned char counter;
        
        SDA = 1;
        SCL = 1;
        i2cdelay(I2C_DELAY);
        SDA = 0;

        writetoi2c(WRITE | device);

        SCL = 0;
        i2cdelay(I2C_DELAY);
        check = SDA;
        SCL = 1;
        i2cdelay(I2C_DELAY);

        if(check == 0)
        {
                writetoi2c(loc);
                SCL = 0;
                i2cdelay(I2C_DELAY);
                check = SDA;
                SCL = 1;
                i2cdelay(I2C_DELAY);
                if(check == 0)
                {
                        SCL = 0;
                        i2cdelay(I2C_DELAY);
                        SDA = 1;
                        i2cdelay(I2C_DELAY);
                        SCL = 1;
                        i2cdelay(I2C_DELAY);
                        SDA = 0;

                        writetoi2c(READ | device);

                        SCL = 0;
                        i2cdelay(I2C_DELAY);
                        check = SDA;
                        SCL = 1;
                        i2cdelay(I2C_DELAY);
                        if(check == 0)
                        {
                                counter = 0;
                                value = 0x00;
                                while(counter <= 7)
                                {
                                        SCL = 0;
                                        i2cdelay(I2C_DELAY);
                                        value = value | (char)SDA;
                                        i2cdelay(I2C_DELAY);
                                        SCL = 1;
                                        i2cdelay(I2C_DELAY);
                                        if(counter < 7)
                                        value <<= 1;
                                        counter++;
                                }
                                fetch = value;
                                SCL = 0;
                                i2cdelay(I2C_DELAY);
                                SDA = 0;
                                i2cdelay(I2C_DELAY);
                                SCL = 1;
                                i2cdelay(I2C_DELAY);
                                SDA = 1;
                                i2cdelay(I2C_DELAY);
                                return fetch;
                        }//ENDIF(CHECK==0).
                }//ENDIF(CHECK==0).
        }//ENDIF(CHECK==).
}

void i2cputc(unsigned char device,unsigned char addr,unsigned char dat)
{       
        //OK.
        unsigned char check;

        SDA = 1;
        SCL = 1;
        i2cdelay(I2C_DELAY);
        SDA = 0;

        writetoi2c(WRITE | device);

        SCL = 0;
        i2cdelay(I2C_DELAY);
        check = SDA;
        SCL = 1;
        i2cdelay(I2C_DELAY);
        if(check == 0)
        {
                writetoi2c(addr);
                SCL = 0;
                i2cdelay(I2C_DELAY);
                check = SDA;
                SCL = 1;
                i2cdelay(I2C_DELAY);
                if(check == 0)
                {
                        writetoi2c(dat);
                        SCL = 0;
                        i2cdelay(I2C_DELAY);
                        check = SDA;
                        SCL = 1;
                        i2cdelay(I2C_DELAY);
                        if(check == 0)
                        {
                                SCL = 0;
                                i2cdelay(I2C_DELAY);
                                SDA = 0;
                                i2cdelay(I2C_DELAY);
                                SCL = 1;
                                i2cdelay(I2C_DELAY);
                                SDA = 1;
                                i2cdelay(I2C_DELAY);
                        }//ENDIF(CHECK==0).
                }//ENDIF(CHECK==0).
        }//ENDIF(CHECK==0).
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -