⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 m61538.c

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用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 + -