📄 sincex2.asm
字号:
;采用小键盘修改曲线y=a*sin(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 ;参数变量a
NUMB DB 1H ;参数变量b
NUM DW 20H
UFFER1 DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH,0EBH,0DBH,0BBH,07BH,0E7H,0D7H,0B7H,77H
SUB1 DB 0H
; 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:
;************** sub program for display ******************
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 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 TEMP
TLABAL1: JMP LABAL1
TEMIS: JMP IS41
_D: CALL CRTSET
LEA DX,MESS2
MOV AH,09H
INT 21H
RESET: CALL ADCDIS ;调用画点子程序
_C: CALL DELAY ;调用延时子程序,此处可以改变周期
CALL READ ;小键盘扫描
CMP SUB1,0EEH
JZ SHOWA ;为0键则参数a加一
CMP SUB1,0DEH
JZ SHOWA1 ;为0键则参数a减一
CMP SUB1,0BEH
JZ SHOWB ;为0键则参数b加一
CMP SUB1,7EH
JZ SHOWB1 ;为0键则参数b减一
MOV DL,0FFH
MOV AH,06H
INT 21H ;读键盘,
JZ _A ;a,d,w,s分别控制参数a,b的递增和递减
CMP AL,77H
JZ SHOWA
CMP AL,61H
JZ SHOWB
CMP AL,73H
JZ SHOWA1
CMP AL,64H
JZ SHOWB1 ;;
CMP AL,35H
JZ TLABAL1
_A: CMP SI,73H
JZ TEMIS ;画完一个周期si清零
INC SI
JMP DD1
TEMP: JMP QUIT
SHOWA: ;参数a加1
CMP NUMA,0FFH
JZ _A
ADD NUMA,1
CALL DIPA ;调用参数a显示处理子程序
MOV NUM ,20
JMP _D
SHOWA1: ;参数a减1
CMP NUMA,0
JZ _A
SUB NUMA,1
CALL DIPA
MOV NUM ,20
JMP _D
SHOWB: ;参数b加1
CMP NUMB,0FFH
JZ _A
ADD NUMB,1
CALL DIPB ;调用参数a显示处理子程序
MOV NUM ,20
JMP _D
SHOWB1: ;参数b减1
CMP NUMB,1H
JZ _A
SUB NUMB,1
CALL DIPB
MOV NUM ,20
JMP _D
QUIT: ;CALL CRTRST
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
INCB:
INC BX
LOOP INCB
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 AH,0
MOV CX,AX
NEXT: CALL DELAY1
LOOP NEXT
POP BX
POP AX
POP CX
RET
DELAY ENDP
DIPA PROC NEAR ;调用参数a显示处理子程序
PUSH AX ;将16进制a变为10进制
PUSH BX
MOV AL,NUMA
MOV AH,0
MOV BL,100 ;模100处理
DIV BL
MOV WA,AL
ADD WA,30H
MOV AL,AH
MOV AH,0
MOV BL,10 ;模10处理
DIV BL
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
READ PROC NEAR ;小键盘扫描子程序
PUSH AX
PUSH DX
PUSH CX
LO1:
MOV DX,283H
MOV AL,10010011B
OUT DX,AL
MOV DX,282H
MOV AL,0H
OUT DX,AL
MOV DX,282H
IN AL,DX
AND AL,0FH
CMP AL,0FH
JZ _Q
CALL DELAY1
IN AL,DX
AND AL,0FH
CMP AL,0FH
JZ _Q
MOV CL,AL
MOV DX,283H
MOV AL,10011010B
OUT DX,AL
MOV DX,282H
MOV AL,0H
OUT DX,AL
MOV DX,282H
IN AL,DX
AND AL,0F0H
ADD CL,AL
MOV SUB1,CL
JMP _Q1
_Q: MOV SUB1,0
_Q1: POP CX
POP DX
POP AX
RET
READ ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -