?? 新建 文本文檔.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 + -