📄 sincex3.asm
字号:
;用电位器调节曲线y=asin(bx)参数
DATA SEGMENT
MESS1 DB 0DH,0AH,0DH,0AH,0FFH,' Press 4 to show asin(bx)',0DH,0AH,' 5 TO QUIT',0DH,0AH,0FFH,0FFH,' Anykey to pause'
DB 0DH,0AH,0DH,0AH,0DH,0AH,0FFH,0FFH,' zhouyaoxin (08003128)',0DH,0AH ,'$'
MESS2 DB ' parameter a = '
WA DB 31H,30H,30H,'/255A (V)',0DH,0AH
DB ' parameter b = 0.054/'
WB DB 30H,30H,31H,'T',0DH,0AH,'$'
NUMA DB 0AH
NUMB DB 1H
NUM DW 20H
; sin table (totally 116 sample values)
SINBUF DB 128D,135D,141D,148D,155D,161D,167D,174D,180D,186D
DB 192D,198D,203D,209D,214D,219D,223D,227D,231D,235D
DB 239D,242D,245D,248D,250D,252D,253D,254D,255D
DB 255D,254D,253D,252D,250D,248D,245D,242D,239D
DB 235D,231D,227D,223D,219D,214D,209D,203D,198D,192D
DB 186D,180D,174D,167D,161D,155D,148D,141D,135D,128D
DB 121D,115D,108D,101D, 95D, 89D, 82D, 76D, 70D
DB 64D, 58D, 53D, 47D, 42D, 37D, 33D, 29D, 25D, 21D
DB 17D, 14D, 11D, 08D, 06D, 04D, 03D, 02D, 01D, 00D
DB 00D, 01D, 02D, 03D, 04D, 06D, 08D, 11D, 14D, 17D
DB 21D, 25D, 29D, 33D, 37D, 42D, 47D, 53D, 58D, 64D
DB 70D, 76D, 82D, 89D, 95D,101D,108D,115D,121D
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LABAL1: CALL CRTSET ;显示模式设置
MOV NUM,20
LEA DX,MESS1
MOV AH,09H
INT 21H ;显示提示信息
LABAL: MOV DL,0FFH
MOV AH, 06H
INT 21H ;读键盘
MOV BL,AL
CMP BL,34H
JZ IS4 ;为4则画曲线
CMP BL,35H
JZ TEMP0 ;为5则退出
JMP LABAL
IS4: CALL CRTSET ;清屏
LEA DX,MESS2
MOV AH,09H
INT 21H ;显示当前参数值
IS41: MOV SI, 0
DD1:
MOV DX,298H ;启动A/D转换
OUT DX,AL
CALL DELAY3
IN AL,DX ;读转换值
CMP NUMA,AL ;比较是否有参数变化
JNZ SHOWA ;有则修改参数 a,刷新参数显示值
T_D:
MOV DX,299H ;启动A/D转换
OUT DX,AL
CALL DELAY3
IN AL,DX ;读转换值
CMP NUMB,AL ;比较是否有参数变化
JNZ SHOWB ;有则修改参数 b,刷新参数显示值
T_B: MOV AL,SINBUF[SI] ;读表值
MOV AH,0
MOV CL,NUMA
MUL CL
MOV DL,255
DIV DL ;为控制显示范围,缩小255倍
MOV DX,29CH
OUT DX,AL
INC DX
OUT DX,AL ; 启动D/A转换,输出制示波器
MOV BL,AL ;;
MOV AX,128 ;;
MUL CL ;;
MOV DL,255 ;;
DIV DL ;;
MOV CL,128 ;;
SUB CL,AL ;;
MOV AL,BL ;;
ADD AL,CL ;坐标调整,使曲线在中间显示
CMP NUM,620 ;画满一屏幕就不画点,但继续循环
JLE RESET
JMP _C
TEMP0: JMP QUIT
TLABAL1: JMP LABAL1
TEMIS: JMP IS41
_D: CALL CRTSET
LEA DX,MESS2
MOV AH,09H
INT 21H
JMP T_D
RESET: CALL ADCDIS ;调用画点子程序
_C:
CALL DELAY ;调用延时子程序,此处可以改变周期
MOV DL,0FFH
MOV AH,06H
INT 21H ;读键盘
JZ _A
CMP AL,35H
JZ TLABAL1 ;为5则跳至上一菜单
_A: CMP SI,73H
JZ TEMIS ;画完一个周期si清零
INC SI
JMP DD1
SHOWA: ;修改参数a
MOV NUMA,AL
CALL DIPA ;调用a显示修改子程序
MOV NUM ,20
JMP _D
SHOWB: ;修改参数b
MOV NUMB,AL
CALL DIPB ;调用a显示修改子程序
MOV NUM ,20
CALL CRTSET
LEA DX,MESS2
MOV AH,09H
INT 21H ;刷新参数显示值
JMP T_B
QUIT:
MOV AH,4CH
INT 21H
CRTSET PROC NEAR ;显示模式设置子程序
PUSH AX
MOV AH,0
MOV AL,06H
INT 10H
POP AX
RET
CRTSET ENDP
ADCDIS PROC NEAR ; 画点子程序
S12: PUSH DX
PUSH CX
PUSH AX
PUSH BX
XOR AH,AH
MOV DL,160
MUL DL
MOV DL,255
DIV DL
XOR AH,AH
MOV DX,AX
MOV AX,160
SUB AX,DX
ADD AX,20
MOV DX,AX
MOV AX,NUM
MOV BX,AX
MOV CX,BX
MOV AH,0CH
MOV AL,1
INT 10H
MOV CL,NUMB
MOV CH,0
ADD BX,CX
MOV NUM,BX ;修改横坐标
CMP BX,640
JNZ DISEND
MOV BX,00H
MOV NUM,BX
DISEND: POP BX
POP AX
POP CX
POP DX
RET
ADCDIS ENDP
DELAY PROC NEAR ;延时子程序,可根据参数b的值改变延时长度
PUSH CX
PUSH AX
PUSH BX
MOV AL,NUMB
MOV BL,10
MUL BL ;将参数b的值扩大10倍,使之变化明显
MOV CX,AX
NEXT: CALL DELAY1
LOOP NEXT
POP BX
POP AX
POP CX
RET
DELAY ENDP
DIPA PROC NEAR ;将16进制a变为10进制
PUSH AX
PUSH BX
MOV AL,NUMA
MOV AH,0
MOV BL,100
DIV BL ;模100处理
MOV WA,AL
ADD WA,30H
MOV AL,AH
MOV AH,0
MOV BL,10
DIV BL ;模10处理
MOV WA[1],AL
ADD WA[1],30H
MOV WA[2],AH
ADD WA[2],30H
POP BX
POP AX
RET
DIPA ENDP
DIPB PROC NEAR ;将16进制b变为10进制
PUSH AX
PUSH BX
MOV AL,NUMB
MOV AH,0
MOV BL,100
DIV BL ;模100处理
MOV WB,AL
ADD WB,30H
MOV AL,AH
MOV AH,0
MOV BL,10
DIV BL ;模10处理
MOV WB[1],AL
ADD WB[1],30H
MOV WB[2],AH
ADD WB[2],30H
POP BX
POP AX
RET
DIPB ENDP
DELAY1 PROC NEAR ;延时子程序
PUSH CX
MOV CX,300H
NEXT1: LOOP NEXT1
POP CX
RET
DELAY1 ENDP
DELAY3 PROC NEAR ;ADDA延时子程序
PUSH CX
MOV CX,0FFFH
NEXT3: LOOP NEXT3
POP CX
RET
DELAY3 ENDP
CODE ENDS
END START ;;;;;;;;;;;;;;;;;;;;;;;;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -