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

📄 th33.asm

📁 请认真阅读您的文件包然后写出其具体功能(至少要20个字)。尽量不要让站长把时间都花费在为您修正说明上。压缩包解压时不能有密码。系统会自动删除debug和release目录
💻 ASM
字号:
    ;电子琴

mode   equ 082h
PORTA  equ 7FFCh
CTL    equ 7FFFh
 ;P1 键盘读入口
Pulse    equ 55h  ;脉冲
PulseCNT equ 50h  ;脉冲计数
ToneHigh equ 51h  ;高音调
ToneLow  equ 52h  ;低音调
Tone     equ 53h  ;音调
KeyBuf   equ 54h

Speaker  equ PORTA
       ljmp  Start
       org   000bh
Timer0Int:        ;定时中断
       push  PSW
       clr   TR0
       mov   TH0, ToneHigh
       mov   TL0, ToneLow
       setb  TR0
       mov   a, Pulse
       mov   dptr, #Speaker
       movx  @dptr,a
       inc   Pulse
       dec   PulseCNT
       pop   PSW
       reti

ToneTable:
       ;dw     64100, 64220, 64340, 64460
       ;DW     64580, 64700, 64800
        DW    64021 64103 64260 64400 64524
        DW    64580 64684 64777 64820 64898 64968
        DW    65030 65058 65110 65157 65178
TestKey:
        MOV   P1,  #0FH
        MOV   A,   P1
                        ; 读入键状态
        cpl   a
        anl   a, #0fh         ; 高四位不用
        ret

KeyTable:DB   0EEH,0DEH,0BEH,07EH
         DB   0EDH,0DDH,0BDH,07DH
         DB   0EBH,0DBH,0BBH,07BH
         DB   0EFH,0D7H,0B7H,077H      ; 键码定义


GetKey:
      MOV R6,#10
      ACALL DELAY
      MOV   P1,  #0FH
      MOV   A,   P1
      CJNE  A,   #0FH, K12
      LJMP  MLOOP
K12:  MOV   B,A
      MOV   P1,  #0EFH ;
      MOV   A,   P1
      CJNE  A,   #0EFH,K13 ;
      MOV   P1,  #0DFH
      MOV   A,   P1
      CJNE  A,   #0DFH,K13 ;
      MOV   P1,  #0BFH
      MOV   A,   P1
      CJNE  A,   #0BFH,K13;
      MOV   P1,  #7FH
      MOV   A,   P1
      CJNE  A,   #7FH, K13;
      LJMP  MLOOP
K13:  ANL   A,   #0F0H;
      ORL   A,   B
      MOV   B,   A
      MOV   R1,  #16
      MOV   R2,  #0
      MOV   DPTR,#KEYTABLE
K14:  MOV   A,   R2
      MOVC  A,   @A+DPTR
      CJNE  A,   B,    K16
      MOV   P1,  #0FH;
K15:  MOV   A,   P1
      CJNE  A,   #0FH, K15;
      MOV   R6,  #10
      ACALL DELAY
      MOV   A,   R2
      RET
K16:  INC   R2 ;
      DJNZ  R1,  K14
      LJMP  MLOOP


Delay:               ; 延时子程序
       mov   r7, #0
DelayLoop:
       djnz  r7, DelayLoop
       djnz  r6, Delay
       ret


             ;#########################
Start:

       mov  sp, #70h
       mov  a, #mode
       mov  dptr,#CTL
       movx @dptr,a

       mov  TMOD, #01  ;  Timer
       mov  IE, #82h   ;  EA=1, IT0 = 1
       mov  Tone,#0
MLoop:
       call TestKey
       jz   MLoop
       call GetKey
       ;mov  b, a
       ;jz   MLoop      ; = 0, < 1
       ;anl  a, #8
       ;jnz  MLoop      ; > 7
       ;dec  b
       ;mov  a, b
       rl   a          ; a = a*2
       mov  b, a
       mov  dptr, #ToneTable
       movc a, @a+dptr
       mov  ToneHigh, a
       mov  TH0, a
       mov  a, b
       inc  a
       movc a, @a+dptr
       mov  ToneLow, a
       mov  TL0, a
       setb TR0
       mov  PulseCNT, #150
Wait:
       mov  a,PulseCNT
       DEC  A
       jnz  Wait
       clr  TR0
       ljmp MLoop

       end

⌨️ 快捷键说明

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