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

📄 keymusic.asm

📁 学林电子实验箱源码 完整板
💻 ASM
字号:
   ;16键电子琴,喇叭p33键盘p1可以任意弹奏音乐
;***************************************************************************
;*  sxj1974@163.com		     (51c51 test web)     www.8951.com     *
;*  Create by :石学军      www.51c51.com 更多例程请登陆网站        	   *
;***************************************************************************
    ORG 0000H
   JMP START              ;到主程序
   ORG 000BH             ;中断入口
   jmp tim0              ;
START:
   MOV TMOD,#01H	;设定定时器工作方式 1
   MOV IE,#82H       	;中断使能
   setb tr0          	;启动time0
l1:call key         	;调用key
   clr ea            	;中断屏蔽
   jb f0,l1          	 ;没有按那么f0=1否则=0
   mov a,22h              ;如果按了取码指针存入a
   rl a                   ;乘2
     MOV DPTR,#table       ;表头地址送DPTR
     MOVC A,@A+DPTR       ;查表取代码
     mov th0,a            ;高字节存入th0
     mov 21h,a		  ;存入21h
     mov a,22h   	  ;再载入取码指针
     rl a            	  ;乘2
     inc a                ;加1
      MOVC A,@A+DPTR       ;查表取代码
      mov tl0,a             ; 低字节存入tl0
    mov 20h,a                ;再存入20h
   l2:   call key        ;调用按键处理
      setb ea              ;中断使能
      jb f0,l1             ;有按否
      jmp l2                ;有则跳到l2

   key:setb f0       ;f0=1
   mov r3,#0f7h      ;扫描初值
   mov r1,#00h       ;取码指针初值
   l3:mov a,r3       ;载入扫描指针
   mov p1,a          ;输入至P2,开始扫描
   mov a,p1          ;读入P2
   clr c
   cpl c             ;令C=1
   mov r5,#04h       ;检测P27~24
   l4:rlc a          ;左移一位
   jnc keyin         ;检测行C=0
   inc r1            ;没有则取码指针加1;
   djnz r5,l4        ;4列检测完毕?
   mov a,r3          ;载入扫描指针
   clr c
   cpl c             ;C=1
   rrc a             ;扫描下一行
   mov r3,a          ;存回R3扫描指针寄存器
   jc l3             ;C=0表示扫描完毕
   ret
   keyin: mov 22h,r1 ;取码指针存入22H
   clr f0            ;令F0=0
   ret
 tim0:push acc       ;将A的值暂存于堆栈
     push psw        ;将PSW的值暂存于堆栈
     mov tl0,20h     ;重设计数值
     mov th0,21h
     cpl p3.3        ;将P3.3取反
     pop psw         ;至堆栈取回PSW的值
     pop acc         ; 至堆栈取回A的值
     reti            ;返回主程序
table:	dw	64021,64103,64260,64400
        dw 64524,64580,64684,64777
        dw 64820,64898,64968,65030
        dw 65058,65110,65157,65178
        end

⌨️ 快捷键说明

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