📄 lib_backup2.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)
{
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;
Wait1ms(1);
}
/*********************************************
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);
}
/*********************************************
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: 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)
{
// unsigned char ret;
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)
{
#ifndef D_STORE_DATA_IN_EEPROM
unsigned char ret;
I2CStart();
I2COut8Bit(address);
I2COut8Bit(begin);
for(;length>0;length--,p++){
ret =I2COut8Bit(*p);
Wait1ms(100);
}
I2CStop();
#else
I2CStart();
Input(address);
Input(begin);
for(;length >0;length --,p++){
Input(*p);
Wait1ms(500);
}
I2CStop();
#endif
}
/*********************************************
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);
}
/*********************************************
Function: GetADValue
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:56
*********************************************/
unsigned char GetADValue(unsigned char input)
{
/*unsigned char i;
ADCCSR= (input & 0x0F)|0x20;
//while ((ADCCSR&0x80)==0);
for(i=0;(i<100)&&((ADCCSR&0x80)==0);i++)Wait10us(1);
return(ADCDRH);*/
unsigned char i;
ADC_CSR=input & 0x0F;
ADC_CR1_ADON=1;
NOP;
ADC_CR1_ADON=1;
for(i=0;(i<100)&&((ADC_CSR&0x80)==0);i++)Wait10us(1);
return(ADC_DRH);
}
void CopyString(unsigned char @far *pStr1,unsigned char @far *pStr2)
{
while(*pStr2)
*pStr1++=*pStr2++;
}
/*********************************************
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=24;i>0;i--);
}
}
/*********************************************
Function: Wait1ms
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:54
*********************************************/
void Wait1ms(unsigned char time)
{
for(;time>0;time--)
{
Wait10us(100);
}
}
/*********************************************
Function: LibInit
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:40:53
*********************************************/
void LibInit(void)
{
PD_SW_I2CClk=1;
PCR1_SW_I2CClk=0;
PCR2_SW_I2CClk=0;
Pin_SW_I2CClk=1;
PD_SW_I2CData=1;
PCR1_SW_I2CData=0;
PCR2_SW_I2CData=0;
Pin_SW_I2CData=1;
}
void LibMain(void)
{
// KeyCode = NOKEY;
}
#ifdef DEBUG_SCI_ENABLE
void SCI_Val(unsigned char datas)
{
M_SCI_OUTVAL(datas);
M_SCI_LINE_END;
}
void SCI_SendString(unsigned char *pStr1)
{
unsigned char i,j;
while(*pStr1)
{
M_SCI_OUT8BIT(*pStr1);
pStr1++;
}
M_SCI_OUT8BIT(0x0D);
M_SCI_OUT8BIT(0x0A);
}
void SCI_SendPromter(unsigned char *promter,unsigned char *datas,unsigned char length)
{
unsigned char *tmp;
unsigned char i;
while(*promter)
{
M_SCI_OUT8BIT(*promter);
promter++;
}
M_SCI_OUT8BIT(':');
for(i = 0; i < length; i++)
{
if(datas[i] > 9)
tmp[i] = datas[i] - 10 + 'A';
else
tmp[i] = datas[i] + '0';
M_SCI_OUT8BIT(tmp[i]);
}
M_SCI_OUT8BIT(0x0d);
M_SCI_OUT8BIT(0x0a);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -