📄 lib.c
字号:
/*********************************************************
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)
{
if(F_GUIExist)return;
PD_I2CClk=1;
PD_I2CData=1;
Pin_I2CData=1;
M_WAIT;
Pin_I2CClk=1;
M_WAIT;
Pin_I2CData=0;
M_WAIT;
Pin_I2CClk=0;
M_WAIT;
}
/*********************************************
Function: I2CStop
Description:
Write/Modify: Perry.Liang
Time: 2004-11-11- 12:14:54
*********************************************/
void I2CStop(void)
{
if(F_GUIExist)return;
PD_I2CClk=1;
PD_I2CData=1;
Pin_I2CData=0;
M_WAIT;
Pin_I2CClk=1;
M_WAIT;
Pin_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;
if(F_GUIExist)return;
temp.byte=outbyte;
PD_I2CClk=1;
PD_I2CData=1;
#if 0
for(i=0x80;i>0;i>>=1)
{
Pin_I2CClk=0;
if(outbyte&i)
Pin_I2CData=1;
else
Pin_I2CData=0;
M_WAIT;
/*if(i==0x80)
{
PD_I2CClk=0;
for(j=0;((j<1) && (!Pin_I2CClk));j++);
PD_I2CClk=1;
}*/
Pin_I2CClk=1;
}
#else
Pin_I2CClk=0;
Pin_I2CData=temp.field.B7;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B6;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B5;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B4;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B3;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B2;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B1;
Pin_I2CClk=1;
asm nop
Pin_I2CClk=0;
Pin_I2CData=temp.field.B0;
Pin_I2CClk=1;
asm nop
#endif
Pin_I2CClk=0;
PD_I2CData=0;
M_WAIT;
Pin_I2CClk=1;
M_WAIT;
if(Pin_I2CData)
i=0;
else
i=1;
Pin_I2CClk=0;
/*PD_I2CData=1;
Pin_I2CData=1;*/
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;
if(F_GUIExist)return;
PD_I2CClk=1;
PD_I2CData=0;
for(i=0x80;i>0;i>>=1)
{
Pin_I2CClk=1;
M_WAIT;
if(Pin_I2CData)
inbyte|=i;
Pin_I2CClk=0;
}
return (inbyte);
}
/*********************************************
Function: I2CAck
Description:
Write/Modify: Perry.Liang
Time: 2004-11-11- 12:15:04
*********************************************/
void I2CAck(void)
{
if(F_GUIExist)return;
PD_I2CClk=1;
PD_I2CData=1;
Pin_I2CData=0;
M_WAIT;
Pin_I2CClk=1;
M_WAIT;
Pin_I2CClk=0;
PD_I2CData=0;
M_WAIT;
}
/*********************************************
Function: I2CNAck
Description:
Write/Modify: Perry.Liang
Time: 2004-11-11- 12:15:05
*********************************************/
void I2CNAck(void)
{
if(F_GUIExist)return;
PD_I2CClk=1;
PD_I2CData=1;
Pin_I2CData=1;
M_WAIT;
Pin_I2CClk=1;
M_WAIT;
Pin_I2CClk=0;
PD_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: 2004-8-9- 16:32:10
*********************************************/
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);
}
unsigned char GetADValue(unsigned char input)
{
ADCCSR= (input & 0x0F)|0x20;
while ((ADCCSR&0x80)==0);
return(ADCDRH);
}
void Wait10us(unsigned char time)
{
unsigned char i;
for(;time>0;time--)
{
for(i=3;i>0;i--);
}
}
void Wait1ms(unsigned char time)
{
for(;time>0;time--)
{
Wait10us(100);
}
}
/*********************************************************
File End
*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -