📄 fashechengxu.asm
字号:
H:\实践\fashechengxu.asm 12/13/07 23:07:32
ORG 0000H
AJMP MAIN
ORG 30H
MAIN:MOV SP,#5FH
LOOP:ACALL KEY
JNB F0,LNEXT
ACALL KEYPROC
LNEXT:AJMP LOOP
;-------------------------------------------------------------------------------------------------------------
----
KEY:
CLR F0 ;清F0,表示无键按下。
ORL P1,#00111100B ;将P3口的接有键的四位置1
MOV A,P1 ;取P3的值
ORL A,#11000011B ;将其余4位置1
CPL A ;取反
JZ K_RET ;如果为0则一定无键按下
ACALL DELAY ;否则延时去键抖
ORL P1,#00111100B
MOV A,P1
ORL A,#11000011B
CPL A
JZ K_RET
MOV B,A ;确实有键按下,将键值存入B中
SETB F0 ;设置有键按下的标志
K_RET:
ORL P1,#00111100B ;此处循环等待键的释放
MOV A,P3
ORL A,#11000011B
CPL A
JZ K_RET1 ;直到读取的数据取反后为0说明键释放了,才从键盘处理程序中返回
AJMP K_RET
K_RET1:
RET
DELAY:
MOV R7,#100
D1: MOV R6,#100
DJNZ R6,$
DJNZ R7,D1
RET
;-------------------------------------------------------------------------------------------------------------
----
KEYPROC:
MOV A,B ;从B寄存器中获取键值
JB ACC.2,CODE2 ;分析键的代码,某位被按下,则该位为1(因为在键盘程序中已取反)
JB ACC.3,CODE3
JB ACC.4,CODE4
JB ACC.5,CODE5
RET
;-------------------------------------------------------------------------------------------------------------
----
CODE2:ACALL CODE_START
ACALL CODE_1
MOV R5,#7
LOOP1:ACALL CODE_0
DJNZ R5,LOOP1
RET
;-------------------------------------------------------------------------------
CODE3:ACALL CODE_START
ACALL CODE_1
MOV R5,#2
LOOP2:ACALL CODE_0
ACALL CODE_0
ACALL CODE_1
DJNZ R5,LOOP2
ACALL CODE_0
RET
;---------------------------------------------------------------------------------
CODE4:ACALL CODE_START
ACALL CODE_1
MOV R5,#2
LOOP3:ACALL CODE_0
ACALL CODE_1
ACALL CODE_0
DJNZ R5,LOOP3
ACALL CODE_0
RET
;------------------------------------------------------------------------------------
CODE5:ACALL CODE_START
ACALL CODE_1
MOV R5,#2
LOOP4:ACALL CODE_0
ACALL CODE_1
ACALL CODE_1
DJNZ R5, LOOP4
页: 1
H:\实践\fashechengxu.asm 12/13/07 23:07:32
ACALL CODE_0
RET
;------------------------------------------------------------------------------------
CODE_0:CLR P0.0
MOV TMOD,#01H
MOV TL0,#0CH
MOV TH0,#0FEH
SETB P0.0
SETB TR0
AGAIN2:JNB TF0,AGAIN2
CLR TR0
CLR TF0
CLR P0.0
MOV TL0,#0CH
MOV TH0,#0FEH
SETB TR0
AGAIN3:JNB TF0,AGAIN3
CLR TR0
CLR TF0
RET
;-----------------------------------------------------------------------------------------------------------
CODE_1:CLR P0.0
MOV TMOD,#1
MOV TL0,#0CH
MOV TH0,#0FEH
SETB P0.0
SETB TR0
AGAIN4:JNB TF0,AGAIN4
CLR TR0
CLR TF0
CLR P0.0
MOV TL0,#24H
MOV TH0,#0FAH
SETB TR0
AGAIN5:JNB TF0,AGAIN5
CLR TR0
CLR TF0
RET
;-------------------------------------------------------------------------------------------------------------
-CODE_START:CLR P0.0
MOV TMOD,#01
MOV TL0,#60H
MOV TH0,#0F0H
SETB P0.0
SETB TR0
AGAIN: JNB TF0, AGAIN
CLR TR0
CLR TF0
CLR P0.0
MOV TL0,#0CH
MOV TH0,#0FEH
SETB TR0
AGAIN1: JNB TF0,AGAIN1
CLR TR0
CLR TF0
RET
;-------------------------------------------------------------------------------------------------------------
---
END
页: 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -