📄 lsj.asm
字号:
ORG 0000H
LJMP MAIN ;设置主程序入口
ORG 0003H ;外部中断INT0
LJMP INTO
ORG 0030H
MAIN: SETB IT0 ;设置边沿触发方式
SETB EX0 ;允许中断
SETB EA
MOV A, #0FEH ;设置LED最低位亮,”0“亮
LOOP: MOV P1, A ;输出P1口
MOV 30H, #10 ;设置延时时间,0.5s
LCALL DELAY
RL A ;左移1位
SJMP LOOP
INTO: CLR EA ;关闭中断
PUSH ACC
MOV 30H, #1 ;延时50ms
LCALL DELAY
JB P3.2, INT0_RET ;若主持人键没按下,认为是一次干扰,中断返回
JNB P3.2, $ ;按下,等待释放
MOV P2, #0BFH ;主持人键已按下,显示"-"
INT0_1: MOV A, P0 ;读P0口内容
JNB ACC.0,LP1 ;若甲按下,转LP1
JNB ACC.1,LP2 ;若乙按下,转LP2
JNB ACC.2,LP3 ;若丙按下,转LP3
JNB ACC.3,LP4 ;若丁按下,转LP4
SJMP INT0_1 ;继续等待抢答
LP1: MOV P2, #0F9H ;显示"1"
SJMP LP_C0M
LP2: MOV P2, #0A4H ;显示"2"
SJMP LP_C0M
LP3: MOV P2, #0B0H ;显示"3"
SJMP LP_C0M
LP4: MOV P2, #99H ;显示"4"
LP_C0M:CLR P3.4 ;开喇叭
MOV 30H, #20 ;设置喇叭响的时间
LCALL DELAY ;延时1s
SETB P3.4 ;关喇叭
MOV 30H, #60H ;设置结果显示时间
LCALL DELAY
MOV P2, #0FFH ;数码管全黑
INT0_RET: SETB EA ;关中断
POP ACC
RETI
;-------------------------------延时子程序---------------------------------
DELAY: MOV R4, 30H ;延时子程序, 延时时间=(30H)*50ms
DEL0: MOV R5,#50
DEL1: MOV R6,#250
DEL2: NOP
NOP
DJNZ R6,DEL2
DJNZ R5,DEL1
DJNZ R4,DEL0
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -