📄 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 + -