📄 新建 文本文档.txt
字号:
声-光报警器
编写程序控制音乐发生器和LED工作使他们组成声光报警装置,自己设置按键来控制音乐发生器启停
STACK1 SEGMENT
DW 200 DUP (?)
STACK1 ENDS;
DATA SEGMENT PARA PUBLIC 'DATA'
MES DB 'PRESS SW3 TO START !',0AH,0DH ;系统提示
DB 'IF YOU WANT TO QUIT, PLEASE HIT ANY KEY!',0AH,0DH,'$'
T DW 0 ;初始化延时变量为0
NUM DW 0 ;初始化数字变量为0
DATA7 DB 81H,42H,24H,18H,81H,42H,24H,18H
DATA ENDS;
CODE SEGMENT
ASSUME SS:STACK1,CS:CODE,DS:DATA
SL PROC
MOV AX,STACK1
MOV SS,AX
MOV AX,DATA
MOV DS,AX
MOV AH,09H ;显示系统提示
MOV DX,OFFSET MES
INT 21H
MOV DX,303H ;初始化8255
MOV AL,83H ;C口低4位输入高4位输出,B口输入,A口输出
OUT DX,AL
MOV DX,300H ;LED全灭
MOV AL,00H
OUT DX,AL
MOV DX,303H ;关闭SPK
MOV AL,0CH ;PC6=0
OUT DX,AL
WAIT1: MOV DX,302H ;查SW3按下?
IN AL,DX ;(PC2=0?)
AND AL,04H
JNZ WAIT1 ;未按下,等待
BEGIN: CALL LEDFLASH ;已按下,调用LED发光子程
MOV BX,200
MOV T,0FFFFH
HISON: CALL OUTSPK ;调用喇叭发声子程(高频)
DEC BX
JNZ HISON
MOV DX,300H ;LED全灭
MOV AL,00H
OUT DX,AL
MOV BX,200
MOV T,0AFH
LOSON: CALL OUTSPK ;调用喇叭发声子程(低频)
DEC BX
JNZ LOSON
CALL DELAY2
MOV AH,0BH ;查任意键按下?
INT 21H
CMP AL,0FFH
JE QUIT ;有任意键按下,退出
JMP BEGIN ;无任意键按下,继续
QUIT: MOV DX,300H ;LED全灭
MOV AL,00H
OUT DX,AL
MOV DX,303H ;关闭SPK
MOV AL,0CH
OUT DX,AL
MOV AH,4CH
INT 21H ;返回DOS
SL ENDP;
DELAY1 PROC ;延时子程1
PUSH BX
MOV BX,T
DL1: DEC BX
JNZ DL1
POP BX
RET
DELAY1 ENDP ;
DELAY2 PROC ;延时子程2
PUSH CX
PUSH BX
MOV CX,04FFH
DL4: MOV BX,0FFFFH
DL3: DEC BX
JNZ DL3
DEC CX
JNZ DL4
POP BX
POP CX
RET
DELAY2 ENDP ;
OUTSPK PROC ;喇叭发声子程
MOV DX,303H ;从PC6输出方波
MOV AL,0DH ;置PC6=1;打开8253
OUT DX,AL
CALL DELAY1
MOV DX,303H
MOV AL,0CH ;置PC6=0;关闭8253
OUT DX,AL
CALL DELAY1
RET
OUTSPK ENDP;
LEDFLASH PROC ;LED发光子程序
MOV SI,OFFSET DATA7 ;LED的点亮代码
ADD SI,NUM
MOV AL,[SI]
MOV DX,300H ;从8255的A口输出LED点亮代码
OUT DX,AL
INC NUM
CMP NUM,08H
JNE NEXT
MOV NUM,00H
NEXT: RET
LEDFLASH ENDP
CODE ENDS
END SL
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -