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

📄 ʱ

📁 静音琴的源码,有兴趣的拼音可以下载下来看看,这个是可以生产的程序.
💻
字号:
;********************************
;       时间音量处理
;********************************
;入口: DPTR    时间地址
;       JXH     键序号    21~108
;出口:  YLDX    音量大小
;--------------------------------
        PROC  SJYLCL
SJYLCL:
        PUSH  PSW
        PUSH  ACC
        SETB  RS1
        CLR   RS0              ;2工作区
        ;-----------
        LCALL QSJCL            ;取时间R7R6R5R4
        LCALL DSJCL            ;读时间R3R2R1R0
        LCALL SWJF             ;四位减法
        LCALL YLCBCL           ;音量查表处理
        MOV   DPTR,#TAB_YLXXB  ;音量线性表
        MOVC  A,@A+DPTR        ;线性处理
        LCALL YLXZCL           ;音量修正处理
        MOV   YLDX,A           ;音量大小
        ;-----------
        POP   ACC
        POP   PSW
        RET
        include "软件陷阱.asm"
;########################################################
;********************************
;       取时间处理(现在)
;********************************
QSJCL:
        CLR   ET2
        PUSH  0CDH          ;TH2
        PUSH  0DH           ;1区R5
        PUSH  0EH           ;1区R6
        PUSH  0FH           ;1区R7
        SETB  ET2
        POP   ACC
        MOV   R7,A
        POP   ACC
        MOV   R6,A
        POP   ACC
        MOV   R5,A
        POP   ACC
        MOV   R4,A
        RET
        include "软件陷阱.asm"
;********************************
;       读时间处理(过去)
;********************************
DSJCL:
        MOVX  A,@DPTR
        INC   DPL
        MOV   R3,A
        MOVX  A,@DPTR
        INC   DPL
        MOV   R2,A
        MOVX  A,@DPTR
        INC   DPL
        MOV   R1,A
        MOVX  A,@DPTR
        MOV   R0,A
        RET
        include "软件陷阱.asm"
;********************************
;       四位减法
;********************************
;入口:  被减数 R7R6R5R4  下点时间
;         减数 R3R2R1R0  上点时间
;出口:      差 R3R2R1R0    时间差
;--------------------------------
SWJF:
        CLR   C
        MOV   A,R4
        SUBB  A,R0
        MOV   R0,A
        MOV   A,R5
        SUBB  A,R1
        MOV   R1,A
        MOV   A,R6
        SUBB  A,R2
        MOV   R2,A
        MOV   A,R7
        SUBB  A,R3
        MOV   R3,A
        RET
        include "软件陷阱.asm"
;********************************
;       音量查表处理
;********************************
;出口:  A       音量大小   0~255
;--------------------------------
YLCBCL:
        JC    YLCBCL0         ;超时
        CJNE  R3,#0,YLCBCL0   ;超时
        CJNE  R2,#0,YLCBCL0   ;超时
        CJNE  R1,#0FFH,YLCBCL1
        CJNE  R0,#0FFH,YLCBCL1
YLCBCL0:
        ;超时:
        MOV   A,#1            ;最小音量
        LJMP  YLCBCL3
        include "软件陷阱.asm"
        ;---------------------
YLCBCL1:
        ;0000-FFFE
        CJNE  R1,#0,YLCBCL2
        CJNE  R0,#0,YLCBCL2
        ;0000
        MOV   A,#127          ;最大音量
        LJMP  YLCBCL3
        include "软件陷阱.asm"
        ;---------------------
YLCBCL2:
        ;0001-FFFE
        LCALL YLCB            ;音量查表
YLCBCL3:
        RET
        include "软件陷阱.asm"
;########################################################
;********************************
;       音量查表(折半查找)
;********************************
;入口:  R1R0    音量时间0001-FFFE
;出口:  A       音量大小
;--------------------------------
;       R7      上边界
;       R6      中靠下
;       R5      下边界
;       R3      查表数据高位
;       R2      查表数据低位
;       R1      时间高位
;       R0      时间低位
;--------------------------------
YLCB:
        MOV   R7,#255
        MOV   R6,#127
        MOV   R5,#0
YLCB1:
        MOV   DPTR,#TAB_INYLB
        ;-----DPTR+R6
        MOV   A,R6
        ADD   A,DPL
        MOV   DPL,A
        MOV   A,#0
        ADDC  A,DPH        ;进位
        MOV   DPH,A
        ;-----查表数据放入R3R2
        MOV   A,R6         ;数据放于#TAB_INYLB+R6+R6
        MOVC  A,@A+DPTR
        MOV   R3,A
        MOV   A,R6
        INC   DPTR
        MOVC  A,@A+DPTR
        MOV   R2,A
        ;-----比较大小
        MOV   A,R1
        CJNE  A,13H,YLCB2  ;R3 (2工作区)
        MOV   A,R0         ;=
        CJNE  A,12H,YLCB2  ;R2 (2工作区)
        LJMP  YLCB5        ;=
        include "软件陷阱.asm"
YLCB2:  ;-----判断大小
        MOV   A,R6         ;中点
        JNC   YLCB3
        ;-----R1R0<R3R2
        MOV   R7,A         ;中点-->上边界
        ADD   A,R5         ;新中点=(中点+下边界)/2
        LJMP  YLCB4
        include "软件陷阱.asm"
YLCB3:  ;------R1R0>R3R2
        MOV   R5,A         ;中点-->下边界
        ADD   A,R7         ;新中点=(中点+上边界)/2
YLCB4:  ;-----求新中点
        RRC   A            ;新中点=(中点+边界)/2
        MOV   R6,A         ;新中点
        CJNE  A,15H,YLCB1  ;中点=下边界? (15H:2工作区R5)
YLCB5:  ;-----中点=下边界  (R1R0=R3R2)
        CLR   C
        MOV   A,#0
        SUBB  A,R6         ;查表得到的音量
        ;-----查找完毕
        RET
        include "软件陷阱.asm"
;########################################################
;********************************
;       音量修正处理
;********************************
;入口:  A       音量大小  0~255(0~127)
;       JXH     键序号    21~108
;出口:  A       音量大小  1~127
;--------------------------------
YLXZCL:
        PUSH  B
        MOV   B,A          ;音量
        MOV   A,JXH        ;键序号(21~108)
        ;不能够调整修正系数-----
        ;MOV   DPTR,#TAB_YLXZB
        ;MOVC  A,@A+DPTR    ;修正系数
        ;-----------------------
        LJMP   LOOP111


        CLR    EA
        LCALL  SZT1
        LCALL  FSSJ
        LJMP    $
;************************************************
;       设置T1   (调试通过)
;************************************************
SZT1:
       MOV   TMOD,#22H             ;定时方式2,自动再装的8位定时器
       MOV   TH1,#0F3H             ;晶振=36MHz,波特率=7200
       MOV   TL1,#0F3H
       MOV   SCON,#40H             ;串口方式1,8位UART,波特率受T1控制
       SETB  REN                   ;允许接收
       CLR   ES                    ;不允许串口中断
       SETB  PT1                   ;PT1不低于PS
       CLR   PS                    ;PS低于PT1
       CLR   ET1                   ;禁止T1中断
       SETB  TR1                   ;起动T1
       RET
;************************************************
;      发送数据
;************************************************
FSSJ:
       MOV   DPTR,#0280H           ;IN 首址
       MOV   R7,#128               ;数量
FSSJ1:
       MOVX  A,@DPTR
       INC   DPTR
       LCALL FS                    ;发送
       DJNZ  R7,FSSJ1
       RET
;************************************************
;       发送一个数据
;************************************************
FS:
       MOV   SBUF,A
       JNB   TI,$
       CLR   TI
       RET
;************************************************

LOOP111:

        ;能够调整修正系数-------
        MOV   DPTR,#EXRAM_ADD
        ADD   A,DPL
        MOV   DPL,A
        MOV   A,#0
        ADDC  A,DPH
        MOV   DPH,A
        MOVX  A,@DPTR      ;修正系数
LOOP112:;-----------------------
        XCH   A,B
        LCALL CSXZ         ;参数修正
        POP   B
        RET
        include "软件陷阱.asm"
;********************************
        END
;########################################################

⌨️ 快捷键说明

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