功放前级程序带遥控.docx

上传人:b****8 文档编号:30426031 上传时间:2023-08-14 格式:DOCX 页数:32 大小:21.93KB
下载 相关 举报
功放前级程序带遥控.docx_第1页
第1页 / 共32页
功放前级程序带遥控.docx_第2页
第2页 / 共32页
功放前级程序带遥控.docx_第3页
第3页 / 共32页
功放前级程序带遥控.docx_第4页
第4页 / 共32页
功放前级程序带遥控.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

功放前级程序带遥控.docx

《功放前级程序带遥控.docx》由会员分享,可在线阅读,更多相关《功放前级程序带遥控.docx(32页珍藏版)》请在冰豆网上搜索。

功放前级程序带遥控.docx

功放前级程序带遥控

功放前级程序(带遥控)

源程序:

;----------------功---------能--------------------------------------

;*****本*****机*****石*****英*****晶******体******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    EQU59H      ;计数器,显示程序通过它得知现正显示哪个数码管

FIRST      EQUP1.7    ;第一位数码管的位控制

SECOND      EQUP1.6    ;第二位数码管的位控制

LEDH        EQUP0.7    ;主音量/低音/高音/话筒音量显示控制位

DISPBUFF    EQU5AH      ;显示缓冲区为5AH和5BH

IN_SET      EQU21H      ;输入选择缓冲

MUTE        EQU22H      ;静音选择缓冲

POWER      EQU23H      ;电源开关选择缓冲

VOL        EQU24H      ;主音量选择缓冲

BASS        EQU25H      ;低音选择缓冲

TRS        EQU26H      ;高音选择缓冲

MIC        EQU27H      ;话筒音量选择缓冲

LUO        EQU28H      ;等响度选择缓冲

D3D        EQU29H      ;3D选择缓冲

LED_DATA    EQU30H      ;主音量/低音/高音/话筒音量显示缓冲

SDA24      EQUP3.4    ;接24C08的SDA

SCLK24      EQUP3.5    ;接24C08的SCLK

ORG  0000H

      AJMPMAIN

ORG  0003H              ;外部中断INT0入口地址

      AJMP  INT          ;转中断服务子程序

ORG001BH                ;定时器T1的入口

      LJMPDISP          ;显示程序

ORG30H

MAIN:

                    ;初始化

MOV1CH,#0FFH            ;

MOVP3,#0FFH            ;

MOVP2,#0FFH            ;

MOVP0,#0FFH            ;

MOVMUTE,#0              ;

MOVPOWER,#0            ;

MOVR6,#0                ;

MOVLUO,#0              ;

MOVD3D,#0              ;

MOVIN_SET,#0            ;

MOVSP,#5FH              ;设置堆栈

MOVTMOD,#00010000B      ;定时器T1工作于模式1(16位定时/计数模式)

MOVTH1,#HIGH(65536-2000)

MOVTL1,#LOW(65536-2000)

SETBTR1                ;定时器T1开始运行

SETBEA                  ;打开CPU总中断请求

SETBET1                ;定时器T1允许

SETBIT0                ;设定INT0的触发方式为脉冲负边沿触发

SETBEX0                ;打开INT0中断请求

MOVCounter,#0          ;计数器初始化

NOP                      ;延时读24C08

NOP

NOP

NOP

NOP

NOP

NOP

NOP

MOVA,#24H  ;读主音量数地址

LCALLRD24

MOVVOL,A

MOVP1,VOL              ;

MOVR7,VOL              ;

MOVA,R7                ;将R7中的十六进制数转换成10进制

MOVB,#10                ;10进制/10=10进制

DIVAB                  ;

MOVDISPBUFF+1,A        ;十位在a

MOVDISPBUFF,B          ;个位在b

CLRP3.5                ;开机初始为音量状态

CLRP3.4                ;

CLRP3.6                ;

SETBP3.7                ;

CLRP2.0

SETBP2.1

SETBP2.2

MOV  LED_DATA,#0FEH            ;

DSP:

      MOV12H,#9        ;将遥控器键值转化成0~9

      MOV  DPTR,#TAB1    ;调用遥控键值表

VV:

                      ;

      MOV  A,12H        ;

      MOVCA,@A+DPTR    ;

      XRL  A,1CH        ;

      JZ  ABC          ;

      DJNZ12H,VV        ;

ABC:

                    ;

      MOV  A,12H        ;

      MOV  R5,1CH        ;

      CJNER5,#00,CH_AUTO;避免保持电容电压跌落

      AJMPDSP

CH_AUTO:

    LCALLYS4          ;

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLDELAY2

    MOVA,#24H

    LCALLRD24

    LCALLYS4          ;

    MOVP1,A

    CLRP3.4            ;

    CLRP3.5            ;

    CLRP3.6            ;

    SETBP3.7          ;

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLDELAY2

    MOVA,#25H

    LCALLRD24

    LCALLYS4          ;

    MOVP1,A

    CLRP3.4            ;

    CLRP3.5            ;

    CLRP3.7            ;

    SETBP3.6          ;

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLDELAY2

    MOVA,#26H

    LCALLRD24

    LCALLYS4          ;

    MOVP1,A

    CLRP3.4            ;

    CLRP3.7            ;

    CLRP3.6            ;

    SETBP3.5          ;

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLDELAY2

    MOVA,#27H

    LCALLRD24

    LCALLYS4          ;

    MOVP1,A

    CLRP3.7            ;

    CLRP3.5            ;

    CLRP3.6            ;

    SETBP3.4          ;

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    LCALLYS4

    AJMPDSP

INT:

                    ;

      CLREX0            ;暂时关闭INT0中断请求

      MOV16H,#10

SB:

                      ;

      ACALL  YS1        ;调用882微秒延时子程序

      JB  P3.2,EXIT      ;延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序

      DJNZ  16H,SB      ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序

      JNBP3.2,$        ;等待高电平避开9毫秒低电平引导脉冲

      ACALL  YS2        ;延时4.74毫秒判断是否连发

      JB  P3.2,EXIT      ;

      MOVR1,#1AH        ;设定1AH为起始RAM区

      MOV12H,#4          ;接收从1AH到1DH的4个内存,用于存放操作码和操作反码

PP:

                      ;

      MOV13H,#8          ;每组数据为8位

JJJJ:

                    ;

      JNBP3.2,$        ;等待地址码第一位的高电平信号

      LCALLYS1          ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态

      MOVC,P3.2        ;将P3.2引脚此时的电平状态0或1存入C中

      JNCUUU            ;如果为0就跳转到UUU

      JB  P3.2,$        ;检测到高电平1的话延时882微秒等待脉冲高电平结束

UUU:

                    ;

      MOVA,@R1          ;将R1中地址的给A

      RRCA              ;将C中的值0或1移入A中的最低位

      MOV@R1,A          ;将A中的数暂时存放在R1数值的内存中

      DJNZ13H,JJJJ      ;接收满8位换一个内存

      INCR1            ;对R1中的值加1,换下一个RAM

      DJNZ12H,PP        ;接收完8位数据码和8位数据反码,存放在1AH/1BH/1CH/1DH中

      MOVA,1CH          ;A的数就是解码数

      AJMPBIJIAO        ;如果相等说明解码正确

      MOVA,1AH          ;进行代码识别

      XRLA,#0          ;判断1AH的值是否等于00000000

      JNZEXI            ;如果不同则无效将1CH清零

      MOVA,1BH          ;比较低8位地址

      XRLA,#11110111B  ;再判断高8位地址是否正确

      JNZEXI            ;如果不相等说明解码失败退出解码程序

      MOVA,1CH          ;比较数据码和数据反码是否正确?

      CPLA              ;

      XRLA,1DH          ;将1CH的值取反后和1DH比较不同则无效丢弃核对数据是否准确

      JNZEXI            ;如果不同则无效将1CH清零

      AJMPEXIT          ;如果不相等说明解码失败退出解码程序

EXI:

                    ;

    MOV1CH,#0          ;

EXIT:

                    ;

    JBP2.6,QQ1        ;手动主计数加

    LCALLYS3          ;

    MOVA,#06          ;

    LCALLYS3          ;

    AJMPKU            ;

QQ1:

    JBP2.7,QQ2        ;手动主计数减

    LCALLYS3          ;

    MOVA,#68          ;

    LCALLYS3          ;

    AJMPTT1            ;

QQ2:

                    ;

    JNBP3.0,QQ3        ;手动选择控制:

主音量/低音/高音/话筒音量

    JNBP3.1,QQ4        ;手动选择音源:

1/2/3

    SETBEX0            ;中断

    SETBP3.2          ;

    RETI

QQ3:

                    ;

    LCALLYS4          ;

    AJMPM_SET          ;选择控制:

主音量/低音/高音/话筒音量

    SETB  EX0          ;允许中断

    SETBP3.2          ;

    RETI

QQ4:

                    ;

    LCALLYS4          ;

    LCALLYS4          ;

    LCALLYS4          ;

    LCALLYS4          ;

    LCALLYS4          ;

    AJMPIN_KEY        ;选择音源1/2/3

    SETB  EX0          ;允许中断

    SETBP3.2          ;

    RETI

BIJIAO:

    MOVA,1CH          ;按键数值判断执行

;------------------------------------------------------------

;以下为加主音量/低音/高音/话筒级数

;------------------------------------------------------------

    CJNEA,#03,BUP      ;主音量加

    AJMPV_UP

BUP:

    CJNEA,#15,TUP ;低音加

    AJMPB_UP

TUP:

    CJNEA,#10,MUP ;高音加

    AJMPT_UP

MUP:

    CJNEA,#30,VDN ;MIC音量加

    AJMPM_UP

VDN:

    CJNEA,#02,BDN ;主音量减

    AJMPV_DN

BDN:

    CJNEA,#66,TDN ;低音减

    AJMPB_DN

TDN:

    CJNEA,#14,MDN ;高音减

    AJMPT_DN

MDN:

    CJNEA,#26,KU ;MIC音量减

    AJMPM_DN

KU:

    CJNEA,#06,TT0      ;遥控键值等3时,执行主计数器加

    CJNER6,#0,dd1      ;如果R6的值等0,主计数器为主音量控制

V_UP:

                    ;

    MOVA,#24H ;读地址

    LCALLRD24

    MOVVOL,A

    MOVR7,VOL          ;

    CJNER7,#63,VOL_UP  ;预设音量控制为64级(0-63)

    LCALLYS4          ;

    CLRP3.4            ;

    CLRP3.5            ;

    CLRP3.6            ;

    SETBP3.7          ;

    AJMPEXIT

TT0:

                    ;跳转超范围,不得不加

    AJMPTT1            ;转到主计数器减

VOL_UP:

    INCVOL            ;主音量加1

    MOVA,VOL

    MOVB,A

    MOVA,#24H

    LCALLWT24

    MOVP1,VOL          ;把主音量的数送到P1口进行D/A转换

    MOVR7,VOL          ;显示当前的调节级数

    MOVA,R7            ;将R7中的十六进制数转换成10进制

    MOVB,#10          ;10进制/10=10进制

    DIVAB              ;

    MOVDISPBUFF+1,A    ;十位在a

    MOVDISPBUFF,B      ;个位在b

    MOVLED_DATA,#0FEH        ;

    CLRP3.4            ;

    CLRP3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1