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

📄 电子琴.asm

📁 单片机程序 51频率计 电子琴 电子钟程序 按键显示程序最终成功
💻 ASM
字号:
;********** 数码管的显示控制---固定数值显示123456**********
;  显示代码 0 =77 H;  1=41H;  2=3BH;3=5BH  ; 4=4DH  ;5=5EH  ;6=7EH
;  如果显示代码不是上面的值,请先用实验6测试
         ORG       0000H
         AJMP      START
         ORG       000BH
         AJMP      T0_INT
START:   MOV       SP,#60H
         MOV       IE,#82H
         MOV       TH0,#0DBH
         MOV       TL0,#00H
         SETB      TR0
 MAIN:   MOV       P0,#48H     ; 显示1
         MOV       P2,#10001100B   ; 送控制公共端的I/O线
         MOV       P3,#0FEH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#0ADH     ; 显示2
         MOV       P2,#01001100B  ; 送控制公共端的I/O线
         MOV       P3,#0FDH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#0CDH     ; 显示3
         MOV       P2,#00100000B  ; 送控制公共端的I/O线
         MOV       P3,#0FBH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#4BH     ; 显示4
         MOV       P2,#00010000B  ; 送控制公共端的I/O线
         MOV       P3,#0F7H
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#0C7H     ; 显示5
         MOV       P2,#00011100B  ; 送控制公共端的I/O线
         MOV       P3,#0EFH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#0E7H     ; 显示6
         MOV       P2,#10001100B  ; 送控制公共端的I/O线
         MOV       P3,#0DFH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#4CH     ; 显示7
         MOV       P2,#01000000B  ; 送控制公共端的I/O线
         MOV       P3,#0BFH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#0EFH     ; 显示8
         MOV       P2,#00100000B  ; 送控制公共端的I/O线
         MOV       P3,#07FH
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#04FH     ; 显示9
         MOV       P2,#00011100B  ; 送控制公共端的I/O线
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         MOV       P0,#0EEH     ; 显示0
         MOV       P2,#10001100B  ; 送控制公共端的I/O线
         MOV       R5,#1; 延时20MS
         ACALl     DELAY20MS
         AJMP      MAIN
T0_INT:    PUSH      PSW
           SETB      RS0
           MOV       TH0,#0DBH
           MOV       TL0,#00H
           MOV       P1,#0F0H  ;检查有没有按键
           MOV       A,P1
           CJNE      A,#0F0H,SCAN_KEY
T0_RET:    POP       PSW
           RETI
SCAN_KEY:  MOV      P1,#0FEH
           MOV      A,P1
           CJNE     A,#0EEH,SCAN_KEY1
           MOV      30H,#1
SCAN_KEY1: CJNE     A,#0DEH,SCAN_KEY2
           MOV      30H,#2
SCAN_KEY2: CJNE     A,#0BEH,SCAN_KEY3
           MOV      30H,#3
SCAN_KEY3: CJNE     A,#7EH,SCAN_KEY4
           MOV      30H,#4
           AJMP     SCAN_KEY16
SCAN_KEY4: MOV      P1,#0FDH
           MOV      A,P1
           CJNE     A,#0EDH,SCAN_KEY5
           MOV      30H,#5
SCAN_KEY5: CJNE     A,#0DDH,SCAN_KEY6
           MOV      30H,#6
SCAN_KEY6: CJNE     A,#0BDH,SCAN_KEY7
           MOV      30H,#7
SCAN_KEY7: CJNE     A,#07DH,SCAN_KEY8
           MOV      30H,#8
           AJMP     SCAN_KEY16
SCAN_KEY8: MOV      P1,#0FBH
           MOV      A,P1
           CJNE     A,#0EBH,SCAN_KEY9
           MOV      30H,#9
SCAN_KEY9: CJNE     A,#0DBH,SCAN_KEY10
           MOV      30H,#10
SCAN_KEY10: CJNE    A,#0BBH,SCAN_KEY11
           MOV      30H,#11
SCAN_KEY11: CJNE    A,#7BH,SCAN_KEY12
           MOV      30H,#12
           AJMP     SCAN_KEY16
SCAN_KEY12: MOV      P1,#0F7H
           MOV      A,P1
           CJNE     A,#0E7H,SCAN_KEY13
           MOV      30H,#13
SCAN_KEY13: CJNE     A,#0D7H,SCAN_KEY14
           MOV      30H,#14
SCAN_KEY14: CJNE     A,#0B7H,SCAN_KEY15
           MOV      30H,#15
SCAN_KEY15: CJNE     A,#77H,SCAN_KEY16
           MOV      30H,#16
SCAN_KEY16: mov      31H,#70
           ACALL    AVOID    ;调用键音作延时
           AJMP    T0_RET
  AVOID:   MOV      R6,30H   ; 0.25秒
           SETB     p2.1   ;喇叭控制脚高
    TT11:  MOV      R7,#100
           DJNZ     R7,$   ; 延时250*2*1US=500US
           DJNZ     R6,TT11
	   CLR      p2.1      ;喇叭控制脚低
           MOV      R6,30H
    TT22:  MOV      R7,#100
           DJNZ     R7, $  ; 延时250*2*1US=500US
           DJNZ     R6,TT22 ;高500+低500=1000US
           DJNZ     31H,AVOID
           CLR      p2.1     ;关喇叭
           RET
 ;********** DLY20MS SUB_PROGRAM *************;
 DELAY20MS:  MOV    R6,#210    ; R5 次
     LOOP:   MOV   R7,#248   ;R5*R6=R5*40 次
    loop1:   DJNZ  R7,loop1 ;R5*R6*R7 =R5*40*248=9920*R5次
             DJNZ     R6,LOOP     ;R6*R5 =40*R5 次
             DJNZ     R5,DELAY20MS   ;R5 =1 次
   DEL_RET:  RET
             END



⌨️ 快捷键说明

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