📄 m61538.c
字号:
#include "reg52.h"
#include "intrins.h"
#include "..\..\inc\globedef.h"
#include "..\..\inc\M61538.h"
#include "..\..\inc\delay.h"
/*========================================================================
音量转换函数,将音量的0~60等级转换成具体写入到M61538的音量
在前0~12之间一档增加4个DB, 后面一个档增加一个DB
========================================================================*/
code BYTE ALL_VolumeChange[] =
{
96,
95, 91, 87, 83, 79, 75, 71, 67, 63, 59,
55, 51, 47, 46, 45, 44, 43, 42, 41, 40,
39, 38, 37, 36, 35, 34, 33, 32, 31, 30,
29, 28, 27, 26, 25, 24, 23, 22, 21, 20,
19, 18, 17, 16, 15, 14, 13, 12, 11, 10,
9, 8, 7, 6, 5, 4, 3, 2, 1, 0
};
/*========================================================================
音量调节函数,调整由M61538控制的6个通道的整体音量
========================================================================*/
void Volume_Tune(BYTE VolumeChannel)
{
WORD ALL_Volume;
BYTE VOL_TEMPH;
BYTE VOL_TEMPL;
if( ALLCH_Vol == VolumeChannel )
{
VOL_TEMPH = VOLUME_CHANNEL[FrontL_VOLUME];
VOL_TEMPL = VOLUME_CHANNEL[FrontR_VOLUME];
ALL_Volume = (WORD)((ALL_VolumeChange[VOL_TEMPH]) << 9) + (WORD)((ALL_VolumeChange[VOL_TEMPL]) << 2);
M61538_Tune_Timing(ALL_Volume);
VOL_TEMPH = VOLUME_CHANNEL[CENTER_VOLUME];
VOL_TEMPL = VOLUME_CHANNEL[SUBWOOFER_VOLUME];
ALL_Volume = (WORD)((ALL_VolumeChange[VOL_TEMPH]) << 9) + (WORD)((ALL_VolumeChange[VOL_TEMPL]) << 2) | 0x1;
M61538_Tune_Timing(ALL_Volume);
VOL_TEMPH = VOLUME_CHANNEL[SURROUNDL_VOLUME];
VOL_TEMPL = VOLUME_CHANNEL[SURROUNDR_VOLUME];
ALL_Volume = (WORD)((ALL_VolumeChange[VOL_TEMPH]) << 9) + (WORD)((ALL_VolumeChange[VOL_TEMPL]) << 2) | 0x2;
M61538_Tune_Timing(ALL_Volume);
}
else if(BASSCEN_Vol== VolumeChannel)
{
VOL_TEMPH = VOLUME_CHANNEL[CENTER_VOLUME];
VOL_TEMPL = VOLUME_CHANNEL[SUBWOOFER_VOLUME];
ALL_Volume = (WORD)((ALL_VolumeChange[VOL_TEMPH]) << 9) + (WORD)((ALL_VolumeChange[VOL_TEMPL]) << 2) | 0x1;
M61538_Tune_Timing(ALL_Volume);
}
else if(FLR_Vol == VolumeChannel)
{
VOL_TEMPH = VOLUME_CHANNEL[FrontL_VOLUME];
VOL_TEMPL = VOLUME_CHANNEL[FrontR_VOLUME];
ALL_Volume = (WORD)((ALL_VolumeChange[VOL_TEMPH]) << 9) + (WORD)((ALL_VolumeChange[VOL_TEMPL]) << 2);
M61538_Tune_Timing(ALL_Volume);
}
else if(SLR_Vol == VolumeChannel)
{
VOL_TEMPH = VOLUME_CHANNEL[SURROUNDL_VOLUME];
VOL_TEMPL = VOLUME_CHANNEL[SURROUNDR_VOLUME];
ALL_Volume = (WORD)((ALL_VolumeChange[VOL_TEMPH]) << 9) + (WORD)((ALL_VolumeChange[VOL_TEMPL]) << 2) | 0x2;
M61538_Tune_Timing(ALL_Volume);
}
//发送音量值
}
void M61538_Tune_Timing(WORD Volume_Set)
{
BYTE Volume_i;
CLEAR_M61538_CLK;
CLEAR_M61538_DATA;
Delay5US();
for(Volume_i = 0; Volume_i < 16; Volume_i++)
{
if(Volume_Set & 0x8000)
SET_M61538_DATA;
else
CLEAR_M61538_DATA;
Delay5US();
SET_M61538_CLK;
Delay5US();
if( Volume_i < 15)
CLEAR_M61538_DATA;
else
SET_M61538_DATA;
Delay5US();
CLEAR_M61538_CLK;
Delay5US();
Volume_Set <<= 1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -