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

📄 i2c.c

📁 PCF8583时钟芯片
💻 C
字号:
#include <REGX52.H>
#include"pr/twj.h" 

#define SDA1     P1 |= 0x04   //p1.2
#define SDA0     P1 &= 0xFb
#define SCLK1    P1 |= 0x02   //p1.1
#define SCLK0    P1 &= 0xFd
//
char houre,minute,day,month,year;
void delay(x)
{ BYTE i=0,j;
   i=x;
   i++;
   j=i;
   j++;
   i=j;
}
void I_start(void)
{
  	SDA1;
  	delay(1);
  	SCLK1;
  	delay(1);
  	SDA0;
  	delay(1);
  	SCLK0;
  	delay(1);
}

void I_stop(void)
{
  	SDA0;
  	delay(1);
  	SCLK1;
  	delay(1);
  	SDA1;
  	delay(1);
}

void I_ack(void)
{
  	SDA0;
  	delay(1);
	SCLK1;
  	delay(1);
  	SCLK0;
  	delay(1);
}

void N_ack(void)
{
  	SDA1;
  	delay(1);
  	SCLK1;
  	delay(1);
  	SCLK0;
  	delay(1);
}

void I_send(BYTE m)
{
    BYTE i=8;
    do{
    	SCLK0;
    	delay(1);
    	if((m&0x80)==0x80)
       	   	SDA1;
		else
      	  	SDA0;
    	delay(1);
	    SCLK1;
    	m=m<<1;
	    delay(1);
    	i--;
    }while(i);
    SCLK0;
}

BYTE I_receive(void)
{
    BYTE x=0,i=8;
    BYTE k;
    SDA1;
    delay(1);
    do{
    	SCLK0;
    	delay(1);
    	SCLK1;

    	SDA1;
    	delay(10);

    	k = P1;
    	if((k&0x04)==0x04)      //if(SDA==1)
    		x = x|0x01;
    	if(i>1)
    		x = x<<1;
    	i--;
    }while(i);
    SCLK0;
    return x;
}

 
/*****************************************************
	时间的读和改
******************************************************/
void time_wr(BYTE x,BYTE bData)   //  5控制寄存器
{  //WR1;RD1;
   	I_start();
   	I_send(0xA0);
   	I_ack();
   	switch(x)//x0:秒, 1分  2时  3日  4月  5年
   	{
    //case 0:I_send(0x02); break;
    case 3:I_send(0x03); break;
    case 4:I_send(0x04); break;
  
	default: 
	 	{
			I_send(x);
			break;
		}
   	}
   	I_ack();
   	I_send(bData);
   	I_ack();
   	I_stop();											  
}

 
BYTE time_rd(BYTE x)//x0:分  1时  2日  3月   4年
{
	BYTE bData;
    I_start();
    I_send(0xA0);
    I_ack();
    switch(x)
    {
//case 0:I_send(0x02);break;//x0:秒, 1分  2时  3日  4月  5年
     	case 3:I_send(0x03);break;								   
     	case 4:I_send(0x04);break;
     	
		default:
		{
			I_send(x);
			break;
		}
   	}
   	I_ack();						 
   	I_start();
  	I_send(0xA1);
   	I_ack();
    bData = I_receive();
   	N_ack();
   	I_stop();
   	return bData;
}	
 

⌨️ 快捷键说明

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