遥控调节音量(源程序代码,及实物图)
- 格式:doc
- 大小:4.37 MB
- 文档页数:6
2012级应用电子工程实践音量音调调节功放专业:电子信息工程年级:2012级应用电子组员:陈贤(2012021091)、申聪聪(2012021168)指导老师:王建波、徐承成2014年2月18日音量、音调调节功放摘要本电路是一套以STC89C52单片机作为控制核心,控制PT2314数字音频控制处理芯片的音频音色处理电路。
PT2314是一个采用CMOS工艺技术设计的四声道音质处理器IC芯片,芯片内部包含音量、低音、高音、通道均衡、前/后级衰减和响度处理;PT2314的所有功能均可以有I2C的形式由单片机STC89C52来控制完成,由程序控制完成多变的功能。
设计采用了液晶显示功能,其丰富的菜单选择,使整个操作过程更为人性化和可视化。
后级使用LM1875为功放芯片,其在音频应用场合提供非常底的失真度和高质量的音色,还有高增益、快转换速率、大输出电压摆幅、大电流能力和非常宽的电源范围等特性。
关键词: PT2314、LM1875、音量音调调节、STC89C52目录引言 (5)1系统方案 (5)1.1.音量音调调节模块的论证与选择 (5)1.2.功率放大模块的论证与选择 (6)1.3.麦克风前置放大模块的选择 (6)1.4. LCD显示模块的论证与选择 (6)1.4.电源模块的论证与选择 (7)1.5.单片机控制模块的论证与选择 (7)2.电路与程序设计 (8)2.1.电路的设计 (8)2.1.1.系统总体框图 (8)2.1.2音量音调调节子系统框图与电路原理图 (8)2.1.3 功率放大子系统框图与电路原理图 (10)2.1.4电源 (11)2.1.5麦克风前置放大电路子系统框图与电路原理图 (11)2.2程序的设计 (11)2.2.1程序功能描述与设计思路 (11)2.2.2程序流程图 (12)3测试方案与测试结果 (13)3.1测试方案: (13)3.2 测试仪器: (13)3.3 测试结果 (13)3.3.1测试结果(数据) (13)3.3.2测试分析与结论 (14)引言功率放大器是把来自音源或前级放大器的弱信号放大,推动音箱放声。
Wm8731 I2C控制模块module x(clock_50m,i2c_sclk,i2c_sdat,reset_n,ack,tr_end,start,config_step,reg_index,key1,i2c_data,reg2_data,clock_20k,hex1,hex2,xs1,xs2);input clock_50m;input reset_n,key1;output i2c_sclk,ack,tr_end,start,clock_20k;output[1:0] config_step;output[3:0] reg_index;output[23:0]i2c_data;output[15:0] reg2_data; //输出声道output[6:0] hex1,hex2; //七段码显示output[2:0] xs1; //LED显示output[3:0] xs2;reg[6:0] hex1,hex2;inout i2c_sdat;reg clock_20k;reg [15:0]clock_20k_cnt;reg [1:0]config_step;reg [3:0]reg_index;reg [23:0]i2c_data;reg [15:0]reg_data;reg start,bz,bx;reg[15:0] reg2_data;wire ack;wire tr_end;wire[2:0] xs1;wire[3:0] xs2;i2c u1(.clock_i2c(clock_20k),.reset_n(reset_n),.ack(ack),.i2c_data(i2c_data),.start(start),.tr_end(tr_end),.i2c_sclk(i2c_sclk),.i2c_sdat(i2c_sdat));assign {xs1,xs2}=reg2_data[6:0];always@(posedge clock_50m or negedge reset_n) //产生i2c控制时钟-20khzbeginif(!reset_n)beginclock_20k<=0;clock_20k_cnt<=0;endelse if(clock_20k_cnt<2499)clock_20k_cnt<=clock_20k_cnt+1;elsebeginclock_20k<=!clock_20k;clock_20k_cnt<=0;endendalways@(posedge clock_20k or negedge reset_n) //配置过程控制if(!reset_n)beginconfig_step<=0;start<=0;reg_index<=0;reg2_data<=16'h054d;bz<=1'b0;bx<=1'b1;endelse if(!key1)beginif(bx==1)beginbx<=0;config_step<=0;start<=0;reg_index<=0;beginif(bz==0)beginif(reg2_data[6:0]==7'b1111111)bz<=1'b1;elsereg2_data[6:0]<=reg2_data[6:0]+5;endelse if(bz==1)beginif(reg2_data[6:0]<=7'b0101111)bz<=1'b0;elsereg2_data[6:0]<=reg2_data[6:0]-5;endendendendelse if(clock_20k)beginif(key1==1)bx<=1'b1;if(reg_index<10)begincase(config_step)0:begini2c_data<={8'h34,reg_data};start<=1;config_step<=1;end1:if(tr_end)beginif(!ack)beginconfig_step<=2;start<=0;endelsebeginconfig_step<=0;start<=0;endend2:beginreg_index<=reg_index+1;config_step<=0;endendcaseendendalways@(reg_index)begincase(reg_index)0:reg_data<=16'h001f;1:reg_data<=16'h021f;2:reg_data<=16'h067f;3:reg_data<=reg2_data;4:reg_data<=16'h08c8;5:reg_data<=16'h0a06;6:reg_data<=16'h0c00;7:reg_data<=16'h0e01;8:reg_data<=16'h1002;9:reg_data<=16'h1201;default:reg_data<=16'h001a;endcaseendalways@(xs1 or xs2)begincase(xs1)3'b000: hex1= 7'b100_0000; //03'b001: hex1= 7'b111_1001; //13'b010: hex1= 7'b010_0100; //23'b011: hex1= 7'b011_0000; //33'b100: hex1= 7'b001_1001; //43'b101: hex1= 7'b001_0010; //53'b110: hex1= 7'b000_0010; //63'b111: hex1= 7'b111_1000; //7default: hex1= 7'b111_1111; //default endcasecase(xs2)4'b0000: hex2= 7'b100_0000; //04'b0001: hex2= 7'b111_1001; //14'b0010: hex2= 7'b010_0100; //24'b0011: hex2= 7'b011_0000; //34'b0100: hex2= 7'b001_1001; //44'b0101: hex2= 7'b001_0010; //54'b0110: hex2= 7'b000_0010; //64'b0111: hex2= 7'b111_1000; //74'b1000: hex2= 7'b000_0000; //84'b1001: hex2= 7'b001_1000; //94'b1010: hex2= 7'b000_1000; //A4'b1011: hex2= 7'b000_0011; //B4'b1100: hex2= 7'b100_0110; //C4'b1101: hex2= 7'b010_0001; //D4'b1110: hex2= 7'b000_0110; //E4'b1111: hex2= 7'b000_1110; //Fdefault: hex2= 7'b111_1111; //defaultendcaseendendmoduleI2C控制字(例化模块)module i2c(clock_i2c, //wm8731控制接口传输所需时钟,0-400khz,此处为20khz reset_n,ack, //应答信号i2c_data, //sdin接口传输的24位数据start, //开始传输标志tr_end, //传输结束标志cyc_count,i2c_sclk, //FPGA与wm8731时钟接口i2c_sdat); //FPGA与wm8731数据接口input [23:0]i2c_data;input reset_n;input clock_i2c;output [5:0]cyc_count;output ack;input start;output tr_end;output i2c_sclk;inout i2c_sdat;reg [5:0] cyc_count;reg reg_sdat;reg sclk;reg ack1,ack2,ack3;reg tr_end;wire i2c_sclk;wire i2c_sdat;wire ack;assign ack=ack1|ack2|ack3;assign i2c_sclk=sclk|(((cyc_count>=4)&(cyc_count<=30))?~clock_i2c:0); assign i2c_sdat=reg_sdat?1'bz:0;always@(posedge clock_i2c or negedge reset_n)beginif(!reset_n)cyc_count<=6'b111111;else beginif(start==0)cyc_count<=0;else if(cyc_count<6'b111111)cyc_count<=cyc_count+1;endendalways@(posedge clock_i2c or negedge reset_n)beginif(!reset_n)begintr_end<=0;ack1<=1;ack2<=1;ack3<=1;sclk<=1;reg_sdat<=1;endelsecase(cyc_count)0:begin ack1<=1;ack2<=1;ack3<=1;tr_end<=0;sclk<=1;reg_sdat<=1;end 1:reg_sdat<=0; //开始传输2:sclk<=0;3:reg_sdat<=i2c_data[23];4:reg_sdat<=i2c_data[22];5:reg_sdat<=i2c_data[21];6:reg_sdat<=i2c_data[20];7:reg_sdat<=i2c_data[19];8:reg_sdat<=i2c_data[18];9:reg_sdat<=i2c_data[17];10:reg_sdat<=i2c_data[16];11:reg_sdat<=1; //应答信号12:begin reg_sdat<=i2c_data[15];ack1<=0;end13:reg_sdat<=i2c_data[14];14:reg_sdat<=i2c_data[13];15:reg_sdat<=i2c_data[12];16:reg_sdat<=i2c_data[11];17:reg_sdat<=i2c_data[10];18:reg_sdat<=i2c_data[9];19:reg_sdat<=i2c_data[8];20:reg_sdat<=1; //应答信号21:begin reg_sdat<=i2c_data[7];ack2<=0;end22:reg_sdat<=i2c_data[6];23:reg_sdat<=i2c_data[5];24:reg_sdat<=i2c_data[4];25:reg_sdat<=i2c_data[3];26:reg_sdat<=i2c_data[2];27:reg_sdat<=i2c_data[1];28:reg_sdat<=i2c_data[0];29:reg_sdat<=1; //应答信号30:begin ack3<=0;sclk<=0;reg_sdat<=0;end31:sclk<=1;32:begin reg_sdat<=1;tr_end<=1;endendcaseendendmodule。
C# 电脑音量大小控制源码备注:直接赋值代码即可用(作为资料保存不错)using System;usingSystem.Windows.Forms;usingControlTheVolume;namespace 电脑音量控制{public partial class Form1 : Form{public Form1(){ InitializeComponent(); }staticintvolumeValue = PC_VolumeControl.GetVolume();intdanqianYL;private void Form1_Load(object sender, EventArgs e){label2.Text = label1.Text = "初始系统音量为:" + PC_VolumeControl.GetVolume().ToString();//显示当前系统音量volumeValue = PC_VolumeControl.GetVolume();}private void button1_Click(object sender, EventArgs e){danqianYL = PC_VolumeControl.GetVolume();label2.Text = "当前系统音量为:" + danqianYL.ToString();PC_VolumeControl.SetVolume(danqianYL + 1000);}private void button2_Click(object sender, EventArgs e){danqianYL = PC_VolumeControl.GetVolume();label2.Text = "当前系统音量为:" + danqianYL.ToString();PC_VolumeControl.SetVolume(danqianYL - 1000);}private void button3_Click(object sender, EventArgs e){PC_VolumeControl.SetVolume(0);label2.Text = "当前系统音量为:" + PC_VolumeControl.GetVolume().ToString();}private void button4_Click(object sender, EventArgs e){try{int value = checked(int.Parse(textBox1.Text));PC_VolumeControl.SetVolume(value);}catch (Exception Ex){ MessageBox.Show(Ex.Message); }}}}//ControlTheVolume.cs类using System;usingSystem.Runtime.InteropServices;usingSystem.Windows.Forms;namespaceControlTheVolume{classPC_VolumeControl{privateconstint MMSYSERR_NOERROR = 0;privateconstint MAXPNAMELEN = 32;privateconstint MIXER_LONG_NAME_CHARS = 64;privateconstint MIXER_SHORT_NAME_CHARS = 16;privateconstint MIXER_GETLINEINFOF_COMPONENTTYPE = 0x3;privateconstint MIXER_GETCONTROLDETAILSF_VALUE = 0x0;privateconstint MIXER_GETLINECONTROLSF_ONEBYTYPE = 0x2;privateconstint MIXER_SETCONTROLDETAILSF_VALUE = 0x0;privateconstint MIXERLINE_COMPONENTTYPE_DST_FIRST = 0x0;privateconstint MIXERLINE_COMPONENTTYPE_SRC_FIRST = 0x1000;privateconstint MIXERCONTROL_CT_CLASS_FADER = 0x50000000;privateconstint MIXERCONTROL_CT_UNITS_UNSIGNED = 0x30000;privateconstint MIXERCONTROL_CONTROLTYPE_FADER = (MIXERCONTROL_CT_CLASS_FADER | MIXERCONTROL_CT_UNITS_UNSIGNED);privateconstint MIXERCONTROL_CONTROLTYPE_VOLUME = (MIXERCONTROL_CONTROLTYPE_FADER + 1);privateconstint MIXERLINE_COMPONENTTYPE_DST_SPEAKERS = (MIXERLINE_COMPONENTTYPE_DST_FIRST + 4);privateconstint MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 3);privateconstint MIXERLINE_COMPONENTTYPE_SRC_LINE = (MIXERLINE_COMPONENTTYPE_SRC_FIRST + 2);publicstructMixerCaps{publicintwMid; public intwPid; public intvDriverVersion;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAXPNAMELEN)]public string szPname; public intfdwSupport; public intcDestinations;}publicstruct Mixer{publicintcbStruct; public intdwControlID; public intdwControlType; publicintfdwControl; public intcMultipleItems;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_SHORT_NAME_CHARS)]public string szShortName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_LONG_NAME_CHARS)]public string szName; public intlMinimum; public intlMaximum;[MarshalAs(UnmanagedType.U4, SizeConst = 10)]publicint reserved;}publicstructMixerDetails{publicintcbStruct; public intdwControlID; public intcChannels;publicint item; public intcbDetails; public IntPtrpaDetails;}publicstructUnsignedMixerDetails { public intdwValue; }publicstructMixerLine{publicintcbStruct; public intdwDestination; public intdwSource;publicintdwLineID; public intfdwLine; public intdwUser; publicintdwComponentType; public intcChannels; public intcConnections; publicintcControls;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_SHORT_NAME_CHARS)]public string szShortName;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MIXER_LONG_NAME_CHARS)]public string szName; public intdwType; public intdwDeviceID;publicintwMid; public intwPid; public intvDriverVersion;[MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAXPNAMELEN)]public string szPname;}//定义监听变量publicstructLineControls{publicintcbStruct; public intdwLineID; public intdwControl;publicintcControls; public intcbmxctrl; public IntPtrpamxctrl;}[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerClose(inthmx);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetControlDetailsA(inthmxobj, ref MixerDetailspmxcd, intfdwDetails);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetDevCapsA(intuMxId, MixerCapspmxcaps, intcbmxcaps);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetID(inthmxobj, intpumxID, intfdwId);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetLineControlsA(inthmxobj, ref LineControlspmxlc, intfdwControls);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetLineInfoA(inthmxobj, ref MixerLinepmxl, intfdwInfo);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerGetNumDevs();[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerMessage(inthmx, intuMsg, int dwParam1, int dwParam2); [DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerOpen(out intphmx, intuMxId, intdwCallback, intdwInstance, intfdwOpen);[DllImport("winmm.dll", CharSet = CharSet.Ansi)]public static extern intmixerSetControlDetails(inthmxobj, ref MixerDetailspmxcd, intfdwDetails);private static boolGetMixer(inti, int type, intctrlType, out Mixer mixerControl, out intcurrVolume){int details;boolbReturn;currVolume = -1;LineControlslineControls = new LineControls();MixerLine line = new MixerLine();MixerDetailsmcDetails = new MixerDetails(); UnsignedMixerDetailsdetailsUnsigned = new UnsignedMixerDetails();mixerControl = new Mixer();//mixerline设置属性的对象line.cbStruct = Marshal.SizeOf(line);line.dwComponentType = type;details = mixerGetLineInfoA(i, ref line, MIXER_GETLINEINFOF_COMPONENTTYPE);if (MMSYSERR_NOERROR == details){intmcSize = 152;int control = Marshal.SizeOf(typeof(Mixer));lineControls.pamxctrl = Marshal.AllocCoTaskMem(mcSize);lineControls.cbStruct = Marshal.SizeOf(lineControls);lineControls.dwLineID = line.dwLineID;lineControls.dwControl = ctrlType;ontrols = 1;lineControls.cbmxctrl = mcSize;mixerControl.cbStruct = mcSize;details = mixerGetLineControlsA(i, ref lineControls, MIXER_GETLINECONTROLSF_ONEBYTYPE);if (MMSYSERR_NOERROR == details){bReturn = true;mixerControl = (Mixer)Marshal.PtrToStructure(lineControls.pamxctrl, typeof(Mixer));}else { bReturn = false; }intmcDetailsSize = Marshal.SizeOf(typeof(MixerDetails));intmcDetailsUnsigned = Marshal.SizeOf(typeof(UnsignedMixerDetails)); mcDetails.cbStruct = mcDetailsSize;mcDetails.dwControlID = mixerControl.dwControlID;mcDetails.paDetails = Marshal.AllocCoTaskMem(mcDetailsUnsigned);hannels = 1;mcDetails.item = 0;mcDetails.cbDetails = mcDetailsUnsigned;details = mixerGetControlDetailsA(i, ref mcDetails, MIXER_GETCONTROLDETAILSF_VALUE);detailsUnsigned = (UnsignedMixerDetails)Marshal.PtrToStructure(mcDetails.paDetails,typeof(UnsignedMixerDetails));currVolume = detailsUnsigned.dwValue;returnbReturn;}bReturn = false;returnbReturn;}/// <summary>///方法将该值设置为一个音量控制/// </summary>private static boolSetMixer(inti, Mixer mixerControl, intvolumeLevel){boolbReturn;int details;MixerDetailsmixerDetails = new MixerDetails();UnsignedMixerDetails volume = new UnsignedMixerDetails();mixerDetails.item = 0;mixerDetails.dwControlID = mixerControl.dwControlID;mixerDetails.cbStruct = Marshal.SizeOf(mixerDetails);mixerDetails.cbDetails = Marshal.SizeOf(volume);hannels = 1;volume.dwValue = volumeLevel;mixerDetails.paDetails = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(UnsignedMixerDetails))); Marshal.StructureToPtr(volume, mixerDetails.paDetails, false);details = mixerSetControlDetails(i, ref mixerDetails, MIXER_SETCONTROLDETAILSF_VALUE);if (MMSYSERR_NOERROR == details){ bReturn = true; }else{ bReturn = false; }returnbReturn;}/// <summary>/////获取音量/// </summary>public static intGetVolume(){intcurrVolume;intmixerControl;Mixer mixer = new Mixer();mixerOpen(out mixerControl, 0, 0, 0, 0);int type = MIXERCONTROL_CONTROLTYPE_VOLUME;GetMixer(mixerControl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, type, out mixer, out currVolume);mixerClose(mixerControl);returncurrVolume;}/// <summary>/// 设置音量大小/// </summary>/// <param name="volumeLevel">音量大小</param>public static void SetVolume(intvolumeLevel){try{intcurrVolume;intmixerControl;Mixer volumeControl = new Mixer();mixerOpen(out mixerControl, 0, 0, 0, 0);intcontrolType = MIXERCONTROL_CONTROLTYPE_VOLUME;GetMixer(mixerControl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, controlType, out volumeControl, out currVolume);if (volumeLevel>volumeControl.lMaximum){ volumeLevel = volumeControl.lMaximum; }else if (volumeLevel<volumeControl.lMinimum){ volumeLevel = volumeControl.lMinimum; }SetMixer(mixerControl, volumeControl, volumeLevel);GetMixer(mixerControl, MIXERLINE_COMPONENTTYPE_DST_SPEAKERS, controlType, out volumeControl, out currVolume);if (volumeLevel != currVolume){ throw new Exception("不能设置音量"); }mixerClose(mixerControl);}catch (Exception ex){ MessageBox.Show(ex.Message); }} }}。
功放前级程序(带遥控)源程序:;----------------功---------能--------------------------------------;*****本*****机*****石*****英*****晶******体******24MHz*****;功放前级三路音源选择,P2.0~2.2为控制输出,低电平有效;主音量/低音/高音/话筒音量,四组控制,P3.4~3.7为控制输出;P0口为主音量/低音/高音/话筒音量控制的级数显示;P1.0~P1.5的输出为主音量/低音/高音/话筒音量63级控制,由电阻组成的D/A转换;P1.6,P1.7分别为显示管的控制位;P0.7为主音量/低音/高音/话筒音量,四组控制指示公共脚;P2.3为等响度控制输出高电平及指示;P2.4为3D控制输出高电平及指示;P2.5为电源控制输出及指示;P2.6为外接按制加;P2.7为外接按制减;P3.0为外接按制选择主音量/低音/高音/话筒音量;P3.1为外接按制选择音源;P3.2接遥控接收头;---------------------------------------------------------------------Counter EQU 59H ;计数器,显示程序通过它得知现正显示哪个数码管FIRST EQU P1.7 ;第一位数码管的位控制SECOND EQU P1.6 ;第二位数码管的位控制LEDH EQU P0.7 ;主音量/低音/高音/话筒音量显示控制位DISPBUFF EQU 5AH ;显示缓冲区为5AH和5BHIN_SET EQU 21H ;输入选择缓冲MUTE EQU 22H ;静音选择缓冲POWER EQU 23H ;电源开关选择缓冲VOL EQU 24H ;主音量选择缓冲BASS EQU 25H ;低音选择缓冲TRS EQU 26H ;高音选择缓冲MIC EQU 27H ;话筒音量选择缓冲LUO EQU 28H ;等响度选择缓冲D3D EQU 29H ;3D选择缓冲LED_DATA EQU 30H ;主音量/低音/高音/话筒音量显示缓冲SDA24 EQU P3.4 ;接24C08的SDASCLK24 EQU P3.5 ;接24C08的SCLKORG 0000HAJMP MAINORG 0003H ;外部中断INT0入口地址AJMP INT ;转中断服务子程序ORG 001BH ;定时器T1的入口LJMP DISP ;显示程序ORG 30HMAIN: ;初始化MOV 1CH,#0FFH ;MOV P3,#0FFH ;MOV P2,#0FFH ;MOV P0,#0FFH ;MOV MUTE,#0 ;MOV POWER,#0 ;MOV R6,#0 ;MOV LUO,#0 ;MOV D3D,#0 ;MOV IN_SET,#0 ;MOV SP,#5FH ;设置堆栈MOV TMOD,#00010000B ;定时器T1工作于模式1(16位定时/计数模式)MOV TH1,#HIGH(65536-2000)MOV TL1,#LOW(65536-2000)SETB TR1 ;定时器T1开始运行SETB EA ;打开CPU总中断请求SETB ET1 ;定时器T1允许SETB IT0 ;设定INT0的触发方式为脉冲负边沿触发SETB EX0 ;打开INT0中断请求MOV Counter,#0 ;计数器初始化NOP ;延时读24C08NOPNOPNOPNOPNOPNOPNOPMOV A,#24H ;读主音量数地址LCALL RD24MOV VOL,AMOV P1,VOL ;MOV R7,VOL ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bCLR P3.5 ;开机初始为音量状态CLR P3.4 ;CLR P3.6 ;SETB P3.7 ;CLR P2.0SETB P2.1SETB P2.2MOV LED_DA TA,#0FEH ;DSP:MOV 12H,#9 ;将遥控器键值转化成0~9MOV DPTR,#TAB1 ;调用遥控键值表VV: ;MOV A,12H ;MOVC A,@A+DPTR ;XRL A,1CH ;JZ ABC ;DJNZ 12H,VV ;ABC: ;MOV A,12H ;MOV R5,1CH ;CJNE R5,#00,CH_AUTO;避免保持电容电压跌落AJMP DSPCH_AUTO:LCALL YS4 ;LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL DELAY2 MOV A,#24H LCALL RD24 LCALL YS4 ; MOV P1,ACLR P3.4 ; CLR P3.5 ; CLR P3.6 ; SETB P3.7 ; LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL DELAY2 MOV A,#25H LCALL RD24 LCALL YS4 ; MOV P1,ACLR P3.4 ; CLR P3.5 ; CLR P3.7 ; SETB P3.6 ; LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4LCALL DELAY2 MOV A,#26H LCALL RD24 LCALL YS4 ; MOV P1,ACLR P3.4 ; CLR P3.7 ; CLR P3.6 ; SETB P3.5 ; LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL YS4 LCALL DELAY2 MOV A,#27H LCALL RD24 LCALL YS4 ; MOV P1,ACLR P3.7 ; CLR P3.5 ;CLR P3.6 ;SETB P3.4 ;LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4LCALL YS4AJMP DSPINT: ;CLR EX0 ;暂时关闭INT0中断请求MOV 16H,#10SB: ;ACALL YS1 ;调用882微秒延时子程序JB P3.2,EXIT ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序DJNZ 16H, SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序 JNB P3.2, $ ;等待高电平避开9毫秒低电平引导脉冲ACALL YS2 ;延时4.74毫秒判断是否连发JB P3.2,EXIT ;MOV R1,#1AH ;设定1AH为起始RAM区MOV 12H,#4 ;接收从1AH到1DH的4个内存,用于存放操作码和操作反码PP: ;MOV 13H,#8 ;每组数据为8位JJJJ: ;JNB P3.2,$ ;等待地址码第一位的高电平信号LCALL YS1 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态 MOV C,P3.2 ;将P3.2引脚此时的电平状态0或1存入C中JNC UUU ;如果为0就跳转到UUUJB P3.2,$ ;检测到高电平1的话延时882微秒等待脉冲高电平结束UUU: ;MOV A,@R1 ;将R1中地址的给ARRC A ;将C中的值0或1移入A中的最低位MOV @R1,A ;将A中的数暂时存放在R1数值的内存中DJNZ 13H,JJJJ ;接收满8位换一个内存INC R1 ;对R1中的值加1,换下一个RAMDJNZ 12H,PP ;接收完8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH中 MOV A,1CH ;A的数就是解码数AJMP BIJIAO ;如果相等说明解码正确MOV A,1AH ;进行代码识别XRL A,#0 ;判断1AH的值是否等于00000000JNZ EXI ;如果不同则无效将1CH清零MOV A,1BH ;比较低8位地址XRL A,#B ;再判断高8位地址是否正确JNZ EXI ;如果不相等说明解码失败退出解码程序MOV A,1CH ;比较数据码和数据反码是否正确?CPL A ;XRL A,1DH ;将1CH的值取反后和1DH比较不同则无效丢弃核对数据是否准确 JNZ EXI ;如果不同则无效将1CH清零AJMP EXIT ;如果不相等说明解码失败退出解码程序EXI: ;MOV 1CH,#0 ;EXIT: ;JB P2.6,QQ1 ;手动主计数加LCALL YS3 ;MOV A,#06 ;LCALL YS3 ;AJMP KU ;QQ1:JB P2.7,QQ2 ;手动主计数减LCALL YS3 ;MOV A,#68 ;LCALL YS3 ;AJMP TT1 ;QQ2: ;JNB P3.0,QQ3 ;手动选择控制:主音量/低音/高音/话筒音量JNB P3.1,QQ4 ;手动选择音源:1/2/3SETB EX0 ;中断SETB P3.2 ;RETIQQ3: ;LCALL YS4 ;AJMP M_SET ;选择控制:主音量/低音/高音/话筒音量SETB EX0 ;允许中断SETB P3.2 ;RETIQQ4: ;LCALL YS4 ;LCALL YS4 ;LCALL YS4 ;LCALL YS4 ;LCALL YS4 ;AJMP IN_KEY ;选择音源1/2/3SETB EX0 ;允许中断SETB P3.2 ;RETIBIJIAO:MOV A,1CH ;按键数值判断执行;------------------------------------------------------------;以下为加主音量/低音/高音/话筒级数;------------------------------------------------------------CJNE A,#03,BUP ;主音量加AJMP V_UPBUP:CJNE A,#15,TUP ;低音加AJMP B_UPTUP:CJNE A,#10,MUP ;高音加AJMP T_UPMUP:CJNE A,#30,VDN ;MIC音量加AJMP M_UPVDN:CJNE A,#02,BDN ;主音量减AJMP V_DNBDN:CJNE A,#66,TDN ;低音减AJMP B_DNTDN:CJNE A,#14,MDN ;高音减AJMP T_DNMDN:CJNE A,#26,KU ;MIC音量减AJMP M_DNKU:CJNE A,#06,TT0 ;遥控键值等3时,执行主计数器加CJNE R6,#0,dd1 ;如果R6的值等0,主计数器为主音量控制V_UP: ;MOV A,#24H ;读地址LCALL RD24MOV VOL,AMOV R7,VOL ;CJNE R7,#63,VOL_UP ;预设音量控制为64级(0-63)LCALL YS4 ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXITTT0: ;跳转超范围,不得不加AJMP TT1 ;转到主计数器减VOL_UP:INC VOL ;主音量加1MOV A,VOLMOV B,AMOV A,#24HLCALL WT24MOV P1,VOL ;把主音量的数送到P1口进行D/A转换MOV R7,VOL ;显示当前的调节级数MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FEH ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXITdd1:CJNE R6,#1,Dd2 ;如果R6的值等1,主计数器为低音控制B_UP:MOV A,#25H ;读地址LCALL RD24MOV BASS,AMOV R7,BASS ;CJNE R7,#63,BASS_UP ;预设低音控制为64级(0-63)LCALL YS4 ;CLR P3.4 ;CLR P3.5 ;CLR P3.7 ;SETB P3.6 ;AJMP EXITBASS_UP:INC BASS ;低音加1MOV A,BASSMOV B,AMOV A,#25HLCALL WT24MOV P1,BASS ;把低音控制的数送到P1口进行D/A转换MOV R7,BASS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FDH ;CLR P3.4 ;CLR P3.5 ;CLR P3.7 ;SETB P3.6 ;AJMP EXITdd2:CJNE R6,#2,Dd3 ;如果R6的值等2,主计数器为高音控制T_UP:MOV A,#26H ;读地址LCALL RD24MOV TRS,AMOV R7,TRS ;CJNE R7,#63,TRS_UP ;预设高音控制为64级(0-63)LCALL YS4 ;CLR P3.4 ;CLR P3.7 ;CLR P3.6 ;SETB P3.5 ;AJMP EXITTRS_UP:INC TRS ;高音加1MOV A,TRSMOV B,AMOV A,#26HLCALL WT24MOV P1,TRS ;把高音控制的数送到P1口进行D/A转换MOV R7,TRS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FBH ;CLR P3.4 ;CLR P3.7 ;CLR P3.6 ;SETB P3.5 ;AJMP EXITdd3:CJNE R6,#3,Dd4 ;如果R6的值等3,主计数器为话筒音量控制M_UP:MOV A,#27H ;读地址LCALL RD24MOV MIC,AMOV R7,MIC;CJNE R7,#63,MIC_UP ;预设话筒音量控制为64级(0-63)LCALL YS4 ;CLR P3.7 ;CLR P3.5 ;CLR P3.6 ;SETB P3.4 ;AJMP EXITMIC_UP:INC MIC ;话筒音量加1MOV A,MICMOV B,AMOV A,#27HLCALL WT24MOV P1,MIC ;把话筒音量控制的数送到P1口进行D/A转换MOV R7,MIC ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0F7H ;CLR P3.7 ;CLR P3.5 ;CLR P3.6 ;SETB P3.4 ;AJMP EXITdd4:MOV R6,#0 ;只有4组,R6清0,返回主音量控制MOV A,#24H ;读地址LCALL RD24MOV VOL,AMOV P1,VOLMOV R7,VOL ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FEH ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXIT;----------------------------------------------------------------;以上为加主音量/低音/高音/话筒级数;----------------------------------------------------------------以下为减主音量/低音/高音/话筒级数;----------------------------------------------------------------TT1:CJNE A,#68,TT02 ;遥控键值等2时,执行主计数器减CJNE R6,#0,d_1 ;如果R6的值等0,主计数器为主音量控制V_DN:MOV A,#24H ;读地址LCALL RD24MOV VOL,AMOV R7,VOLCJNE R7,#00,VOL_DN ;R7的值等0时,减制无作用,防止由最低跳到最大CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXITTT02: ;跳转超范围,不得不加AJMP TT2VOL_DN:DEC VOL ;主音量减1MOV A,VOLMOV B,AMOV A,#24HLCALL WT24MOV P1,VOL ;把主音量的数送到P1口进行D/A转换MOV R7,VOL ;显示当前的调节级数MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FEH ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXITd_1:CJNE R6,#1,d_2 ;B_DN:MOV A,#25H ;读地址LCALL RD24MOV BASS,AMOV R7,BASSCJNE R7,#00,BASS_DN ;CLR P3.4 ;CLR P3.5 ;CLR P3.7 ;SETB P3.6 ;AJMP EXITBASS_DN:DEC BASS;MOV A,BASSMOV B,AMOV A,#25HLCALL WT24MOV P1,BASSMOV R7,BASS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FDH ;CLR P3.4 ;CLR P3.5 ;CLR P3.7 ;SETB P3.6 ;AJMP EXITd_2:CJNE R6,#2,d_3 ;T_DN:MOV A,#26H ;读地址LCALL RD24MOV TRS,AMOV R7,TRSCJNE R7,#00,TRS_DN ;CLR P3.4 ;CLR P3.7 ;CLR P3.6 ;SETB P3.5 ;AJMP EXITTRS_DN:DEC TRS ;MOV A,TRSMOV B,AMOV A,#26HLCALL WT24MOV P1,TRSMOV R7,TRS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FBH ;CLR P3.4 ;CLR P3.7 ;CLR P3.6 ;SETB P3.5 ;AJMP EXITd_3:CJNE R6,#3,d_4 ;M_DN:MOV A,#27H ;读地址LCALL RD24MOV MIC,AMOV R7,MICCJNE R7,#00,MIC_DN ;CLR P3.7 ;CLR P3.5 ;CLR P3.6 ;SETB P3.4 ;AJMP EXITMIC_DN:DEC MIC ;MOV A,MICMOV B,AMOV A,#27HLCALL WT24MOV P1,MICMOV R7,MIC ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0F7H ;CLR P3.7 ;CLR P3.5 ;CLR P3.6 ;SETB P3.4 ;AJMP EXITd_4:MOV R6,#0 ;MOV A,#24H ;读地址LCALL RD24MOV VOL,AMOV P1,VOL ;MOV R7,VOL ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FEH ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXIT;-------------------------------------------------------------------------- ;以上为减主音量/低音/高音/话筒级数;-------------------------------------------------------------------------- ;以下为直选主音量/低音/高音/话筒音量;-------------------------------------------------------------------------- TT2:CJNE A,#17,TT4 ;遥控键值等17时,直选主音量控制MOV R6,#0MOV A,#24H ;读地址LCALL RD24MOV VOL,AMOV P1,VOLMOV R7,VOL ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FEH ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;AJMP EXITTT4:CJNE A,#21,TT5 ;遥控键值等21时,直选低音控制MOV R6,#1MOV A,#25H ;读地址LCALL RD24MOV BASS,AMOV P1,BASSMOV R7,BASS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FDH ;CLR P3.4 ;CLR P3.5 ;CLR P3.7 ;SETB P3.6 ;AJMP EXITTT5:CJNE A,#23,TT6 ;遥控键值等23时,直选高音控制MOV R6,#2MOV A,#26H ;读地址LCALL RD24MOV TRS,AMOV P1,TRS ;MOV R7,TRS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FBH ;CLR P3.4 ;CLR P3.6 ;CLR P3.7 ;SETB P3.5 ;AJMP EXITTT6:CJNE A,#18,TT7 ;遥控键值等18时,直选话筒控制MOV R6,#3MOV A,#27H ;读地址LCALL RD24MOV MIC,AMOV P1,MICMOV R7,MIC ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0F7H ;CLR P3.5 ;CLR P3.6 ;CLR P3.7 ;SETB P3.4 ;AJMP EXIT;---------------------------------------------------------;以上为直选主音量/低音/高音/话筒;---------------------------------------------------------;以下为电源开关;---------------------------------------------------------TT7:CJNE A,#20,TT8 ;遥控键值等20时,开关电源控制INC POWER ;MOV A,POWER ;CJNE A,#1,POWER_ON ;CLR P2.5 ;关AJMP EXITPOWER_ON:CJNE A,#2,POWER_OFF ;SETB P2.5 ;开MOV POWER,#0 ;AJMP EXITPOWER_OFF:MOV POWER,#0 ;SETB P2.5 ;AJMP EXIT;---------------------------------------------------;以上为电源开关;---------------------------------------------------;以下为直选音源;---------------------------------------------------TT8:CJNE A,#09,TT9 ;遥控键值等9时,直选音源3CLR P2.0SETB P2.1SETB P2.2AJMP EXITTT9:CJNE A,#29,TT10 ;遥控键值等29时,直选音源2 SETB P2.0CLR P2.1SETB P2.2AJMP EXITTT10:CJNE A,#31,TT11 ;遥控键值等31时,直选音源1 SETB P2.0SETB P2.1CLR P2.2AJMP EXIT;-----------------------------------------------------;以上为直选音源;-----------------------------------------------------;以上为等响度控制;-----------------------------------------------------TT11:CJNE A,#13,TT12 ;遥控键值等13时,选择等响INC LUOMOV A,LUOCJNE A,#1,LUO1 ;CLR P2.3AJMP EXITLUO1:CJNE A,#2,LUO2 ;MOV LUO,#0 ;SETB P2.3AJMP EXITLUO2:MOV LUO,#0 ;AJMP EXIT;------------------------------------------------------;以上为等响度控制;------------------------------------------------------;以下为3D选择;------------------------------------------------------TT12:CJNE A,#25,TT13 ;遥控键值等25时,选择3D控制INC D3DMOV A,D3D ;CJNE A,#1,D3D1 ;CLR P2.4AJMP EXITD3D1:CJNE A,#2,D3D2 ;MOV D3D,#0 ;SETB P2.4AJMP EXITD3D2:MOV D3D,#0 ;SETB P2.4AJMP EXIT;---------------------------------------------------------;以上为3D选择;---------------------------------------------------------;以下为静音选择;---------------------------------------------------------TT13:CJNE A,#74,OK ;遥控键值等74时,选择静音控制INC MUTEMOV A,MUTECJNE A,#1,MUTE1 ;CLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;MOV LED_DA TA,#07FH ;静音指示灯亮MOV P1,#00H ;暂时关闭P1输出AJMP EXITMUTE1:CJNE A,#2,MUTE2 ;主音量回复正常MOV MUTE,#0 ;MOV P1,VOL ;MOV R7,VOL ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV ABMOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bMOV LED_DA TA,#0FEH ;AJMP EXITMUTE2:MOV MUTE,#0 ;为下次按静音制做准备MOV LED_DA TA,#0FEH ;AJMP EXITOK:AJMP EXIT;--------------------------------------------------------;以上为静音选择;--------------------------------------------------------;以下为手选音源选择;--------------------------------------------------------IN_KEY:INC IN_SET ;音源选择MOV A,IN_SET ;CJNE A,#1,IN_2 ;CLR P2.0SETB P2.1SETB P2.2MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bAJMP EXITIN_2:CJNE A,#2,IN_3 ;CLR P2.1 ;SETB P2.2 ;SETB P2.0 ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bAJMP EXITIN_3:CJNE A,#3,IN_4 ;MOV IN_SET,#0 ;CLR P2.2 ;SETB P2.1 ;SETB P2.0 ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bAJMP EXITIN_4:MOV IN_SET,#0 ;CLR P2.0SETB P2.1SETB P2.2MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bAJMP EXIT;----------------------------------------------------;以上为手选音源选择;----------------------------------------------------;以下为手选主音量/低音/高音/话筒;--------------------------------------------------------M_SET:LCALL YS4 ;LCALL YS4 ;INC R6 ;CJNE R6,#1,key1 ;R6等1为低音控制MOV LED_DA TA,#0FDH ;LCALL DELAY2MOV A,#25H ;读地址LCALL RD24MOV BASS,AMOV P1,BASSMOV R7,BASS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bCLR P3.4 ;P3.0为话筒指示CLR P3.5 ;P3.5为高音指示CLR P3.7 ;P3.7为主音量指示SETB P3.6 ;P3.6为低音指示, 低音指示灯亮AJMP EXITkey1:CJNE R6,#2,key2 ;R6等2为高音控制MOV LED_DA TA,#0FBH ;LCALL DELAY2MOV A,#26H ;读地址LCALL RD24MOV TRS,AMOV P1,TRSMOV R7,TRS ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bCLR P3.4 ;CLR P3.6 ;CLR P3.7 ;SETB P3.5 ;高音指示灯亮AJMP EXITkey2:CJNE R6,#3,key3 ;R6等3为话筒控制MOV LED_DA TA,#0F7H ;LCALL DELAY2MOV A,#27H ;读地址LCALL RD24MOV MIC,AMOV P1,MICMOV R7,MIC ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bCLR P3.5 ;CLR P3.6 ;CLR P3.7 ;SETB P3.4 ;话筒指示灯亮AJMP EXITkey3:MOV R6,#0 ;R6等0为主音量控制MOV LED_DA TA,#0FEH;LCALL DELAY2MOV A,#24H ;读地址LCALL RD24MOV VOL,AMOV P1,VOLMOV R7,VOL ;MOV A,R7 ;将R7中的十六进制数转换成10进制MOV B,#10 ;10进制/10=10进制DIV AB ;MOV DISPBUFF+1,A ;十位在aMOV DISPBUFF,B ;个位在bCLR P3.4 ;CLR P3.5 ;CLR P3.6 ;SETB P3.7 ;主音量指示灯亮AJMP EXIT;--------------------------------------------------------;以上为选择主音量/低音/高音/话筒;--------------------------------------------------------;延时子程序,(24MHz晶体)YS1: MOV 14H,#40 ;延时子程序1,精确延时882微秒D1: MOV 15H,#20DJNZ 15H,$DJNZ 14H,D1RETYS2: MOV 14H,#20 ;延时子程序2,精确延时4740微秒D2: MOV 15H,#235DJNZ 15H,$DJNZ 14H,D2RETYS3: MOV 14H,#4 ;延时子程序3,精确延时1000微秒D3: MOV 15H,#248DJNZ 15H,$DJNZ 14H,D3RETYS4: MOV R3,#255D4: MOV R4,#255DJNZ R4,$DJNZ R3,D4RET读24C08子程序;------------------------------------------------------RD24: PUSH ACC ;读24C08子程序。
详解音量控制器和音调控制器电路音量控制器1.典型双声道音量控制器电路图4-41所示是双声道音量控制器。
RP1-1和RP1-2是双联同轴电位器,用虚线表示这是一个同轴电位器,其中RP1-1是左声道音量电位器,RP1-2是右声道音量电位器。
图4-41 双声道音量控制器当音量调节中转动音量旋钮时,RP1-1和RP1-2的动片同步动作,动片向上滑动时动片输出信号增大,送到后面功率放大电路中的信号增大,音量增大,反之则减小。
重要提示音量控制器中采用Z(指数)型电位器,均匀转动音量电位器转柄时,动片与地端之间的阻值一开始上升较缓慢,后来阻值增大较快。
这样,较小音量时,馈入扬声器的电功率增大量变化较小,音量较大时馈入扬声器的电功率增大量上升很快,这与人耳的对数听觉特性恰好相反,这样在均匀转动音量电位器转柄时,人耳感觉到的音量是均匀上升的,如图4-42所示。
图4-42 曲线示意图2.电子音量控制器电路重要提示普通音量控制器电路结构简单,但存在一个明显的缺点,就是当机器使用时间较长以后,由于音量电位器的转动噪声会引起在调节音量时扬声器中出现“咔啦、咔啦”的噪声。
这是因为音量电位器本身直接参与了信号的传输,当动片与碳膜之间由于灰尘、碳膜磨损存在接触不良时,导致信号传输有中断,引起噪声。
采用电子音量控制器后,由于音频信号本身不通过音量电位器,而且可以采用相应的消除噪声措施,这样即使电位器动片接触不好时也不会引起明显的噪声。
另外,双声道电子音量控制器电路中可以用一只单联电位器同时控制左、右声道的音量。
图4-43所示是电子音量控制器电路。
VT1、VT2构成差分放大器,VT3构成VT1和VT2发射极回路恒流管,RP1是音量电位器。
图4-43 电子音量控制器电路音频信号传输线路是:音频信号Ui经C1耦合,加到VT1基极,经放大和控制后从其集电极输出。
图4-44所示是信号传输过程示意图。
电路工作原理是:VT1和VT2发射极电流之和等于VT3的集电极电流,而VT3集电极电流受RP1动片控制。
音量控制器————————————CI-VC4使用说明书-------------------------------版权归上海创见电子有限公司所有-------------------------------一、CI-VC4功能描述由iTRON研发的CI-VC4音量控制器是一款在线式可编程音量控制模块,主要用于多媒体控制系统,可实现对非平衡方式的音频信号进行增益的远程数字化调节。
信号增益的调节范围达-94dB-+30dB,具有静音设置、掉电直通功能。
该设备具有四路独立的声道,每一声道有相应的指示灯指示其工作状态。
各声道音量分为0~63共64个等级,音量为0时静音,为1时增益-94dB(即衰减94dB),为63时增益30dB,为48时增益为0dB,音量每加一级增益加2dB。
上电后各声道音量全为48,即增益0dB。
对单路或多路声道的音量调节和静音设置既可以使用按键手动操作,也可以使用发送RS-232串口命令的方式进行控制。
串口命令的控制代码为五字节等长指令,所有控制代码全部开放,采用与计算机兼容的波特率及通信协议(RS-232标准异步串行通信),使用于任何一种控制系统。
二、特性参数信号输入方式:非平衡信号输出方式:非平衡输入阻抗:10KΩ输出阻抗:600Ω最大输入信号电平:10V P-P最大输出信号电平:10V P-P增益调节范围:-94dB-+30dB最小增益调节幅度:2dB声道频响范围:10Hz-20KHz声道间信号串扰:-126dBFS最大总谐波失真:0.1%RS-485通信格式:9600-N-8-1连接端子:4PIN Mini Phoenix端子电源:12VDC0.5A最大功耗:3W工作环境温度:5℃-45℃工作环境湿度:10%-90%外形尺寸:1U高7英寸宽净重:1Kg三、操作说明1.前面板说明(请参见下图-1所示)图-1PWR为电源指示灯,接通直流12V电源后此指示灯常亮。
COM为通信指示灯,当音量控制器接收到或发送出数据时,此指示灯闪亮。
目录1 概述 (1)1.1设计目的 (1)1.2设计要求 (1)1.3设计方法 (1)2 系统总体方案 (2)2.1 设计思想 (2)2.2模块介绍 (3)3 各模块硬件设计 (4)3.1脉冲源电路图 (4)3.2锁存器电路 (4)3.3编码电路 (5)3.4译码显示电路 (6)3.5音量控制电路 (7)4软件仿真 (8)5 课程设计心得体会 (9)5.1设计中遇到的问题及解决方法 (9)5.2课程设计心得体会 (9)参考文献 (10)附:系统原理图 (11)1、概述1.1设计目的本课程设计是在前导验证性认知实验基础上,进行更高层次的命题设计实验,要求学生在教师指导下独立查阅资料、设计、安装和调试特定功能的电子电路。
培养学生利用模拟、数字电路知识,解决电子线路中常见实际问题的能力,使学生积累实际电子制作经验,目的在于巩固基础、注重设计、培养技能、追求创新、走向实用。
1.2设计要求设计一个带数字显示的8档音量控制器,要求实现以下功能:(1)用两个按键控制音量,一个用于增加音量,一个用于减小音量;(2)音量控制分为8档,每按键一下,增加或减小一档;(3)当音量增加(减小)到最大(最小)时,继续按音量增减开关无效,即音量被保持,不在继续增(减);(4)开机时自动恢复音量到最小状态;(5)用数码管显示音量的大小值,并随着音量的变化即时改变。
1.3 设计方法设计的音量调节器有两个按键和一个开关,:按“加音量”键能对输出音量进行增大,按“减音量”可以对输出音量进行减小,“开关机”音量调节器所在机器的开关机键,加减音量按键给“音量调节开关”有次序的脉冲高电位,根据加减按键所给的脉冲信号,“音量调节开关”将输入信号翻译成二进制代码同时送给“译码器”和“音量数字显示器”。
74LS193芯片的4个输出端分别接7448BCD 码七段译码驱动器的输入端,从而实现控制音量大小,同时通过BCD码显示译码器显示当前音量的大小档位,从而实现了题目所要求的功能。
给音响改装音量音调双控遥控电路TMH9838四位非锁编码遥控组件给音响改装音量音调双控遥控电路一. 音响音量音调电位器双控遥控模块电路TMH9838四位非锁编码遥控组件二. 通过分别遥控电机1、电机2的正反转实现对音量、音调的控制。
我发现很多电子爱好者在自制放大器时,音量都是手调的。
我的放大器音量也是自制手调,使用时感到不便。
因此在业余时间里,我用四位密码无线遥控发射、接收组件制作了一款音响音量遥控电路,在使用中感到很方便实用,想介绍给大家,让大家一起感受摩机的乐趣。
一、工作原理电路如附图所示:S为四位无线遥控发射器,Y为与发射器配对的接收模块。
Y的各输出端经BG1~BG5放大后,将四路互锁存数据控制输出端信号转换成非锁存形式,并通过继电器J1~J4对电机M1、M2进行正反控制。
M1控制主音量,M2控制高低音调。
见图1所示,其中电机M2电路相同,工作原理一样,所以未绘出。
当按下发射器S的A键时,Y的输出端A和I0端输出高电平,BG1和BG5导通。
J1吸合,M1得电工作, 手松开后,I0输出消失,J1断电电机M1释放停转。
同样,按下B、C、D键时,分别控制M1、M2反转、正转、反转。
电路重点在于继电器的连接,工作过程如图2所示:继电器触点①、③常闭,②、⑥常开,⑤、⑥相通,③、④是线圈。
把J1、J2或J3、J4组合构成电机的正反电路,J1、J2的①端相连接地,②端相连接电源。
当按下A键时,J1吸合,①、⑤端断开,②、⑥端导通,电源经②、⑥端和电机M1到J2的⑥、⑤、①端接地电机正转,放大器音量增加。
同样,按下B键时,J2吸合,②、⑥端吸合,电源经J2的②、⑥端和M1到⑥、⑤、①端接地,电机反转,放大器音量下降。
M2、J3、J4的工作原理相同。
二、元件的选择和制作A1、A2选用达华的TMH9838的6V四位无线电编码遥控组件。
V1~V5选用9013或其它硅NPN三极管,D1~D4用1W4148开关二极管,J1~J4采用6V的JRC-21F型小型电磁继电器,马达电位器可选用双联的,阻值根据自己功率电位器来选择。
单⽚机红外遥控电脑⾳源切换器单⽚机红外遥控电脑⾳源切换器 ⼀般的电脑声卡上只有⼀个LINE输⼊⼝⼀个扬⾳器输出⼝和⼀个MIC输⼊⼝(有些有LINE 输出⼝),如果我们要⽤声卡去连接多个⾳频设备进⾏输⼊录⾳或输出放⾳则会⽐较⿇烦,为此我设计制作了⼀个可⽤电脑程序控制也可以独⽴⼯作的红外遥控电脑⾳源切换器。
笔者曾使⽤过电脑并⾏端⼝中的数据⼝线(2-9引脚)制作过相似的制作,因并⼝在PC启动时数据⼝状态是不确定的,所以会造成开机时⾳源切换状态不确定。
这次的制作使⽤到单⽚机AT89C2051与PC串⼝通讯解决以上的问题,同时AT89C2051可以独⽴⼯作外理按键和红外接收头的信号,并作出相应的控制,这样该切换器可以脱离PC进⾏⼯作。
现在PC软件只做了对切换器和对声卡的控制。
1.⼯作原理与硬件电路 本⾳源切换器⽤⼀⽚AT89C2051做核⼼控制同时也负责通过串⼝进⾏与电脑的连接,为了能让其在脱离电脑也能进⾏控制作业,在电路中加⼊了四个按键和LED指⽰灯,电路中⽤了两⽚CD4066电⼦模拟开关做⾳源切换,可做到4路⽴体声输⼊1路输出。
在⼀般家庭的听⾳环境中,CD4066的信噪⽐和分离度基本上可以满⾜,如需要更⾼要求的⾳质可以把CD4066改换成⾼质量的⾳源控制电路。
图1:电路图(点击放⼤) 电路中选⽤11.0592MHz的晶振,这样可以⽅便产⽣标准的9600波特率。
AT89C2051串⼝通过⼀⽚MAX232转换成可与PC串⼝相连接的RS232信号。
IC5为⼀⽚CD4069六反相器,因51单⽚机上电复位后,IO⼝全置1,引脚⾼电平,如直接连接CD4066就会选通所有⾳源,所以要⽤反相器全部变为低电平去连接CD4066。
K1⾄K4为四个常开按键,分别控制四个⾳源,P1.0和P1.1要使⽤10K的上拉电阻把电平拉⾼,另两个不⽤也能正常⼯作。
K5为复位键,复位后切换状态为全部禁⽌。
红外遥控器选⽤SAA3010芯⽚的彩电遥控器。
自制音响遥控电路图在自制音响时为了使用方便而设计了一款遥控电路,采用易购的风扇ICBA5104/BA8206作控制芯片,通过合理设计,最大限度的发挥了该芯片的功能,经使用效果很好,现介绍给大家。
它能实现以下功能:①手控/遥控;②音量遥控;③音源选择;④延时关机;⑤开关机扬声器保护;⑥声光显示。
发射电路原理如图1所示。
接收和主控电路原理如图2所示。
IC2为风扇电路芯片。
本文将其工作原理介绍如下。
1.手控/遥控:按图1中的遥控键实现手控/遥控,方便使用。
2.音源选择:按开/选择键,IC2第13脚先输出低电平,使红色LED6点亮作电源接通显示,并使V4导通,K1得电吸合,将功放电源接通。
3秒后第13脚恢复为高电平,第14脚转为低电平,使绿色LED7点亮作音源1接通显示,V5导通,使K2、K3得电吸合,接通图2(a)中的音源1信号和电源。
因VD2作用,V4仍导通,使K1吸合接通功放电源。
同时经VD8也使K4得电吸合接通扬声器。
若要使用音源2,则需再按一下开/选择键,IC2第14脚又恢复为高电平而第12脚则为低电平。
蓝色LED5点亮作音源2显示,并使V3导通,K5得电吸合接通音源2电源,再经VD9使K4吸合接通扬声器。
此时K2释放接通音源2的信号,K3释放断开音源1的电源。
想要静音只需按开/选择键,使红色LED6常亮即可。
因BA8206具有记忆功能,下次开机时会自动恢复上次关机前的工作状态。
如在关机前是听音源2,则下次开机先由第13脚为低电平,3秒后第12脚转为低电平接通音源2,方便使用而不必每次开机都重新选择音源。
3.音量遥控:图2b中IC2第20、11脚为独立的两个双稳态输出端,调音量大小时如按一下音量+键,IC2第20脚输出低电平,使V8、VD3截止,LED8点亮作显示,并使V6导通。
电源V+经V6、音量电机M和V9到电源V-,实现音量增加。
如按一下音量-键,则IC2第11脚为低电平,使V9、VD4截止,LED9点亮作显示,并使V7导通。
声艺调音台控制代码声艺调音台控制代码是指用于控制声艺调音台的一系列指令和代码。
声艺调音台是一种专业的音频设备,用于调节声音的音调、音量、音色等参数,以达到理想的音效效果。
通过编写和执行控制代码,可以实现对声艺调音台的各种操作和调节。
声艺调音台控制代码通常包括以下几个方面的功能:1. 音频输入控制:声艺调音台通常具有多个音频输入通道,可以接收来自不同音源的音频信号。
通过控制代码,可以选择和切换不同的输入通道,以便对不同音源进行调音处理。
2. 音频输出控制:声艺调音台可以将处理过的音频信号输出到不同的音频输出设备,如扬声器、录音设备等。
控制代码可以设置音频输出通道和音量,以控制音频信号的输出效果。
3. 音调调节:声艺调音台可以对音频信号的音调进行调节,包括升高或降低音高。
通过控制代码,可以设置音频信号的音调参数,实现对音频信号的音高调整。
4. 音量控制:声艺调音台可以对音频信号的音量进行调节,包括增大或减小音量。
控制代码可以设置音频信号的音量参数,实现对音频信号的音量调整。
5. 音色调节:声艺调音台可以对音频信号的音色进行调节,包括增强或削弱不同频段的音色。
通过控制代码,可以设置音频信号的音色参数,实现对音频信号的音色调整。
6. 效果器控制:声艺调音台通常内置了多种音效处理器,如均衡器、混响器、压缩器等。
控制代码可以设置效果器的参数和开关状态,实现对音频信号的不同效果处理。
7. 控制台设置:声艺调音台还可以通过控制代码进行一些基本设置,如输入输出通道的配置、音频信号的采样率、位深度等。
通过设置控制台的参数,可以适应不同的音频处理需求。
声艺调音台控制代码的编写需要具备一定的音频处理知识和编程技能。
常见的编程语言,如C、C++、Python等,都可以用于编写声艺调音台控制代码。
编写控制代码时,需要了解控制台的通信协议和指令集,按照规定的格式和协议进行指令的发送和接收。
总结起来,声艺调音台控制代码是一种用于控制声艺调音台的指令和代码。
使用S.MR中控控制Digitool音量一.中控软件中控软件版本:AV2主机的逻辑程序版本:Logic Master 1.2.4触摸屏的界面程序版本:Vision Master 1.3.0触摸屏的逻辑程序版本:Logic Master 1.3.0实现的效果:当点击增大(减小)音量的按钮时,界面上有相应的图形化电平变化指示,并能显示音量大小的百分比数值。
1.界面打开Vision Master 1.3.0.exe,新建一个工程,如下图所示编辑一个简单的控制界面,并上传至触摸屏。
说明:1、左上角红色数字标号为“2”的器件属性为“Hex_Gauge”,它的“文本格式”属性改为“Decimal”,即十进制显示。
我们用它来显示音量变化百分比。
2、左下面红色数字标号为“1”的柱形器件的属性为“V_Gauge”,我们用它来显示音量大小。
3、右边三个按钮,控件的属性都为“Button”。
2.屏幕的逻辑程序打开Logic Master 1.3.0.exe,新建一个工程。
按照下图所示,编辑屏幕的逻辑程序,并上传至屏幕。
下图中的箭头指明了信号的流向。
红色的箭头表示该信号用于反馈。
音量增减信号(vol+/vol-)先进入“Analog Ramp模拟量渐变”器件,该器件输出一个变化范围是“0~65535”的模拟量“vol”。
“vol”送给“UI”,作电平显示。
此外,“vol”还分别送给了两个“Analog DivMod模拟量除”器件,通过设置合适的“除数”,来改变输出端vol_ent(商)的变化范围。
除数为655d的器件输出vol_ent2是一个从“0~100”变化的模拟量,我们把它送给“UI”,作电平变化百分比显示。
vol_ent的变化范围是“0~10”,把它送给“Analog Equate”的输入,该器件对应十个输出,分别代表了十个音量档位。
这十个代表音量档位的信号送给“Serial Send”,在这个器件中填写对应十个音量档位的代码,由于都要发送给一个受控设备(Digitool),因此这个器件的输出信号名要设置成相同的。
/********************************************************************************* *************///PT2314的音量调节, 高低音调节,声道选择,静音,红外遥控,/********************************************************************************* *************/#include"reg52.h"#include"intrins.h"#define uchar unsigned char#define uint unsigned int#define ulong unsigned long/*pt2314写入地址*/#define WriteDeviceAddress 0x88/*红外0/1代码时长定义*/#define Imax 14000#define Imin 8000#define Inum1 1450#define Inum2 700#define Inum3 3000/*对应音量+,音量-,高音+,高音-,低音+,低音- 静音,音源选择 *//*菜单,静音,加,减,dvd,vcd,cd,aut*/#define Vol_Cut 0x08/*静音*/#define up 0x07#define down 0x0a#define menu_Choose 0x05/*包括 treble , bass, vol*//*#define vol_bass_up 0x05 遥控器的便捷扩展按键#define vol_bass_down 0x06#define vol_treble_up 0x03#define vol_treble_down 0x04*/#define menu_road_Choose 0x03 //菜单选择包括了下面按一下就跳变次/* #define Choose_dvd 0x09 遥控器的便捷扩展按键#define Choose_cd 0x10#define Choose_mp3 0x11#define Choose_mp4 0x12 *//*显示定义*///unsigned char Bass=0x60;//unsigned char Treble=0x70;/////////////////////#define vol 0x00;#define bass 0x60;#define treble 0x70;#define aud_Choose 0x40;///////////////////////////////////////////////送到显示程序中的数组unsigned char tab_display[]={0x7c,0x3a,0xfe,0xfc,0x04};//C:0x9c D:0xfc V:0x7c o:0x3a B:0xfe A:0xee///////////////////////////////////////////////共阴数MR6625显示 T:0x1e r:0x0e unsigned char code dis_code[]={0xfc,/*0*/0x60,/*1*/0xDA,/*2*/0xF2,/*3*/0x66,/*4*/0xB6,/*5*/0xBE,/*6*/0xE0,/*7*/0xFE,/*8*/0xF6/*9*/};/////////////////////////////////////////////unsigned char vol_iic[]={0,0,0,0x5c,0,0};/*vol,bass,treble,aud_Choose ,左声道静音量, 传到iiC的数据 *//////////////////////////////////////////////unsigned char Choose_vbt[]={38,8,8};/*vol,bass,vtreble 音量调节变量存储*//////////////////////////////////////////////////MR-6625 最后一位显示表格//unsigned char code MR_6625[]={0X20,0X01,0X02,0X04,0X08,0X10,0X40};//mp4,播放,暂停,DVD,CD,点,mp3 正unsigned char code MR_6625[]={0X04,0X80,0X40,0X20,0X10,0X08,0X02};//mp4,播放,暂停,DVD,CD,点,mp3 反///////////////////////////////////////////////////////////////////////音量表格/*unsigned char code vol_10db[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38};//10db增量unsigned char code vol_1_25db[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07}; //1.25db增量*/unsigned char codevol_db[]={0x38|0x07,0x38|0x06,0x38|0x05,0x38|0x04,0x38|0x03,0x38|0x02,0x38|0x01,0x38|0x00,0x30|0x07,0x30|0x06,0x30|0x05,0x30|0x04,0x30|0x03,0x30|0x02,0x30|0x01,0x30|0x00, 0x28|0x07,0x28|0x06,0x28|0x05,0x28|0x04,0x28|0x03,0x28|0x02,0x28|0x01,0x28|0x00, 0x20|0x07,0x20|0x06,0x20|0x05,0x20|0x04,0x20|0x03,0x20|0x02,0x20|0x01,0x20|0x00, 0x18|0x07,0x18|0x06,0x18|0x05,0x18|0x04,0x18|0x03,0x18|0x02,0x18|0x01,0x18|0x00, 0x10|0x07,0x10|0x06,0x10|0x05,0x10|0x04,0x10|0x03,0x10|0x02,0x10|0x01,0x10|0x00, 0x08|0x07,0x08|0x06,0x08|0x05,0x08|0x04,0x08|0x03,0x08|0x02,0x08|0x01,0x08|0x00,0x00|0x07,0x00|0x06,0x00|0x05,0x00|0x04,0x00|0x03,0x00|0x02,0x00|0x01,0x00|0x00, };///////////////////////////////////////////////////////////////////////B/T调音声调表格unsigned char code Tiaoyin[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08};//////////////////////////////////////////////////////////32位编码接收存储unsigned char Im[4]={0x00,0x00,0x00,0x00};///////////////////////////////////////////// unsigned long m,Tc;unsigned char IrOK; // 码是否正确的标识符unsigned char f;unsigned char flag;//unsigned char h;unsigned char MenuChoosem;unsigned char Numer;unsigned char MenuRoadChoosem;unsigned char Choose;unsigned char UpDown;unsigned char VolCutm;unsigned char ppp;///////////////////////////////////////sbit m74HC164_DATA=P1^0;sbit m74HC164_CLK=P1^1;sbit Menu_high=P1^2;sbit Menu_low=P1^3;sbit Value_high=P1^4;sbit Value_low=P2^5;sbit Postion_Choose=P2^6;//sbit P17=P1^7;sbit a0=ACC^0; //累加器做模拟串口传输的数据位定义//////////////////////////////sbit K1=P2^0;sbit K2=P2^1;sbit K3=P2^2;sbit K4=P2^3;sbit K5=P2^4;//////////////////////////////////////////sbit SCL=P3^7;//总线端口设置sbit SDA=P3^6;//////////////////////////////////////////////////////////////// void Dely(){unsigned char m,n,s;for(s=2;s>0;s--)for(m=2;m>0;m--)for(n=2;n>0;n--);}//定时函数///////////////////////////////////////////void DelayMs(unsigned int number) //红外延时{unsigned char temp;for(;number!=0;number--){for(temp=112;temp!=0;temp--) ;}}//////////////////////////////////////////void delay(unsigned char ms) //显示延时程序{unsigned char i;while(ms--){//for (i=0;i<125;i++);for (i=0;i<30;i++);}}///////////////////////////////////////////////////////PT2314 iic程序//开总线void Start(){SDA=1;SCL=1;_nop_();_nop_();//_nop_();SDA=0;_nop_();_nop_();//_nop_();SCL=0;//_nop_();_nop_();_nop_();}/////////////////////////////////////////////////////////////结束总线void Stop(){SCL=0;SDA=0;_nop_();_nop_();//_nop_();SCL=1;_nop_();_nop_();//_nop_();SDA=1;//_nop_();_nop_();_nop_();}/////////////////////////////////////////////////////// //测试ACKbit TestAck(){bit ErrorBit;SDA=1; _nop_();//_nop_();_nop_();SCL=1;_nop_();//_nop_();_nop_();ErrorBit=SDA;SCL=0;return(ErrorBit);}/////////////////////////////////////////////////////写入8个bit到PT2314Write8Bit(uchar input){uchar temp;for(temp=8;temp!=0;temp--){SDA=(bit)(input&0x80);SCL=1;_nop_();//_nop_();_nop_();_nop_();SCL=0;_nop_();//_nop_();_nop_();_nop_();input=input<<1;}}//////////////////////////////////////////////////////写入一个字节到PT2314中void WritePT2314(uchar ch){Start();Write8Bit(WriteDeviceAddress);TestAck();Write8Bit(ch);TestAck();Stop();//DelayMs(20);}/////////////////////////////////////////////////////////////////////void change_all() /*数值处理分配到表格*/{switch(MenuChoosem){case 0 : tab_display[2]=dis_code[Choose_vbt[0]/10];tab_display[3]=dis_code[Choose_vbt[0]%10]; break; /*vol*/case 1 : tab_display[2]=dis_code[Choose_vbt[1]/10];tab_display[3]=dis_code[Choose_vbt[1]%10]; break; /*bass*/ case 2 : tab_display[2]=dis_code[Choose_vbt[2]/10];tab_display[3]=dis_code[Choose_vbt[2]%10]; break; /*treble*/}/* IIC数据处理*/if(VolCutm==0){tab_display[4]=MR_6625[2]|MR_6625[5]|MR_6625[Choose]; vol_iic[4]=0xdf;//静音vol_iic[5]=0xff;}else{tab_display[4]=MR_6625[1]|MR_6625[5]|MR_6625[Choose]; vol_iic[4]=0xc0;//开静音vol_iic[5]=0xe0;}vol_iic[0]=vol_db[Choose_vbt[0]]|vol;vol_iic[1]=Tiaoyin[Choose_vbt[1]]|bass;vol_iic[2]=Tiaoyin[Choose_vbt[2]]|treble;if(Choose==0){vol_iic[3]=0x5c;}if(Choose==3){vol_iic[3]=0x5d;}if(Choose==4){vol_iic[3]=0x5e;}if(Choose==6){vol_iic[3]=0x5f;}}void out_74HC164(unsigned char data_buf) /*模拟传输到74HC164*/ {unsigned char i;//y;i=8;ACC=data_buf;do{m74HC164_DATA=a0;m74HC164_CLK=0;m74HC164_CLK=1;ACC=ACC>>1;}while(--i!=0);}/////////////////////////////////////////////////////////// void display_74HC164(){ unsigned char m;for(m=0;m<3;m++){Numer=tab_display[0]; //菜单高位显示 out_74HC164(Numer);Menu_high=0;delay(2);Menu_high=1;Numer=tab_display[1]; //菜单低位显示 out_74HC164(Numer);Menu_low=0;delay(2);Menu_low=1;Numer=tab_display[2]; //数值高位显示 out_74HC164(Numer);Value_high=0;delay(2);Value_high=1;Numer=tab_display[3]; //数值低位显示 out_74HC164(Numer);Value_low=0;delay(2);Value_low=1;Numer=tab_display[4]; //点位选择显示out_74HC164(Numer);Postion_Choose=0;delay(2);Postion_Choose=1;}m=0;}//////////////////////////////////////////////////////////////// void Vol_Cut_m() /*静音入口*/{VolCutm=~VolCutm ;}///////////////////////////////////////////////////////////// void menu_road_Choose_m() //选择mp4,DVD,CD,mp3 /*输入选择*/ { //Choose: 0 3 4 6MenuRoadChoosem++;if(MenuRoadChoosem==4){MenuRoadChoosem=0;}switch(MenuRoadChoosem){case 0: Choose=0; break; /*mp4*/case 1: Choose=3; break; /*DVD*/case 2: Choose=4; break; /*CD*/case 3: Choose=6; break; /*mp3*/}}///////////////////////////////////////////////////////////////////// void menu_Choose_m() /*菜单控制选择*/{MenuChoosem++;if(MenuChoosem==3){MenuChoosem=0;}switch(MenuChoosem) //显示代码{case 0: tab_display[0]=0x7c;tab_display[1]=0x3a; break; /*vol*/case 1: tab_display[0]=0xfe;tab_display[1]=0xee; break; /*bass*/case 2: tab_display[0]=0x1e;tab_display[1]=0x0e; break; /*treble*/}}////////////////////////////////////////////////////////////////////////////////// /void up_m() /*数值调节+*/{switch(MenuChoosem){case 0 : UpDown=Choose_vbt[0]; break; /*vol*/case 1 : UpDown=Choose_vbt[1]; break; /*bass*/case 2 : UpDown=Choose_vbt[2]; break; /*treble*/}UpDown++;if(MenuChoosem==0) /*vol重新存入Choose_vbt[]*/{ if(UpDown>64){UpDown=64;}Choose_vbt[0]=UpDown;}if((MenuChoosem==1)|(MenuChoosem==2)){if(UpDown>16){UpDown=16;}}if(MenuChoosem==1) /*bass重新存入Choose_vbt[]*/{Choose_vbt[1]=UpDown;}if(MenuChoosem==2) /*treble重新存入Choose_vbt[]*/{Choose_vbt[2]=UpDown;}}////////////////////////////////////////////////////////////////////////////////// //void down_m()/*数值调节-*/{switch(MenuChoosem){case 0: UpDown=Choose_vbt[0]; break; /*vol*/case 1: UpDown=Choose_vbt[1]; break; /*bass*/case 2: UpDown=Choose_vbt[2]; break; /*treble*/}if(UpDown>1){UpDown--;}else{UpDown=0;}if(MenuChoosem==0) /*vol重新存入Choose_vbt[]*/{Choose_vbt[0]=UpDown;}if(MenuChoosem==1) /*bass重新存入Choose_vbt[]*/{Choose_vbt[1]=UpDown;}if(MenuChoosem==2) /*treble重新存入Choose_vbt[]*/{Choose_vbt[2]=UpDown;}}////////////////////////////////////////////////////////////////////////////////// //////void menu(){ //unsigned char wait;if(IrOK==1){IrOK=0;switch(Im[2]){case 0x08 : Vol_Cut_m(); break; /*静音入口*/case 0x03 : menu_road_Choose_m(); break;/*输入选择*/case 0x05 : menu_Choose_m(); break;/*菜单控制选择*/case 0x07 : up_m(); break;/*数值调节+*/case 0x0a : down_m(); break;/*数值调节-*/default: break;}change_all();//for(wait=0;wait<10;wait++)// {// display_74HC164();// }switch(MenuChoosem){ case 0 : WritePT2314(vol_iic[0]); break;case 1 : WritePT2314(vol_iic[1]); break;case 2 : WritePT2314(vol_iic[2]); break;}if(VolCutm==0){WritePT2314(vol_iic[4]);WritePT2314(vol_iic[5]);}else{WritePT2314(vol_iic[4]);WritePT2314(vol_iic[5]);}WritePT2314(vol_iic[3]);/* WritePT2314(vol_iic[0]);//DelayMs(30); WritePT2314(vol_iic[1]);//DelayMs(30); WritePT2314(vol_iic[2]);//DelayMs(30); WritePT2314(vol_iic[3]);//DelayMs(30); WritePT2314(vol_iic[4]);//DelayMs(30);WritePT2314(vol_iic[5]);//DelayMs(30);*/}}//////////////////////////////////////////////////按键 void anjian(void){if(K1==0){Dely();if(K1==0){Im[2]=0x08;IrOK=1;do{menu();display_74HC164();} while(K1==0);}}if(K2==0){Dely();if(K2==0){ Im[2]=0x03;IrOK=1;do{menu();display_74HC164();} while(K2==0);}}if(K3==0){Dely();if(K3==0){ Im[2]=0x05;IrOK=1;do{menu();display_74HC164();} while(K3==0);}}if(K4==0){Dely();if(K4==0){ Im[2]=0x07;IrOK=1;do{menu();display_74HC164();} while(K4==0);}}if(K5==0){Dely();if(K5==0){IrOK=1;Im[2]=0x0a;do{menu();display_74HC164(); } while(K5==0);}}}///////////////////////////////////////////////////////////////////////////// void intersvr1(void) interrupt 2 using 1{Tc=TH0*256+TL0; //提取中断时间间隔时长TH0=0;TL0=0; //定时中断重新置零if((Tc>Imin)&&(Tc<Imax)){m=0;f=1;return;} //找到启始码if(f==1){if(Tc>Inum1&&Tc<Inum3){Im[m/8]=Im[m/8]>>1|0x80; m++; //取1码}if(Tc>Inum2&&Tc<Inum1){Im[m/8]=Im[m/8]>>1; m++; //取0码}if(m==32){m=0;f=0;if(Im[2]==~Im[3]){IrOK=1;}else IrOK=0; //取码完成后判断读码是否正确}//准备读下一码}}//////////////////////////////////////////////////////////////////// 红外代码处理分配到各相应表格进行控制void main(){m=0;f=0;VolCutm=0;MenuRoadChoosem=0;MenuChoosem=0;/*0为VOL*/UpDown=15;EA=1;IT1=1;EX1=1;TMOD=0x11; TH0=0;TL0=0;TR0=1;P1=0x7F;change_all();DelayMs(100);DelayMs(100);DelayMs(100);DelayMs(100);DelayMs(100);DelayMs(100);DelayMs(100);DelayMs(100);WritePT2314(vol_iic[0]);WritePT2314(vol_iic[1]);WritePT2314(vol_iic[2]);WritePT2314(vol_iic[3]);WritePT2314(vol_iic[4]);WritePT2314(vol_iic[5]);while(1){// change_all();display_74HC164(); menu();//Dely();anjian();}}外观:。
要控制扬声器的音量,可以使用Python中的Pygame库。
Pygame是一个用于制作视频游戏的Python库,但它也包含了一些用于音频处理的函数。
要使用Pygame来控制扬声器的音量,你需要先安装Pygame库。
你可以使用以下命令来安装Pygame:```shellpip install pygame```安装完成后,你可以使用以下代码来控制扬声器的音量:```pythonimport pygame# 初始化Pygamepygame.init()# 设置扬声器的音量volume = 0.5 # 音量是一个介于0到1的浮点数,0表示静音,1表示最大音量pygame.mixer.music.set_volume(volume)# 播放音乐或其他声音pygame.mixer.music.load("path/to/your/music.mp3") # 加载音乐文件pygame.mixer.music.play() # 播放音乐```在上面的代码中,我们首先导入了Pygame库,并使用`pygame.init()`函数来初始化Pygame。
然后,我们使用`pygame.mixer.music.set_volume()`函数来设置扬声器的音量。
音量是一个介于0到1的浮点数,0表示静音,1表示最大音量。
最后,我们使用`pygame.mixer.music.load()`函数来加载音乐文件,并使用`pygame.mixer.music.play()`函数来播放音乐。
请注意,上述代码中的"path/to/your/music.mp3"应该替换为你自己的音乐文件路径。
另外,如果你想控制其他声音对象的音量,可以使用每个声音对象自己的`set_volume()`方法。
F9--可能是世界上最顶班的6声道音量遥控套件本电路套件为散件,需要自行焊接调试。
请根据个人能力水平选择套件、成品板或者整机。
购买非成品板或者非整机的,散件DIY制作不成功的不在本店保修范围内,可以在线技术支持。
但如有错发漏发,或者原件不良的,可保证完整补发,可根据个人能力选择购买散件或者成品,主要是工作时间比较紧,请谅解PGS2311做音量控制有如下优点:精度上,比机械电位器高出100倍,比继电器分流的电阻阵也最小高出10倍,精度<千分之一音染上,因为体积小,走线短,分布电容也比继电器分流的低,还没继电器吸合时的卡卡声音质上,因为是BB顶级产品,无任何开关失真,失真低于万分之一寿命上,机械电位器存在磨损,用继续电器控制也是越用时间长触点电阻越大,坏一只的话查也查不到.控制上,PGA2311可以6声道进行独立音量控制,这对声场和摆位相当有益,而继电器控制的,就无任何办法***158元是标配2声道的价格(贴片),每多加2个声道需要多购买一只贴片或者直插PGA2311,直插1个的价格为45元音量控制采用美国BB公司著名的PGA2311芯片。
这一芯片被称为“超级数字音量控制芯片”,其指标可以参照下面数据,比CS3310高不不小,,步长为0.5分贝。
该芯片被不少世界著名Hi-End厂家售价数万元的极品功放选作音量控制。
如JEFF ROWLAND、Krell 、Gryphon 、MBL、Mark Levinson等1该控制器可以作为2声道HI-FI,4声道平衡音量.6声道AV中心控制使用,每使用多一个通道就只需要购买多一只PGA2311即可,相当灵活.作位6声道AV中心控制使用,即使W元级别的AV机也远没它的性能优良,要知道PGA2311是HI-END机上才用到的.2每声道可以独立调节音量,比如选择中置音量调节时,按一下遥控器上的CEN按键,再在遥控上的VOL+上按下就可以调节该声道的音量了.当然也可以6声道统一调节增减3带状态记忆功能(要装上24C02和把LCD板上SETUP两点短接) 43路HIFI输入选择,全遥控.手动输入选择事,按下数字开关的按键即可5母板尺寸很小容易安装,只有110X77MM大小.6可以直接接入功放,无需要再加其它前级控制,PGA2311可以带有最高20DB的增益7PGA2311在0dB时内部增益不启动,是一个纯电阻阵列,当你需要增益>0dB时内部超级放大器自动启动,就是一个指标超好的前级8变压器建议使用最低双8V或者最高双13V的变压器,上图左右旋转音量电位器是控制音量,按下去是输入选择切换。
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define rch 1
#define lch 0
//sbit m62429_da=P0^6; // 音量控制ic m62429_4
//sbit m62429_clk=P0^5; // m62429_5
sbit b=P2^0; // b wei kai
sbit d=P2^1; // dwei guan
sbit a=P2^2; // a wei jia yin liang
sbit c=P2^3; // c wei jian yin liang
sbit sda=P2^6; // sda wei shu ju xian
sbit scl=P2^5; // scl wei shi zhong xian
sbit beep=P3^6; // feng ming qi
sbit jdq=P3^7; // ji dian qi
//uchar vol; // yin liang bian liang
uchar num;
const uchar volda[46]={
0x02,0xd4,
0x16,0x56,0x96,0xd6,
0x18,0x58,0x98,0xd8,
0x1a,0x5a,0x9a,0xda,
0x1c,0x5c,0x9c,0xdc,
0x1e,0x5e,0x9e,0xde,
0x20,0x60,0xa0,0xe0,
0x22,0x62,0xa2,0xe2,
0x24,0x64,0xa4,0xe4,
0x26,0x66,0xa6,0xe6,
0x28,0x68,0xa8,0xe8,
0x2a,0x6a,0xaa,0xea
};
//***************** sheng dao kong zhi *************************** void wr_chbit(bit ch)
{
scl=0;
_nop_();
sda=ch;
_nop_();
scl=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
}
//****************** sheng yin kong zhi ************************** void wr_databit(uchar da)
{
uchar i;
// uchar da;
///////////////////////////////////
//da=volda[num];
for(i=0;i<8;i++)
{
scl=0;
_nop_();
_nop_();
if((da>>i)&0x01==1)
sda=1;
else
sda=0;
scl=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
}
}
//****************** jie su ma **************************
void wr_endbit()
{
scl=0;
_nop_();
sda=1;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
////////////////////////////////////////////
scl=0;
_nop_();
_nop_();
sda=1;
_nop_();
_nop_();
scl=1;
_nop_();
_nop_();
_nop_();
_nop_();
sda=0;
_nop_();
_nop_();
sda=1;
}
//********************* m62429 xie chuan hang shu ju *********************** void wr_m62429(bit lrch,uchar da)
{
wr_chbit(lrch);
wr_databit(da);
wr_endbit();
}
void delay(int z)
{
int x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void init(void)
{
P2=0x00;
beep=1;
jdq=0;
num=10;
sda=0;
scl=0;
// vol=56;
// w_m62429(vol); //chu shi yin liang zhi
}
void main()
{
init();
if(b==1) ////////kai sheng yin
{
delay(20);
jdq=1;
beep=0;
delay(20);
beep=1;
///////////////////////// kai sheng yin hou jing ru da xun huan
while(1)
{
if(a==1)
{
delay(20);
//delay(5);
beep=0;
delay(20);
beep=1;
//////////////////////////////////////// "jia" yin liang
num++;
wr_m62429(1,volda[num]);
delay(30);
}
//////////////////////////////////// "jian" yin liang
if(c==1)
{
delay(20);
beep=0;
delay(20);
beep=1;
num--;
wr_m62429(1,volda[num]);
delay(30);
}
//////////////////////////////// guan sheng yin
if(d==1)
{
delay(5);
beep=0;
delay(20);
beep=1;
jdq=0;
break;
}
}
}
}
实物图:
遥控模块是“非锁型”的,网上有得卖。