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

📄 电子琴.asm

📁 基于Proteus的51系列单片机设计与仿真
💻 ASM
字号:
ORG  0000H
      LJMP  MAI
      ORG  000BH
      LJMP  TIM
MAI:  CLR  TR0                ;;关闭上一次定时,进入下一次按键判断
      MOV  TMOD, #01H
      MOV  IE, #82H
      MOV  A, P1
      MOV  30H, A             ;;保存键盘状态值
      LCALL  D10MS           ;;延迟10ms消除抖动
      MOV  A , P1              ;;再读键盘状态
      CJNE  A, 30H, MAI        ;;两次结果不同,是抖动引起,转MAI
      JNB  P2.0, N1
      JNB  P2.1, N2
      JNB  P2.2, N3
      JNB  P2.3, N4
      JNB  P2.4, N5
JNB  P0.5, N6
N6:   LJMP  LA                ;;JNB的跳转范围限定在256B,所以用LJMP跳转
      JNB  P0.6, N7
N7:   LJMP  XI
JNB  P0.7, N8
N8:   LJMP  DO
N1:   MOV  DPTR, #TAB        ;;设定音阶1的定时时间
      MOV  A, #00H
      MOVC  A, @A+DPTR   
      MOV  R1, A
      MOV  A, #01H
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0 ,R0
      SETB  TR0
RE1:  JB  P0.0, MAI            ; ;判断琴键1是否释放
      AJMP  RE1
N2:   MOV  DPTR, #TAB         ;;设定音阶2的定时时间
      MOV  A, #02H
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #03H
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0, R0
      SETB  TR0
RE2:  JB  P0.1, MAI
      AJMP  RE2
N3:   MOV  DPTR, #TAB        ; ;设定音阶3的定时时间
      MOV  A, #04H
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #05H
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0, R0
      SETB  TR0
RE3:  JB  P0.2, MAI
      AJMP  RE3
N4:   MOV  DPTR, #TAB        ; ;设定音阶4的定时时间
      MOV  A, #06H
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #07H
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV TL0, R0
      SETB  TR0
RE4:  JB  P0.3, A1
      AJMP  RE4
A1:   LJMP  MAI
N5:   MOV  DPTR, #TAB         ;;设定音阶5的定时时间
      MOV  A, #08H
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #09H
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0, R0
      SETB  TR0
RE5:  JB  P0.4, A2
      AJMP  RE5
A2:   LJMP  MAI
LA:   MOV  DPTR, #TAB       ; ;设定音阶6的定时时间
      MOV  A, #0AH
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #0BH
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0, R0
      SETB  TR0
RE6:  JB  P0.5, A3
      AJMP  RE6
A3:   LJMP  MAI
XI :   MOV  DPTR, #TAB      ;  ;设定音阶7的定时时间
      MOV  A, #0CH
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #0DH
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0, R0
      SETB  TR0
RE7:  JB  P0.6,A4
      AJMP  RE7
A4:   LJMP  MAI
DO:   MOV  DPTR, #TAB        ;;设定音阶7的定时时间
      MOV  A, #0EH
      MOVC  A, @A+DPTR
      MOV  R1, A
      MOV  A, #0FH
      MOVC  A, @A+DPTR
      MOV  R0, A
      MOV  TH0, R1
      MOV  TL0, R0
      SETB  TR0
RE8:  JB  P0.7,A5
A5:   LJMP  MAI
TIM:  MOV  TH0, R1           ;  ;重装定时器初值
      MOV  TL0, R0
      CPL  P1.0
      RETI                    ;   ;中断返回
D10MS:MOV  R1, #100            ; ;延时10ms子程序
D1:   MOV  R2, #98
      NOP
D2:   DJNZ  R2, D2
      DJNZ  R1, D1
      RET
TAB:  DB  0FEH, 25H
      DB  0FEH, 57H
      DB  0FEH, 84H
      DB  0FEH, 98H
      DB  0FEH, 0C0H
      DB  0FEH, 0E3H
DB  0FFH, 01H
DB  0EFH, 07H
      END

⌨️ 快捷键说明

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