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

📄 pt2258+seg2+12m+89c2051+tda7377 功放程序.txt

📁 51 MCU ASM EXAMP51 MCU ASM EXAMP
💻 TXT
📖 第 1 页 / 共 2 页
字号:
;* 标题: 5.1 PT2258功放程序
;* 硬件: 配原程序的5.1功放单面PCB板DIY套件
;* 文件: MA035.asm
;* 日期: 2002-1-2
;* 版本: 1.0
;* 作者: 单片机音响技术网 - zhangshaobin
;* 邮箱: shaobinz@163.com
;* 网站: http://www.mcu51av.com
;* 描述:
;* PT2258+SEG2+12M+89C2051+TDA7377 功放程序
;* 设置:
;* DIY套件,按清单DIY焊接和指导文件即可成功
;* 【版权】 Copyright(C)单片机音响技术网 www.mcu51av.com All Rights Reserved
;* 【声明】 此程序仅用于学习与参考,引用请注明版权和作者信息!
COUNTER EQU 35H;显示计数
REMVOL EQU 36H;音量连续控制
DISPBUFF1 EQU 37H;个位暂存
DISPBUFF2 EQU 38H;十位暂存
DISPBUFF3 EQU 39H;指示灯暂存
DISPBUFF EQU 3AH;显示缓冲区
;-----------------------------------------------------------
SDA BIT P3.4;I2C总线数据口
SCL BIT P3.2;I2C总线时钟口
MTD EQU 30H;PT2258数据首址(30h-31h,16字节)
NUMBYT EQU 3BH;PT2258数据位数
;-----------------------------------------------------------
CS_X1 EQU 3CH;遥控
CS0_X1 EQU 3DH
U0_X1 EQU 3EH;遥控数据暂存区
NO_M EQU 40H;遥控按键数据码
;-----------------------------------------------------------
FRONT EQU 41H;前置音量缓存
REAR EQU 42H;环绕音量缓存
CEN EQU 43H;中置音量缓存
S_UB EQU 44H;重低音音量缓存
RVER EQU 45H;环绕微调音量缓存
CVER EQU 46H;中置微调音量缓存
SVER EQU 47H;重低音微调音量缓存
FVER EQU 48H;前置微调音量缓存
PHONE EQU 49H
NO_N EQU 51H
;-----------------------------------------------------------
ORG 0000H
AJMP START
ORG 000BH;定时器T0入口
AJMP ITT0
ORG 0013H;外部中断INT1入口地址
AJMP INO1;
ORG 001BH;
AJMP DISP;定时器T1入口显示程序
;-----------------------------------------------------------
START:;初始化
MOV SP,#60H;指针指向60H
MOV PSW,#00H
MOV IE,#00H
MOV IP,#00H
CLR P3.1;刚开机时7370STANDBY待机
CLR EA;关总中断
CLR P3.5;开LED显示(PNP的管子)
SETB P3.7;数码管不显示
MOV P1,#7FH;电源灯亮(P1.7=0),数码管十位也关了
SETB P3.2;
SETB P3.4;让SDA,SLK保持高电平
CLR P3.0;AC-3输入状态
SETB P3.3;外中断1为脉冲下降沿触发
MOV TMOD,#00010001B;定时器0-1工作在方式1
MOV TH1,#0F0H;定时器1预置
MOV TL1,#60H;(65536-#FO60H)
MOV TH0,#00H;定时器0预置
MOV TL0,#00H;(65536-0)65MS够按键按下的时间即可
SETB TR0;开定时器0中断
SETB ET0;开定时器0中断允许
SETB EA;中断总开关开
SETB EX1;外中断1中断允许
SETB IT1;外中断1INT1为负跳变触发方式
CLR EX0;外中断0中断不允许
CLR TR1;定时器1暂不允许
CLR (29H).0;遥控识别位
MOV REMVOL,#02H;音量连续控制赋值02H
MOV COUNTER,#0H;记数器清0
MOV FRONT,#34H;总音量默认级数34
MOV REAR,#34H
MOV CEN,#34H
MOV S_UB,#34H
MOV RVER,#5H;各声道微跳起始显示5级
MOV CVER,#5H
MOV SVER,#5H
MOV FVER,#5H
MOV DISPBUFF,#40H;数码管准备显示40
ACALL DELAY;刚开机时不能马上给PT2258送数
NOP;延时250MS左右,PT2258要求300MS
ACALL DELAY
NOP
ACALL DELAY
NOP
ACALL DELAY
NOP
ACALL DELAY
NOP
MOV 30H,#0C0H;PT2258默认1100 0000,CLEAR REGIST
MOV NUMBYT,#01H;PT2258数据位数赋值01只传8位
ACALL WRNBYT;I2C数据总线
NOP
NOP
MOV 30H,#0D3H;1101 0011(6CH 10dB/STEP,-30dB)
MOV 31H,#0E4H;1110 0100(6CH 1dB/STEP,-4dB)
MOV NUMBYT,#02H;PT2258数据位数赋值02
ACALL WRNBYT
NOP
MOV NO_M,#00H;遥控按键数据码为0,无键按下状态
MOV NO_N,#00H
MOV DISPBUFF3,#0DFH;指示灯暂存1101 1111(还未到P1口)
;============================主程序=========================
MAIN:
SETB EA;允许中断总开关开
CLR TR1;定时器1暂不允许
CLR ET1;关定时器1中断允许
SETB P3.7;关数码管个位
MOV P1,#7FH;电源灯可亮,数码管十位也关了
CLR P3.5;开指示灯,电源灯就亮了
CLR P3.1 ;TDA7370低电平静音
SETB P3.2
SETB P3.4
MOV 30H,#0F9H;1111 1001(2258静音OF8就不静)
MOV NUMBYT,#01H;PT2258数据位数赋值01
ACALL WRNBYT;写入2258;2258就静掉了
NOP
PW_1:
SETB P3.2;I2C终止
SETB P3.4
MOV A,NO_M;调按键标准数(0~10)
JZ PW_1;无键按下就在此处循环
MOV NO_M,#00H
XRL A,#01H;
JNZ PW_1;按MUTE键也在此处循环
SETB P3.1;打开功放,NO STANDBY状态
SETB TR1;开定时器1;否则数码管有显示
SETB ET1;开中断1
CLR (29H).1;清静音标志位
ACALL CLMUT;2258 NO MUTE
NOP
MOV R2,#00H
MOV R3,#0FH
LOOP:
SETB P3.2
SETB P3.4
MOV A,R3
XRL A,#0FH;R3=0FH,则A=0
JNZ KEY;A不为0则转到KEY
MOV R3,#00H
MOV A,DISPBUFF3
ORL A,#01010110B;(1101 1111 ORL 0101 0110)
MOV DISPBUFF3,A;(ORL后A=1101 1111,AC-3灯亮)
CLR (29H).2
CLR (29H).3
CLR (29H).4
CLR (29H).5
MOV R5,DISPBUFF;(#40h放入R5)
ACALL DISP_VOL;调显示音量
NOP
KEY:;遥控散转
MOV A,NO_M;键盘转换值0~11,0,1,2,3...
JZ LOOP;键值=0转LOOP
MOV NO_M,#00H;并将键转换值清0
RL A;实现(0-0,1-2,2-4,3-6,4-8倍乘)
MOV DPTR,#TAB_KEY
NOP
JMP @A+DPTR
TAB_KEY:
AJMP LOOP;入口地址:TAB_KEY
AJMP MAIN;TAB_KEY+2
AJMP MUTE;TAB_KEY+4
AJMP AC_3_IN;TAB_KEY+6
AJMP RESET;TAB_KEY+8
AJMP AUX_IN;TAB_KEY+10
AJMP FRONT_V;TAB_KEY+12
AJMP CEN_V;TAB_KEY+14
AJMP REAR_V;TAB_KEY+16
AJMP SUB_V;TAB_KEY+18
AJMP VOLDN;TAB_KEY+20
AJMP VOLUP;TAB_KEY+22
AJMP LOOP;
AJMP LOOP
;===========================================================
RESET:;复位状态
CLR P3.0;AC-3状态
MOV FRONT,#34H;#34H
MOV REAR,#34H
MOV CEN,#34H
MOV S_UB,#34H
MOV RVER,#5H
MOV CVER,#5H
MOV SVER,#5H
MOV FVER,#5H
MOV DISPBUFF,#40H;数码管显示40
MOV DISPBUFF3,#0DFH;(1101 1111转AC-3指示)
MOV 30H,#0D3H;(1101 0011 6CH -10DB/STEP -30DB)
MOV 31H,#0E4H;(1110 0100 6CH -1DB/STEP -4DB)
MOV NUMBYT,#02H;2258传16位数
ACALL WRNBYT
NOP
AJMP INPUT_A;跳转
;-----------------------------------------------------------
AC_3_IN:;5.1CH输入状态
MOV 30H,#0F9H;(1111 1001,2258静音)
MOV NUMBYT,#01H
ACALL WRNBYT
NOP
ACALL DELAY;(延时50MS)
NOP
MOV DISPBUFF3,#0DFH;(AC-3灯状态缓存起来TI到时就亮)
CLR P3.0;AC-3输入
NOP
AJMP INPUT_A;跳转
;-----------------------------------------------------------
AUX_IN:;2CH输入状态
MOV 30H,#0F9H;(2258静音)
MOV NUMBYT,#01H
ACALL WRNBYT
NOP
ACALL DELAY
NOP
MOV DISPBUFF3,#0F7H;(AUX灯状态缓存起来)
SETB P3.0;AUX输入
INPUT_A:
SETB (29H).1;保证2258不会静音
ACALL DELAY;延时50MS
NOP
MOV 30H,#0F8H;(1111 1000 2258 NO MUTE)
MOV NUMBYT,#01H;(2258传8位数)
ACALL WRNBYT
NOP
MOV R3,#0FH;
MOV R2,#00H
NOP
AJMP LOOP;循环
;-----------------------------------------------------------
MUTE:
CPL (29H).1;(29H).1先取反,保证2258 MUTE ON
JB (29H).1,MUT_1;如果=1,跳转
clr p3.1
MOV 30H,#0F9H;(1111 1001,2258 MUTE ON)

WRN_1:
MOV NUMBYT,#1H
LCALL WRNBYT;静音数据写入2258
NOP
MOV R2,#00H
MOV R3,#0FH
NOP
AJMP LOOP;循环
MUT_1:
setb p3.1
MOV 30H,#0F8H;(1111 1000,2258 MUTE)
MOV A,DISPBUFF3
ORL A,#10000000B;(原来亮的仍亮,静音灯要熄)
MOV DISPBUFF3,A;(ORL是有1出1,全0出0)
NOP
AJMP WRN_1;跳转
;-----------------------------------------------------------
FRONT_V:
SETB (29H).2;为FRONT VOLUP准备条件
CLR (29H).3
CLR (29H).4
CLR (29H).5
MOV R5,FVER;(FEVER=48H,R5=#5H)
MOV A,DISPBUFF3
ANL A,#11101111B;先保证前置灯亮,有0出0,全1出1
ORL A,#01000110B;有1出1,全0出0,第4,5位必须为0在或
NOP
AJMP LOOP_D;跳转
;-----------------------------------------------------------
REAR_V:
CLR (29H).2
SETB (29H).3;为REAR VOLUP准备条件
CLR (29H).4
CLR (29H).5
MOV R5,RVER
MOV A,DISPBUFF3
ANL A,#10111111B;保证环绕灯亮
ORL A,#00010110B
NOP
AJMP LOOP_D
;-----------------------------------------------------------
CEN_V:
CLR (29H).2
CLR (29H).3
SETB (29H).4;为CEN VOLUP准备条件
CLR (29H).5
MOV R5,CVER
MOV A,DISPBUFF3
ANL A,#11111101B;保证中置灯亮
ORL A,#01010100B
NOP
AJMP LOOP_D
;-----------------------------------------------------------
SUB_V:
CLR (29H).2
CLR (29H).3
CLR (29H).4
SETB (29H).5;为SW VOLUP准备条件
MOV R5,SVER
MOV A,DISPBUFF3
ANL A,#11111011B;保证重低音灯亮
ORL A,#01010010B
;-----------------------------------------------------------
LOOP_D:
MOV DISPBUFF3,A
ACALL DISP_VOL;调用音量显示
NOP
ACALL CLMUT;2258要静音
NOP
MOV R2,#00H
MOV R3,#00H
LOOP_A:
NOP
AJMP LOOP
;/////////////////////////////////////////////////////////
CN_VOLUP_1:
NOP
AJMP CN_VOLUP
SB_VOLUP_1:
NOP
AJMP SB_VOLUP
VOLUP:;实现2258衰减数减,即音量变大,PHONE是-,反过来理解
MOV 30H,#0C0H;(1100 0000,2258CLEAR REGISTER)
MOV NUMBYT,#01H
ACALL WRNBYT;调用I2C
NOP
ACALL CLMUT;2258静音
NOP
MOV R3,#0
JB (29H).2,FR_VOLUP
JB (29H).3,RR_VOLUP
JB (29H).4,CN_VOLUP_1
JB (29H).5,SB_VOLUP_1
MOV A,DISPBUFF
XRL A,#69H;最高级别69H
JZ LOOP_A;到69级就跳回去LOOP
MOV PHONE,FRONT
ACALL DAA
NOP
MOV FRONT,PHONE;FRONT+1(递加)
MOV PHONE,REAR
ACALL DAA
NOP
MOV REAR,PHONE;REAR+1
MOV PHONE,CEN
ACALL DAA
NOP
MOV CEN,PHONE;CENT+1
MOV PHONE,S_UB
ACALL DAA
NOP
MOV S_UB,PHONE;SW+1
MOV PHONE,DISPBUFF
ACALL UAA
NOP
MOV DISPBUFF,PHONE;DISPBUFF+1
ACALL FRDATA;调前置2258调节
NOP
ACALL RRDATA;调环绕2258调节
NOP
ACALL CNDATA;调中置2258调节
NOP
ACALL SBDATA;调低音2258调节
NOP
MOV R5,DISPBUFF;该显示的级数
NOP
AJMP TT_VOLUP;到音量显示
FR_VOLUP:;前置音量递加处理
MOV A,FVER
XRL A,#10H;到10级吗
JZ LOOP_B;到了就跳转
MOV PHONE,FVER
ACALL UAA
NOP
MOV FVER,PHONE;级数加1
MOV PHONE,FRONT
ACALL DAA;使2258衰减数变小,即音量增加
NOP
MOV FRONT,PHONE
ACALL FRDATA;调2258数据处理
NOP
MOV R5,FVER;要显示的级数
NOP
AJMP TT_VOLUP;到音量级数显示
LOOP_B:
NOP
AJMP LOOP
RR_VOLUP:;环绕音量递加处理
MOV A,RVER
XRL A,#10H
JZ LOOP_B
MOV PHONE,RVER
ACALL UAA
NOP
MOV RVER,PHONE
MOV PHONE,REAR
ACALL DAA
NOP
MOV REAR,PHONE
ACALL RRDATA
NOP
MOV R5,RVER
NOP
AJMP TT_VOLUP
CN_VOLUP:;中置递加处理
MOV A,CVER
XRL A,#10H
JZ LOOP_B
MOV PHONE,CVER
ACALL UAA

NOP
MOV CVER,PHONE
MOV PHONE,CEN
ACALL DAA
NOP
MOV CEN,PHONE
ACALL CNDATA
NOP
MOV R5,CVER
NOP
AJMP TT_VOLUP
SB_VOLUP:;重低音递加处理
MOV A,SVER
XRL A,#10H
JZ LOOP_C
MOV PHONE,SVER
ACALL UAA
NOP
MOV SVER,PHONE
MOV PHONE,S_UB
ACALL DAA
NOP
MOV S_UB,PHONE
ACALL SBDATA
NOP
MOV R5,SVER
TT_VOLUP:
ACALL DISP_VOL
NOP
LOOP_C:
NOP
AJMP LOOP
CN_VOLDN_1:
NOP
AJMP CN_VOLDN
SB_VOLDN_1:
NOP
AJMP SB_VOLDN
;-----------------------------------------------------------
VOLDN:;实现2258衰减数加,即音量变小,PHONE是+,反过来理解
ACALL CLMUT
NOP
MOV R3,#0
JB (29H).2,FR_VOLDN
JB (29H).3,RR_VOLDN
JB (29H).4,CN_VOLDN_1
JB (29H).5,SB_VOLDN_1
MOV A,DISPBUFF
JZ LOOP_C
;以下音量加其实是2258写入数据减,衰减少一些,前置,环绕
;中置,重低音都要让衰减数变小,及衰减DB少
MOV PHONE,FRONT
ACALL UAA
NOP
MOV FRONT,PHONE
MOV PHONE,REAR
ACALL UAA
NOP
MOV REAR,PHONE
MOV PHONE,CEN
ACALL UAA
NOP
MOV CEN,PHONE
MOV PHONE,S_UB
ACALL UAA
NOP
MOV S_UB,PHONE
MOV PHONE,DISPBUFF
ACALL DAA;但是显示的数却是递加,故调用DAA
NOP
MOV DISPBUFF,PHONE
ACALL FRDATA;调前置2258调节
NOP
ACALL RRDATA;调环绕2258调节
NOP
ACALL CNDATA;调中置2258调节
NOP
ACALL SBDATA;调低音2258调节
NOP
MOV R5,DISPBUFF;该显示的级数
NOP
AJMP TT_VOLUP;到音量显示
FR_VOLDN:;前置音量递减
MOV A,FVER
JZ LOOP_C
MOV PHONE,FVER
ACALL DAA
NOP
MOV FVER,PHONE
MOV PHONE,FRONT
ACALL UAA
NOP
MOV FRONT,PHONE
ACALL FRDATA
NOP
MOV R5,FVER
NOP
AJMP TT_VOLUP
RR_VOLDN:;环绕音量递减
MOV A,RVER
JZ LOOP_E
MOV PHONE,RVER
ACALL DAA
NOP
MOV RVER,PHONE
MOV PHONE,REAR
ACALL UAA
NOP
MOV REAR,PHONE
ACALL RRDATA
NOP
MOV R5,RVER
NOP
AJMP TT_VOLUP
LOOP_E:
NOP
AJMP LOOP
CN_VOLDN:;中置音量递减
MOV A,CVER
JZ LOOP_E
MOV PHONE,CVER
ACALL DAA
NOP
MOV CVER,PHONE
MOV PHONE,CEN
ACALL UAA
NOP
MOV CEN,PHONE
ACALL CNDATA
NOP

⌨️ 快捷键说明

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