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

📄 data_disposal.c

📁 此程序位单片机应用程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	//char series;//
	#define uch	unsigned char
	#include "STC89C51.h"
	sbit DATA=P0^0;
	sbit CLOCK=P0^1;
	sbit MDATA=P0^2;
	sbit MCLOCK=P0^3;
	sbit TDATA=P0^4;
	sbit TCLOCK=P0^5;
	bit series_sign;     //串口数据标志
	uch power_configure; //功放板配置(1-16)。没用
	uch source_configure[3]={0x06,0x02,0x08}; 
	//音源配置第一字节表示内置mp3音源数,
	//第二字节表示内部FM音源数
	//第三字节表示外部音源数
	//约定:对硬件而言内外音源配置都从头开始,中间不许有间隔	
	uch idata source_repertoire[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; 
	//外部音源节目数量,例:电视节目100个台;约定:至于何种音源本机不管。
	uch first_volume=16;	//第一进程音量
	uch second_volume=65;   //第二进程音量
	uch tone_h=0;	//高音音调
	uch tone_m=0;	//中音音调
	uch tone_l=0;	//低音音调
	uch mode=0;
	uch input=0;
	uch DDD=0;		        //3D
	uch BB=0;		        //重低音
	uch cyc=0;		        //循环
	uch surround;           //环绕声
	uch command;	        //命令字编码
	/********************************************/
	uch series_m4094_data;	   //控制八路音响主板4094的串行数据
	uch series_p4094_data;	   //控制功放板4094的串行数据
	uch series_p61510_data[3]; //控制功放板61510的串行数据
	uch room;                  //激活的的房间号,由收到的串口数据解析获得,0:表示没有房间信号
	uch series_sign_type;
	//////////////////////////////////////////////

    /*  command
    1:开电源
	2:关电源
	3:L通道第一进程音量增
	4:L通道第一进程音量减
	5:R通道第一进程音量增
	6:R通道第一进程音量减
	7:L通道第二进程音量增
	8:L通道第二进程音量减
	9:R通道第二进程音量增
	10:R通道第二进程音量减
	11:外部音源1
	12:外部音源2
	13:外部音源3
	14:外部音源4
	15:外部音源5
	16:外部音源6
	17:外部音源7
	18:外部音源8
	19:内部mp3音源
	20:内部FM音源
	21:音调低音上调
	22:音调低音下调
    23:音调中音上调
	24:音调中音下调
	25:音调高音上调
	26:音调高音下调
	27:音调同步上调
	28:音调同步下调
	29:重低音
	30:3D
	31:循环
	32:暂停
	33:节目上选
	34:节目下选
	35:指定节目
	36:静音
	*/
	/*音调,音源,音量需要保存每路的值*/

	uch command_source;     //音源选择命令编码
	uch power;              //功放板序列号0x00-0x0F
	uch add;				//音调值
	uch z;					//音调中间变量
	uch idata tone_data[16][3]={
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00,
								0x00,0x08,0x00
							};    //音调控制代码按四位一段,前三段分别表示高中低音调,第四段设定VOCAL开关开
	uch idata volume_data_L[16][3]={					 //左通道音量
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00
							};  //左通道音量控制代码,此处为最低

	/*********************************************
	16个房间右通道音量,10000100,00011101
	即第一进程音量初值为10000即16
	第二进程音量初值为1000001即65
	*********************************************/
	uch idata volume_data_R[16][3]={
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00,
								0x84,0x1D,0x00
							};  //右通道音量控制代码,此处为最低
 	uch source_data[3]={0x03,0xB3,0x00};  //音源控制代码 0xx3 0xB3 0x00。source_data[0]高四位是变量

	uch power_4094_data;                  //功放板4094控制代码
	uch main_4094_1_data;				  //主板4094_1即U1控制代码。控制功放电源。
	uch main_4094_2_data;				  //主板4094_2即U2控制代码。控制音源,3D,重低音,循环等
	uch power_4094[4]={1,3,2,0};		  //5-8路音源按顺序对应的4094前两位编码。此是由于音源电路设计没有规律不得已而为之

/*************状态编码,实际是位操作,不应理解为数*****************/
	uch power_state[2]={0x00,0x00};       //功放板电源状态										 http://www.icbc.com.cn/
	uch song_state;                       //曲目占用状态
	uch source_state[2]={0x00,0x00};      //音源占用状态。source_state[0]内部音源,source_state[1]外部音源
										  //音源占用状态也作为音源初选控制代码
/////////////////////////////////////////////////////////////
/*
source_old16房间原先选的音源状态
数组下标为房间编号或功放板序列号
数组元素内容:(按数组元素序列号)
0:没有;1-8:外部音源1 ;9-14:内部mp3音源;15-16:内部FM音源
*/
/////////////////////////////////////////////////////////////
    uch source_old[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};  //
	uch source_start;   //一级音源
	uch source_end; 	//二级音源

	uch input_volume;   //输入音量

	void com_parse(i)	 //命令字解析
	{
	 // switch(i)
	//  case 1;	;
	  
	}
	
	void report()  //状态报告
	{
	
	}
	
	void source_entrails_exterior() //内外音源选择
	{
	
	}
	
	void source_61510()             //61510做最终音源选择
	{
	
	}
	
	void hc4094_data()
	{
	
	}									   

  	uch tone_add(add)	  //音调增
	{
		 if (add<12)
		 if (add>=9)
		 	add++;
		 else if (add==0)
		    add=9;	
		 else if (add<=4)
			  if (add>0)
		    add--;
            z=add;
			return z;
	}

	uch tone_dec(add)	//音调减
    {
		if (add>=0)
		if (add<4)
		add++;
		if (add==9)
		add=0;
		if (add>9)
		add--;
		z=add;
		return z;
	}

/*	uch series_m4094_send()	 //主板4094串行数据发送程序
	{
	
	}*/
	
	uch series_p4094_send()	 //功放板4094串行数据发送程序
	{
     uch d,i;
	 for (i=0;i<8;i++)
		 {
	      
			  d=power_4094_data<<i;
			  if (d&0x80==0)
			  DATA=0;
			  else 
			  DATA=1;
			  CLOCK=1;
		//	  delay(5);
			  CLOCK=0;
		 }
//	 store(room);
			return z;
	}
	
/*	uch series_p61510_send() //主板61510串行数据发送程序
	{
	
	}*/
  


	//*****************************
	/*易犯错误:将case后冒号写成分号*/
	//*****************************
	//本函数旨在为发送准备格式满足的数据
	uch data_disp()	    //数据处理
	{
  	 uch k;
 	 for (k=0;k<100;k++)
 	 {
		 switch(command)
			 {

        	/***************** 电源开操作************************/
			 case 1:		                       
			 power_state[0]=power_state[0]|0x01<<(power-1);   // 既保持原有状态不变又增添新的路数
			 series_sign_type=1;

			 break ;

        	/***************** 电源关操作************************/
			 case 2:							   
			 power_state[0]=power_state[0]^0x01<<(power-1);
			 series_sign_type=1;
			 break;

            /*****************L通道第一进程音量增*****************/
     		 case 3:   							   //L通道第一进程音量增
				if (first_volume>0)
				{
					first_volume--;
					volume_data_L[room][0]=(first_volume<<3)|(second_volume>>4);
					series_sign_type=3;
				}
			 break;
	
             /*****************L通道第一进程音量减******************/
			 case 4:							   //L通道第一进程音量减
				if (first_volume<16)
				{
					first_volume++;
					volume_data_L[room][0]=(first_volume<<3)|(second_volume>>4);
					series_sign_type=3;
				}
			 break;

             /*******************R通道第一进程音量增****************/
			 case 5:							   //R通道第一进程音量增
				if (first_volume>0)
				{
					first_volume--;
					volume_data_R[room][0]=(first_volume<<3)|(second_volume>>4);
					series_sign_type=3;
				}
			 break;	

             /********************R通道第一进程音量减*****************/
			 case 6:							   //R通道第一进程音量减
				if (first_volume<16)
				{
					first_volume++;
					volume_data_R[room][0]=(first_volume<<3)|(second_volume>>4);
					series_sign_type=3;
				}
			 break;

//////////////////////第二进程音量调节//////////////////////////////////
/////音量数据数组中的元素由first_volume与second_volume构成first_volume
/////5位,second_volume7位.为保证数组中每个元素8位,将first_volume左移3位
/////空暇的地方给second_volume的高三位.作为数组的第一成员,数组的第二成员
/////由second_volume的后四位加固定码0x0D组成.
             /******************L通道第二进程音量增********************/
			 case 7:							   //L通道第二进程音量增
				if (second_volume>0)
				{
					second_volume--;
					volume_data_L[room][0]=(first_volume<<3)|(second_volume>>4);
					volume_data_L[room][1]=(second_volume>>3)|0x0D;
					series_sign_type=3;
				}
			 break;

             /********************L通道第二进程音量减*******************/
			 case 8:							   //L通道第二进程音量减
				if (first_volume<64)
				{
					second_volume++;
					volume_data_L[room][0]=(first_volume<<3)|(second_volume>>4);
					volume_data_L[room][1]=(second_volume>>3)|0x0D;
					series_sign_type=3;
				}
			 break;

              /********************R通道第二进程音量增*****************/
			 case 9:							   //R通道第二进程音量增
				if (first_volume>0)
				{
					second_volume--;
					volume_data_R[room][0]=(first_volume<<3)|(second_volume>>4);
					volume_data_R[room][1]=(second_volume>>3)|0x0D;
					series_sign_type=3;
				}
			 break;

             /***********************R通道第二进程音量减****************/
			 case 10:							   //R通道第二进程音量减
				if (first_volume<64)
				{
					second_volume++;
					volume_data_R[room][0]=(first_volume<<3)|(second_volume>>4);
					volume_data_R[room][1]=(second_volume>>3)|0x0D;
					series_sign_type=3;
				}
			 break;

////////本系统有8路音源,每路又可进行内部(前六路mp3或后两路fm)或外部选择。
////////M61510有5个音源输入,第5
////////假设音源选择采用搜索,先搜内部音源

//	uch power_configure;  //功放板配置(1-16)
//	uch source_configure[3]={0x06,0x02,0x08}; 
	//音源配置第一字节表示内置mp3音源数,
	//第二字节表示内部FM音源数
	//第三字节表示外部音源数
	//约定:对硬件而言内外音源配置都从头开始,中间不许有间隔	
//source_repertoire[8]音源节目选择表 
//外部音源节目数量,例:电视节目100个台;约定:至于何种音源本机不管。
//音源选择分两种情况。1:外部音源最多8类,每类最多占8个通道,最大组合为8 
//例:第一类DVD占两个通道,其他占3个,空闲3个
//2:内部音源按顺序选择	
/*
音源处理程序包含两个参数。
1.source_old,表示房间适用的音源号
2.source_state,表示音源占用情况
*/ 

//source_state[2]={0x00,0x00};      //音源占用状态。source_state[0]内部音源,source_state[1]外部音源

             /**************************外部音源1********************/
 			 case 11:				//外部音源1
				 {
					 if (source_old[0]!=0)
					 {
					     
						 source_state[1]=(source_state[1]&(~(0x01<<(source_old[0]-1))));//清除原先占用状态记录					 
					 
					 }												                    //

					 if ((source_state[1]|0x01)-source_state[1]>0)                      //若音源占用状态表明没被占用&-与,|-或,^-异或,~-求反
					{	  
						  source_state[1]=(source_state[1]|0x01);						//改写音源占用状态

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -