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

📄 lib.c

📁 我个人编写的车载dvd上的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*********************************************************
	Project:		ST FST(TDA7540)
	File name:	Lib.c
	Description:	
	Write/Modify:	Perry
	Time:		2005-11-22- 11:07:07
*********************************************************/

#include "public.h"

/*********************************************
	Function:		I2CStart
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 12:14:50
*********************************************/

void I2CStart(void)
{
	PD_SW_I2CClk=1;
	PD_SW_I2CData=1;
	Pin_SW_I2CData=1;
	M_WAIT;
	Pin_SW_I2CClk=1;
	M_WAIT;
	Pin_SW_I2CData=0;
	M_WAIT;
	Pin_SW_I2CClk=0;
	M_WAIT;
}

/*********************************************
	Function:		I2CStop
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 12:14:54
*********************************************/
void I2CStop(void)
{
	unsigned char i;
	PD_SW_I2CClk=0;
	Pin_SW_I2CClk=1;
	//while(!Pin(Pin_I2CClk, PIN_READ));
	for(i=0;(i<20)&&(!PinIn_SW_I2CClk);i++)Wait10us(1);
	
	PD_SW_I2CClk=1;
	PD_SW_I2CData=1;
	Pin_SW_I2CData=0;
	M_WAIT;
	Pin_SW_I2CClk=1;
	M_WAIT;
	Pin_SW_I2CData=1;
	M_WAIT;

}

//zengdm add for touch panel.
void init_I2C(void)
{
    unsigned char i;
    Pin_SW_I2CClk = 1;
    Pin_SW_I2CData = 1;

    I2CStop();
}
/*********************************************
	Function:		I2COut8Bit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 12:14:59
*********************************************/
unsigned char I2COut8Bit(unsigned char outbyte)
{
	unsigned char i;
	unsigned int j;
	UCharField temp;

	temp.byte=outbyte;
	
	PD_SW_I2CClk=1;
	PD_SW_I2CData=1;
	
#if 1
	for(i=0x80;i>0;i>>=1)
	{
		
		Pin_SW_I2CClk=0;
		M_WAIT;
		if(outbyte&i)
			Pin_SW_I2CData=1;
		else
			Pin_SW_I2CData=0;
		M_WAIT;
		M_WAIT;
		M_WAIT;

		    
		/*if(i==0x80)
		{
			PD_SW_I2CClk=0;
			for(j=0;((j<1) && (!Pin_SW_I2CClk));j++);
			PD_SW_I2CClk=1;
		}*/
		Pin_SW_I2CClk=1;
		
		M_WAIT;
	}
#else
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B7;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B6;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B5;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B4;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B3;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B2;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B1;
		Pin_SW_I2CClk=1;
		M_WAIT;
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B0;
		Pin_SW_I2CClk=1;
		M_WAIT;
#endif
		
	Pin_SW_I2CClk=0;
	PD_SW_I2CData=0;
	M_WAIT;
	Pin_SW_I2CClk=1;
	M_WAIT;
	if(Pin_SW_I2CData)
		i=0;
	else
		i=1;
	Pin_SW_I2CClk=0;
	M_WAIT;
	return(i);
}

/*********************************************
	Function:		I2CIn8Bit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 12:15:02
*********************************************/
unsigned char I2CIn8Bit(void)
{
	unsigned char i,inbyte=0;

	PD_SW_I2CClk=0;
	Pin_SW_I2CClk=1;
	//while(!Pin(Pin_I2CClk, PIN_READ));
	for(i=0;(i<20)&&(!PinIn_SW_I2CClk);i++)Wait10us(1);
	
	PD_SW_I2CClk=1;
	PD_SW_I2CData=0;
	for(i=0x80;i>0;i>>=1)
	{
		Pin_SW_I2CClk=1;
		M_WAIT;
		if(PinIn_SW_I2CData)
			inbyte|=i;
		Pin_SW_I2CClk=0;
		M_WAIT;
	}
	return (inbyte);
}

//zengdm add for touch panel.
int I2CIn16Bit(void)
{
	unsigned char i;
    int inbyte=0;
    
	PD_SW_I2CClk=0;
	Pin_SW_I2CClk=1;
	//while(!Pin(Pin_I2CClk, PIN_READ));
	for(i=0;(i<20)&&(!PinIn_SW_I2CClk);i++)Wait10us(1);
	
	PD_SW_I2CClk=1;
	PD_SW_I2CData=0;
	for(i=0x8000;i>0;i>>=1)
	{
		Pin_SW_I2CClk=1;
		M_WAIT;
		if(PinIn_SW_I2CData)
			inbyte|=i;
		Pin_SW_I2CClk=0;
		M_WAIT;
	}
	return (inbyte);
}

/*********************************************
	Function:		I2CAck
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 12:15:04
*********************************************/
void I2CAck(void)
{
	PD_SW_I2CClk=1;
	PD_SW_I2CData=1;
	Pin_SW_I2CData=0;
	M_WAIT;
	Pin_SW_I2CClk=1;
	M_WAIT;
	Pin_SW_I2CClk=0;
	PD_SW_I2CData=0;
	M_WAIT;
}

/*********************************************
	Function:		I2CNAck
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 12:15:05
*********************************************/
void I2CNAck(void)
{
	PD_SW_I2CClk=1;
	PD_SW_I2CData=1;
	Pin_SW_I2CData=1;
	M_WAIT;
	Pin_SW_I2CClk=1;
	M_WAIT;
	Pin_SW_I2CClk=0;
	PD_SW_I2CData=0;
	M_WAIT;
}


/*********************************************
	Function:		I2C2Start
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-8-4- 10:01:06
*********************************************/
void I2C2Start(void)
{
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=1;
	Pin_SW2_I2CData=1;
	M_WAIT;
	Pin_SW2_I2CClk=1;
	M_WAIT;
	Pin_SW2_I2CData=0;
	M_WAIT;
	Pin_SW2_I2CClk=0;
	M_WAIT;
}

/*********************************************
	Function:		I2C2Stop
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-8-4- 10:01:05
*********************************************/
void I2C2Stop(void)
{
	unsigned char i;
	PD_SW2_I2CClk=0;
	Pin_SW2_I2CClk=1;
	for(i=0;(i<20)&&(!PinIn_SW2_I2CClk);i++)Wait10us(1);
	
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=1;
	Pin_SW2_I2CData=0;
	M_WAIT;
	Pin_SW2_I2CClk=1;
	M_WAIT;
	Pin_SW2_I2CData=1;
	M_WAIT;
}



/*********************************************
	Function:		I2C2Out8Bit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-8-4- 10:01:03
*********************************************/
unsigned char I2C2Out8Bit(unsigned char outbyte)
{
	unsigned char i;
	unsigned int j;
	UCharField temp;

	temp.byte=outbyte;
	
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=1;
#if 1

	for(i=0x80;i>0;i>>=1)
	{
		
		Pin_SW2_I2CClk=0;
		if(outbyte&i)
			Pin_SW2_I2CData=1;
		else
			Pin_SW2_I2CData=0;
		M_WAIT;
		
		/*if(i==0x80)
		{
			PD_SW_I2CClk=0;
			for(j=0;((j<1) && (!Pin_SW_I2CClk));j++);
			PD_SW_I2CClk=1;
		}*/
		Pin_SW2_I2CClk=1;
		M_WAIT;
	}

  
#else
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B7;
		
		/*PD_SW2_I2CClk=0;
		Pin_SW2_I2CClk=1;
		for(i=0;(i<20)&&(!PinIn_SW2_I2CClk);i++)Wait10us(1);
		PD_SW2_I2CClk=1;*/
	
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B6;
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B5;
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B4;
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B3;
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B2;
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B1;
		Pin_SW2_I2CClk=1;
		M_WAIT;
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B0;
		Pin_SW2_I2CClk=1;
		M_WAIT;
#endif
		
	Pin_SW2_I2CClk=0;
	PD_SW2_I2CData=0;
	M_WAIT;
	Pin_SW2_I2CClk=1;
	M_WAIT;
	if(PinIn_SW2_I2CData)
		i=0;
	else
		i=1;
	Pin_SW2_I2CClk=0;
	M_WAIT;
	
	return(i);
}

/*********************************************
	Function:		I2C2In8Bit
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-8-4- 10:01:02
*********************************************/
unsigned char I2C2In8Bit(void)
{
	unsigned char i,inbyte=0;

	PD_SW2_I2CClk=0;
	Pin_SW2_I2CClk=1;
	for(i=0;(i<20)&&(!PinIn_SW2_I2CClk);i++)Wait10us(1);
	
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=0;
	
	for(i=0x80;i>0;i>>=1)
	{
		Pin_SW2_I2CClk=1;
		M_WAIT;
		if(PinIn_SW2_I2CData)
			inbyte|=i;
		Pin_SW2_I2CClk=0;
		M_WAIT;
		
	}
	return (inbyte);
}

/*********************************************
	Function:		I2C2Ack
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-8-4- 10:01:00
*********************************************/
void I2C2Ack(void)
{
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=1;
	Pin_SW2_I2CData=0;
	M_WAIT;
	Pin_SW2_I2CClk=1;
	M_WAIT;
	Pin_SW2_I2CClk=0;
	PD_SW2_I2CData=0;
	M_WAIT;
}

/*********************************************
	Function:		I2C2NAck
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-8-4- 10:00:56
*********************************************/
void I2C2NAck(void)
{
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=1;
	Pin_SW2_I2CData=1;
	M_WAIT;
	Pin_SW2_I2CClk=1;
	M_WAIT;
	Pin_SW2_I2CClk=0;
	PD_SW2_I2CData=0;
	M_WAIT;
}
#ifdef D_STORE_DATA_IN_EEPROM
void Input(unsigned char val)
{
   unsigned char i;
    for(i = 0; i< 8;i++)
   	{
   	   if(val & (0x01 << (7-i)))
   	   	  Pin_SW_I2CData  = 1;
   	   else
   	   	  Pin_SW_I2CData  = 0;
   	    M_WAIT;
   	    Pin_SW_I2CClk = 1;
   	    M_WAIT;
   	    Pin_SW_I2CClk = 0;
   	    M_WAIT;
   	}
  
    Pin_SW_I2CData = 0;
    M_WAIT;
    Pin_SW_I2CClk =  1;
    M_WAIT;
    Pin_SW_I2CClk = 0;
    M_WAIT;
}
unsigned char Output(void )
{
  unsigned char i;
  unsigned char ret;
	
	 PD_SW_I2CData  = 0;
         Wait10us(10);
   
     for(i = 0; i< 8;i++)
   	{
   	 Pin_SW_I2CClk  = 0;
       Wait10us(10);
       Pin_SW_I2CClk = 1;
   	   if(PinIn_SW_I2CData)
   	   	 ret |= (0x01 << (7 - i));
   	   else 
   	   	  ret &= ~(0x01 << (7 -i));
   	    Wait10us(10);
   	}
    return ret;
}

void EepromByteWrite(unsigned char addr,unsigned char subaddr,unsigned char datas)
{
    I2CStart();
   Input(addr);
   Input(subaddr);
   Input(datas);
   I2CStop();
}
void EepromByteRead(unsigned char addr,unsigned char subaddr,unsigned char *p)
{
    I2CStart();
  Input(addr);
  Input(subaddr);
  I2CStart();
  Input(addr+1);
  *p = Output();
  I2CNAck();
  I2CStop();
}
#if 0
void EepromByteWrite(unsigned char addr,unsigned char subaddr,unsigned char datas)

⌨️ 快捷键说明

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