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

📄 lib.c

📁 一个ST7系列的车载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)&&(!Pin_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;
}

/*********************************************
	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 0
	for(i=0x80;i>0;i>>=1)
	{
		
		Pin_SW_I2CClk=0;
		if(outbyte&i)
			Pin_SW_I2CData=1;
		else
			Pin_SW_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_SW_I2CClk=1;
	}
#else
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B7;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B6;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B5;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B4;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B3;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B2;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B1;
		Pin_SW_I2CClk=1;
		asm nop
		Pin_SW_I2CClk=0;
		Pin_SW_I2CData=temp.field.B0;
		Pin_SW_I2CClk=1;
		asm nop
#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)&&(!Pin_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(Pin_SW_I2CData)
			inbyte|=i;
		Pin_SW_I2CClk=0;
	}
	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)
{
	PD_SW2_I2CClk=0;
	Pin_SW2_I2CClk=1;
	while(!Pin_SW2_I2CClk);
	
	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 0
	for(i=0x80;i>0;i>>=1)
	{
		
		Pin_SW_I2CClk=0;
		if(outbyte&i)
			Pin_SW_I2CData=1;
		else
			Pin_SW_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_SW_I2CClk=1;
	}
#else
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B7;
		
		PD_SW2_I2CClk=0;
		Pin_SW2_I2CClk=1;
		while(!Pin_SW2_I2CClk);
		PD_SW2_I2CClk=1;
	
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B6;
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B5;
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B4;
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B3;
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B2;
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B1;
		Pin_SW2_I2CClk=1;
		asm nop
		Pin_SW2_I2CClk=0;
		Pin_SW2_I2CData=temp.field.B0;
		Pin_SW2_I2CClk=1;
		asm nop
#endif
		
	Pin_SW2_I2CClk=0;
	PD_SW2_I2CData=0;
	//M_WAIT;
	Pin_SW2_I2CClk=1;
	//M_WAIT;
	if(Pin_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;
	while(!Pin_SW2_I2CClk);
	//for(i=0;(i<20)&&(!Pin_SW2_I2CClk);i++)Wait10us(1);
	//while(i==20);
	
	PD_SW2_I2CClk=1;
	PD_SW2_I2CData=0;
	for(i=0x80;i>0;i>>=1)
	{
		Pin_SW2_I2CClk=1;
		//M_WAIT;
		if(Pin_SW2_I2CData)
			inbyte|=i;
		Pin_SW2_I2CClk=0;
	}
	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;
}

/*********************************************
	Function:		EepromRead
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2004-11-11- 11:21:29
*********************************************/
void EepromRead(unsigned char address,unsigned char begin,unsigned char length,unsigned char *p)
{
	I2CStart();
	I2COut8Bit(address);
	I2COut8Bit(begin);
	I2CStart();
	I2COut8Bit(address+1);
	for(;length>0;length--,p++)
	{
		*p=I2CIn8Bit();
		if(length==1)
			I2CNAck();
		else
			I2CAck();
	}
	I2CStop();
}

/*********************************************
	Function:		EepromWrite
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2005-1-21- 17:47:44
*********************************************/
void EepromWrite(unsigned char address,unsigned char begin,unsigned char length,unsigned char *p)
{
	I2CStart();
	I2COut8Bit(address);
	I2COut8Bit(begin);
	for(;length>0;length--,p++)
		I2COut8Bit(*p);
	I2CStop();
}

/*********************************************
	Function:MaxMinChangeProtect
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:58
*********************************************/
unsigned char MaxMinChangeProtect(unsigned char Num,signed char ChangeVal,unsigned char MaxVal,unsigned char MinVal,unsigned char ProtectState)
{
	signed char TestVal;  
	TestVal=Num+ChangeVal;
	if(TestVal>=(signed char)MinVal && TestVal<=(signed char)MaxVal)
		Num+=ChangeVal;
	else if (TestVal<(signed char)MinVal )
	{
		if(ProtectState==0)
			Num=MaxVal;
		else
			Num=MinVal;
	}
	else
	{
		if(ProtectState==0)
			Num=MinVal;
		else
			Num=MaxVal;
	}

	return(Num);
		
}


void CopyString(unsigned char *p, unsigned char *src)
{
	while(*src>0)
		*p++=*src++;
}

void CopyString2(unsigned char *p, unsigned char *src)
{
	while(*src>0)
		*p++=*src++;
	*p=0;
}
/*********************************************
	Function:		GetADValue
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:56
*********************************************/
unsigned char GetADValue(unsigned char input)
{
	ADCCSR= (input & 0x0F)|0x20;
	while ((ADCCSR&0x80)==0);
	return(ADCDRH);
}

/*********************************************
	Function:		Wait10us
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:40:55
*********************************************/
void Wait10us(unsigned char time)
{
	unsigned char i;
	for(;time>0;time--)
	{
		for(i=3;i>0;i--);
	}
}

/*********************************************
	Function:		Wait1ms
	Description:	

⌨️ 快捷键说明

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