DATA SEGMENT
MES0 DB 'Please input four codes!',0AH,0DH,0AH,0DH,'$';初始化
MES1 DB 'Press E to exit!',0AH,0DH,0AH,0DH,'$'
MES2 DB 'Output Ladder wave!',0AH,0DH,0AH,0DH,'$'
MES3 DB 'Output Since wave!',0AH,0DH,0AH,0DH,'$'
MES4 DB 'Output Trapezoidal wave!',0AH,0DH,0AH,0DH,'$'
MES5 DB 'Output Square-wave!',0AH,0DH,0AH,0DH,'$'
MES6 DB 'Output 1KHZ Square-wave!',0AH,0DH,0AH,0DH,'$'
DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;键值表,0~F对应的7段数码管的段位值
STABLE DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H,0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E2H,0DAH,0D1H,0C7H,0BCH,0B0H,0A5H,098H,8CH,80H,7FH,73H,67H,5AH,4FH,43H,38H,2EH,25H,1DH,15H,0FH,09H,05H,02H,00H,00H,02H,05H,09H,0FH,15H,1DH,25H,2EH,38H,43H,4FH,5AH,67H,73H,7FH;正弦波数值表
VALUE DB 10 DUP(?)
CODES DB 'W','Y','R','X';设置密码
DATA ENDS
NEXT:MOV AH,01H ;;输入四位密码
INT 16H
CMP AL,'E'
JZ QUIT
STOSB
LOOP NEXT
LEA SI,CODES ;判断密码是否正确?
LEA DI,ES:VALUE
MOV CX,4
QUIT:MOV AX,4C00H
INT 21H
AGAIN:CMPSB
JNZ WRONG
DEC CX
JNZ AGAIN
MOV DX,ADC0809 ;启动0809的IN0
OUT DX,AL
CALL DALLY
L:MOV DX,PCTL ;判断EOC=1?
MOV AL,80H
OUT DX,AL
MOV DX,PC55
IN AL,DX
CMP AL,01H
JNZ L
MOV CX,14H ;读0809的IN0值
MOV SI,3000H
MOV BH,00H
L1:MOV DX,ADC0809
IN AL,DX
ADD BH,AL
LOOP L1
MOV BL,14H
MOV AH,BH
MOV AL,0H
DIV BL
MOV [SI],AL
CALL SHOW
CMP AL,15H
JC LADDER
CMP AL,80H
JC SINCE
CMP AL,0A0H
JC Trapezoidal
CMP AL,0C0H
JC SQUARE
CALL KSQUARE
Trapezoidal PROC NEAR ;梯形波
PUSH AX
LEA DX,MES4
MOV AH,09H
INT 21H
Z:MOV BX,10H
MOV AL,0H
MOV DX,DAC0832
OUT DX,AL
Z3:MOV AL,33H
Z1:OUT DX,AL
INC AL
CMP AL,0FFH
JNZ Z1
CALL DALLY
Z2:OUT DX,AL
DEC AL
CMP AL,33H
JNZ Z2
DEC BX
JNZ Z3
MOV AH,1
INT 16H
JZ Z
POP AX
RET
Trapezoidal ENDP
SINCE PROC NEAR ;正弦波
PUSH AX
LEA DX,MES3
MOV AH,09H
INT 21H
S:MOV BX,10H
S2:LEA SI,STABLE
MOV CX,40H
S1:MOV AL,[SI]
MOV DX,DAC0832
OUT DX,AL
INC SI
DEC CX
JNZ S1
DEC BX
JNZ S2
MOV AH,1
INT 16H
JZ S
POP AX
RET
SINCE ENDP
LADDER PROC NEAR ;阶梯波
PUSH AX
LEA DX,MES2
MOV AH,09H
INT 21H
C:MOV AL,0
C1:MOV DX,DAC0832
OUT DX,AL
MOV AL,33H
CALL DALLY
CMP AL,0FFH
JNZ C1
MOV AH,1
INT 16H
JZ C
POP AX
RET
LADDER ENDP
SQUARE PROC NEAR ;500HZ方波
PUSH AX
LEA DX,MES5
MOV AH,09H
INT 21H
MOV AL,36H
MOV DX,TCTL
OUT DX,AL
MOV AL,0EH
MOV DX,TIMER0
OUT DX,AL
MOV AL,66H
OUT DX,AL
POP AX
RET
SQUARE ENDP
KSQUARE PROC NEAR ;1KHZ方波
PUSH AX
LEA DX,MES6
MOV AH,09H
INT 21H
MOV AL,00110111B
MOV DX,TCTL
OUT DX,AL
MOV AL,07H
MOV DX,TIMER0
OUT DX,AL
MOV AL,33H
OUT DX,AL
POP AX
RET
KSQUARE ENDP
DALLY PROC NEAR ;延时子程序
PUSH CX
MOV CX,00FFH
D1:MOV AX,00FFH
D2:DEC AX
JNZ D2
LOOP D1
POP CX
RET
DALLY ENDP
SHOW PROC NEAR ;数码管显示子程序
PUSH AX
MOV SI,3000H
MOV DL,0DFH
MOV AL,DL
AGIN:PUSH DX
MOV DX,PA55
OUT DX,AL
MOV AL,[SI]
LEA BX,DTABLE
XLAT
MOV DX,PB55
OUT DX,AL
CALL DALLY
INC SI
POP DX
MOV AL,DL
TEST AL,01H
JZ OUT1
ROR AL,1
MOV DL,AL
JMP AGIN
OUT1:POP AX
RET
SHOW ENDP
CODE ENDS
END START