key+buzzer.asm

来自「使用开发板上8个独立按键和蜂鸣器」· 汇编 代码 · 共 85 行

ASM
85
字号
;汇编语言编译:简易电子琴实验——查表方式显示
;=======================================
;Function: 程序开始.
;=======================================
        ORG   0000H
        AJMP  MAIN
        ORG   000BH
        LJMP  Break
        ORG   0030H

;=======================================
;Function: 程序初始化.
;=======================================
MAIN:   MOV   TMOD,#01H    ;设置定时器0的工作方式1
        SETB  ET0          ;设置定时器0中断
        SETB  TR0          ;启动定时器0
        CLR   EA           ;屏蔽中断

WAIT1:  LCALL KEY          ;调用KEY子程序,判断有键按下否?第几个键?
        CLR   EA           ;屏蔽中断
        SETB  P1.4         ;将P1.4置高,关闭蜂鸣器
        CJNE  R3,#00H,WAIT1 ;如果R3=0,则表示有键按下
        MOV   25H,22H      ;将22H里存放的按键号送给25H保存

        MOV  A,22H         ;将22H里存放的按键号送给A
        RL   A             ;因为查表里都是字,所以得乘2查得数据
        MOV DPTR,#TABLE    ;置键码表首址
        MOVC A,@A+DPTR     ;查表
        MOV  TH0,A         ;将数据高位送TH0
        MOV  21H,A         ;将高位备份

        MOV  A,22H         ;将22H里存放的按键号送给A
        RL   A             ;因为查表里都是字,所以得乘2查得数据
        INC  A             ;取低位数据
        MOVC A,@A+DPTR
        MOV  TL0,A
        MOV 20H,A

WAIT2:  LCALL KEY          ;调用键盘程序
        SETB  EA
        CJNE  R3,#00H,WAIT1 ;R3!=0,表示无键按下,跳转到WAIT1处
        MOV   A,25H
        CJNE  A,22H,WAIT1   ;按键号改变,到WAIT1 处
        SJMP  WAIT2

;=======================================
KEY:    MOV  R3,#0FFH      ;KEY子程序,判断有键按下否?第几个键?
        MOV  A,#0FFH
        MOV  P2,A          ;实验系统键盘接口在P2口,读入键盘按键值
        MOV  A,P2
        CJNE A,#0FFH,HaveKey
        AJMP NoKey

HaveKey:SETB C             ;利用标志位CY来判断是哪个键按下
        MOV  R2,#08H
        MOV  R0,#00H

WAIT3:  RRC  A             ;移位判断
        JNC  STORE
        INC  R0
        DJNZ R2,WAIT3
        AJMP NoKey

STORE:  MOV  22H,R0        ;将按键号存22H,R3=0有键按下
        MOV  R3,#00H

NoKey:
     RET

;=======================================
Break:  PUSH ACC           ;中断产生方波,从P1.4口输出
        PUSH PSW
        MOV  TL0,20H
        MOV  TH0,21H
        CPL  P1.4
        POP  PSW
        POP  ACC
     RETI

;=======================================
        ORG 0200H          ;定义蜂鸣发声的数据表格
TABLE: DW 64655,64751,64837,64876,64948,65012,65069,65095 ;1,2,3,4,5,6,7,1
END

⌨️ 快捷键说明

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