📄 pt2313.c
字号:
#include <reg51.h> //包含公共头文件
#include <string.h>
#include <intrins.h>
#include "itm704io.h"
#include "i2c.h"
#include "type.h"
#include "utility.h"
#include "pt2313.h"
extern unsigned char xdata ITM_CHANSHU[30];//系统中要存储的变量
//////////////////////////////////////////////////////////////////PT2313中要存储的变量
#define ItmVolume ITM_CHANSHU[0]//系统音量
#define ItmBass ITM_CHANSHU[1]//系统低音
#define ItmTreb ITM_CHANSHU[2]//系统高音
#define ItmBaL ITM_CHANSHU[3]//左右平衡
#define ItmFaD ITM_CHANSHU[4]//前后平衡
#define ItmLoud ITM_CHANSHU[5]//系统响度
#define ItmMute ITM_CHANSHU[6]//系统静音
/////////////////////////////////////////////////////////////////6606存储的相应变量
#define CurrentBand ITM_CHANSHU[7]//当前波段
#define CurrentPreset ITM_CHANSHU[8]//当前电台
#define RadioMono ITM_CHANSHU[10]//立体声
/////////////////////////////////////////////////////////////////7842存储的变量
#define ItmPower ITM_CHANSHU[11]//系统电源标志
#define ItmMode ITM_CHANSHU[12]//itm704当前状态(USB ,CARD,)
#define EqValue ITM_CHANSHU[13]//EQ的索引值
#define AmFlag ITM_CHANSHU[14]//AM/PM标志
extern void Pt2313_Bal_Change(void)
{
unsigned char ucFL,ucFR,ucBL,ucBR;//前左,前右,后左,后右
unsigned char ucMax;
unsigned char Buf[4];
unsigned int u16Temp; //ADD_VAR_FOR_CALCULATION simon 2006.05.06
ucFL = ItmBaL + ItmFaD;//pt2313的按5档衰减量
ucFR = 10-ItmBaL+ItmFaD;
ucBL = 10-ItmFaD+ItmBaL;
ucBR = 20-ItmBaL-ItmFaD;
ucMax = ucFL;
if(ucFR > ucMax)
ucMax = ucFR;
if(ucBL > ucMax)
ucMax = ucBL;
if(ucBR > ucMax)
ucMax = ucBR;
u16Temp = ucFL * 28;//计算pt2313的四个输出通道衰减字节数据(28档)
ucFL = 28 - (u16Temp / ucMax);
u16Temp = ucFR * 28;
ucFR = 28 - (u16Temp / ucMax);
u16Temp = ucBL * 28;
ucBL = 28 - (u16Temp/ucMax);
u16Temp = ucBR * 28;
ucBR = 28 - (u16Temp / ucMax);
if(ItmBaL == 10)
{
ucFR = 0x1f;
ucBR = 0x1f;
}
else if(ItmBaL == 0)
{
ucFL = 0x1f;
ucBL = 0x1f;
}
if(ItmFaD == 10)
{
ucBR = 0x1f;
ucBL = 0x1f;
}
else if(ItmFaD == 0)
{
ucFR =0x1f;
ucFL =0x1f;
}
Buf[0] = ucFL + 0xe0;//RR
Buf[1] = ucFR + 0xc0;//LR
Buf[2] = ucBL + 0xa0;//RF
Buf[3] = ucBR + 0x80;//LF
for(ucMax=0;ucMax<4;ucMax++)
{I2C_Send_Byte(PT2313_ADDR,Buf[ucMax]);
I2C_WrAck(PT2313_ADDR);
}
}
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
程序名称: PT2313Drive
程序功能: 控制PT2313
入口参数: 无
出口参数: 无
调用子程序:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
extern void PT2313Drive ( unsigned char TempSign)
{ unsigned char Count;
I2C_Start(PT2313_ADDR);
I2C_Send_Byte(PT2313_ADDR,PT2313_ADDR);
I2C_WrAck(PT2313_ADDR);
switch ( TempSign )
{
case PT2313VOL: if(ItmVolume>ITM_VOLUME_MAX)//如果音量超过上限
{ItmVolume=ITM_VOLUME_MAX;}//则等于上限
I2C_Send_Byte(PT2313_ADDR,ITM_VOLUME_TABLE[ItmVolume]); //(VOL)音量控制
I2C_WrAck(PT2313_ADDR);
break;
case PT2313BASS: if(ItmBass>ITM_BASS_MAX)
ItmBass=ITM_BASS_MAX;
I2C_Send_Byte(PT2313_ADDR ,ITM_BASS_TABLE[ItmBass]); //低音(Bass)控制
I2C_WrAck(PT2313_ADDR);
break;
case PT2313TREB: if(ItmTreb>ITM_TREB_MAX)
ItmTreb=ITM_TREB_MAX;
I2C_Send_Byte(PT2313_ADDR ,ITM_TREB_TABLE[ItmTreb]);//高音控制
I2C_WrAck(PT2313_ADDR);
break;
case PT2313BAL:
case PT2313FAD: if(ItmBaL>ITM_BAl_MAX)
ItmBaL=ITM_BAl_MAX;
if(ItmFaD>ITM_FAD_MAX)
ItmFaD=ITM_FAD_MAX;
Pt2313_Bal_Change();
break; //平衡控制
case PT2313LIN: if(ItmLoud>ITM_LOUD_MAX)
ItmLoud=ITM_LOUD_MAX;
Count=ITM_SWITCH_TABLE[ItmMode];
Count|=0x00;
if(ItmLoud)
{Count|= 0x04;}//
Count|=0x40;
I2C_Send_Byte (PT2313_ADDR,Count);//音源切换
I2C_WrAck(PT2313_ADDR);
break;
case PT2313MUTE: for ( Count = 0; Count < 4; Count ++ )//静音控制
{
I2C_Send_Byte(PT2313_ADDR,ITM_MUTE_TABLE[Count]);
I2C_WrAck(PT2313_ADDR);
}
break;
case PT2313INI: for ( Count = 0; Count < 4; Count ++ )
{
I2C_Send_Byte(PT2313_ADDR,ITM_SPEAKER_TABLE[Count]);//左右平衡的初始化
I2C_WrAck(PT2313_ADDR);
}
break; //PT2313初始化
default: break;
}
I2C_Stop(PT2313_ADDR);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -