?? pt2313.c
字號:
#include < REG52.h >
#include " pt2313.h "
#include < intrins.h >
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: PT2313Drive
程序功能: 控制PT2313
入口參數: 無
出口參數: 無
調用子程序:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void PT2313Drive ( uchar TempSign, uchar TempData )
{
uchar TempDataA, Count;
StartBit ( );
I2CWrite ( 0x88 );
if ( ! Error_F )
{
switch ( TempSign )
{
case PT2313BASS: TempDataA = TempData ; //Bass控制
TempDataA |= 0x60;
I2CWrite ( TempDataA );
break;
case PT2313TREB: TempDataA = TempData ; //TERB控制
TempDataA |= 0x70;
I2CWrite ( TempDataA );
break;
case PT2313VOL: TempDataA = 56 - TempData ; //VOL控制
if ( TempDataA > 56 )
{
TempDataA = 0;
}
TempDataA |= 0;
I2CWrite ( TempDataA );
break;
case PT2313LIN: TempDataA = TempData ; //音源控制
TempDataA |= 0x4C;
I2CWrite ( TempDataA );
break;
case PT2313MUTE: for ( Count = 0; Count < 4; Count ++ ) //靜音控制
{
TempDataA = PT2313Mute_Tab [ Count ];
I2CWrite ( TempDataA );
}
break;
case PT2313SW: TempDataA = 20-TempData ; //SW控制
if ( TempData > 20 )
{
TempDataA = 0;
}
TempDataA |= 0xC0;
I2CWrite ( TempDataA );
TempDataA = TempData ;
TempDataA |= 0xE0;
I2CWrite ( TempDataA );
break;
case PT2313BLA_FL: TempDataA = TempData ; //Bass控制
TempDataA |= 0x80;
I2CWrite ( TempDataA );
break;
case PT2313BLA_FR: TempDataA = TempData ; //Bass控制
TempDataA |= 0xA0;
I2CWrite ( TempDataA );
break;
}
StopBit ( );
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: StartBit()
程序功能: I2C開始條件
入口參數: 無
出口參數: 無
調用子程序: void Delay(uint Count)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void StartBit ( )
{
uchar Count;
I2CDataPort = 1;
for ( Count = 20; Count > 0; Count -- )
{
if ( I2CDataPort )
{
break;
}
}
if ( ! I2CDataPort )
{
Error_F = 1;
}
else
{
I2CSclPort = 1;
Delay ( 10, 1 );
I2CDataPort = 0;
Delay ( 10, 1 );
I2CSclPort = 0;
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: void I2CWrite(uchar TempData)
程序功能: I2C寫數據并判斷有無響應
入口參數: TempData
出口參數: 無
調用子程序:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void I2CWrite ( uchar TempData )
{
uchar Count;
for ( Count = 8; Count > 0; Count -- )
{
I2CSclPort = 0;
_nop_ ( );
_nop_ ( );
I2CDataPort = ( bit ) ( TempData & 0x80 );
TempData <<= 1;
Delay(10, 1);
I2CSclPort = 1;
Delay(10, 1);
}
I2CSclPort = 0;
_nop_ ( );
I2CDataPort = 1;
_nop_ ( );
for ( Count = 0xff; Count; Count -- )
{
if ( ! I2CDataPort )
{
break;
}
}
if ( ! I2CDataPort )
{
I2CSclPort = 1;
_nop_ ( );
_nop_ ( );
_nop_ ( );
I2CSclPort = 0;
}
else
{
Error_F = 1;
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: void StopBit()
程序功能: I2C停止條件
入口參數: 無
出口參數: 無
調用子程序:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void StopBit ()
{
uchar Count = 20;
while (Count --)
{
I2CSclPort = 0;
_nop_ ();
I2CDataPort = 0;
_nop_ ();
_nop_ ();
I2CSclPort = 1;
Delay(10, 1);
I2CDataPort = 1;
if (I2CDataPort)
{
break;
}
}
Delay(10, 1);
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: void OutBalanc()
程序功能: 平衡輸出
入口參數: 無
出口參數: 無
調用子程序:
備注:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void OutBalanc()
{
uchar TempDataA;
uchar TempDataB;
TempDataA = 10 - BalancData;
if ( TempDataA > 20 )
{
TempDataA = 20;
}
TempDataB = BalancData - 10;
if ( TempDataB > 20 )
{
TempDataA = 20;
}
PT2313Drive(PT2313BLA_FL, TempDataA);
PT2313Drive(PT2313BLA_FR, TempDataA);
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: void PT2313ComebackData()
程序功能: 數據恢復與開機計數顯示
入口參數: 無
出口參數: 無
調用子程序:
備注:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void PT2313ComebackData()
{
uchar TempVolumeData, End_F;
bit bdata Write_F;
PT2313Drive(PT2313BASS, PT2313Tone_Tab[BassData]); //低音控制
PT2313Drive(PT2313TREB, PT2313Tone_Tab[TrebleData]); //高音控制
OutBalanc(); //平衡控制
PT2313Drive(PT2313LIN, INPUT_TAB[InputData]); //音源輸入選擇控制
PT2313Drive(PT2313SW, SwVolumeData); //超低音控制
VolumeData = ByteRead ( 0x2A00 ); //讀第一扇區數據
if (VolumeData > 56)
{
VolumeData = ByteRead ( 0x2C00 ); //讀第二扇區數據
if (VolumeData > 56)
{
VolumeData = 40;
}
}
if (VolumeData < 0)
{
VolumeData = 0;
}
MutePort = 0; //取消輸入功放輸入短路
if(VolumeData > 40)
{
VolumeData = 40;
}
for ( TempVolumeData = 0; TempVolumeData <= VolumeData; TempVolumeData++ )
{
VolumeOut(TempVolumeData);
VolumeDisplay(TempVolumeData);
BlinkTime = 10;
while(BlinkTime)
{
if ((PWDN) || (PWUP))
{
End_F = 1;
break;
}
if ((Rmtok_F) && ((RD_RKEY == RK_VOLUME_DN) ||
(RD_RKEY == RK_VOLUME_DN)))
{
End_F = 1;
break;
}
}
if (End_F)
{
End_F = 0;
break;
}
}
VolumeData = TempVolumeData;
SectorErase(0x2A00); //擦除音量扇區1數據
Write_F = ByteProgram(0x2A00, VolumeData);
if (!Write_F)
{
SectorErase(0x2C00); //擦除音量扇區1數據
ByteProgram(0x2C00, VolumeData);
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名稱: void VolumeOut()
程序功能: 主音量數據輸出
入口參數: 無
出口參數: 無
調用子程序:
備注:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
void VolumeOut(uchar TempData)
{
bit bdata Zero_F;
if(!TempData)
{
Zero_F = 1;
MutePort = 1; //短路功放輸入
}
else
{
if(Zero_F)
{
Zero_F = 0;
}
if(Mute_F)
{
MutePort = 1; //短路功放輸入
PT2313Drive( PT2313VOL, 0 );
}
else
{
PT2313Drive( PT2313VOL, TempData );
MutePort = 0; //打開功放輸入
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -