📄 电子琴+电子钟.asm
字号:
INC BP
CMP AL,[SI]
JZ O_KEY
INC SI
INC BP
CMP AL,[SI]
JZ A_KEY
INC SI
INC BP
CMP AL,[SI]
JZ S_KEY
INC SI
INC BP
CMP AL,[SI]
JZ D_KEY
INC SI
INC BP
CMP AL,[SI]
JZ F_KEY
INC SI
INC BP
CMP AL,[SI]
JZ J_KEY
INC SI
INC BP
CMP AL,[SI]
JZ K_KEY
INC SI
INC BP
CMP AL,[SI]
JZ L_KEY
INC SI
INC BP
CMP AL,[SI]
JZ Z_KEY
INC SI
INC BP
CMP AL,[SI]
JZ X_KEY
INC SI
INC BP
CMP AL,[SI]
JZ C_KEY
INC SI
INC BP
CMP AL,[SI]
JZ V_KEY
INC SI
INC BP
CMP AL,[SI]
JZ M_KEY
INC SI
INC BP
CMP AL,[SI]
JZ K1_KEY
INC SI
INC BP
CMP AL,[SI]
JZ K2_KEY
INC SI
INC BP
JMP RETURN_ORGATRON
Q_KEY: MOV DI,523
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
W_KEY: MOV DI,587
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
E_KEY: MOV DI,659
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
R_KEY: MOV DI,697
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
U_KEY: MOV DI,783
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
I_KEY: MOV DI,879
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
O_KEY: MOV DI,987
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
A_KEY: MOV DI,262
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
S_KEY: MOV DI,294
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
D_KEY: MOV DI,330
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
F_KEY: MOV DI,349
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
J_KEY: MOV DI,392
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
K_KEY: MOV DI,440
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
L_KEY: MOV DI,494
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
Z_KEY: MOV DI,131
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
X_KEY: MOV DI,147
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
C_KEY: MOV DI,165
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
V_KEY: MOV DI,175
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
M_KEY: MOV DI,196
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
K1_KEY: MOV DI,220
CALL FAR PTR GEN_ORGATRON
JMP RETURN_ORGATRON
K2_KEY: MOV DI,247
CALL FAR PTR GEN_ORGATRON
;JMP RETURN_ORGATRON
RETURN_ORGATRON:
MOV BL,[BP]
MOV KEY_PICTURE,BL ;返回图形输入参数代码
;RETURN_3:
POP SI
POP BP
POP DI
POP DX
POP CX
POP BX
RET
KEY_ORGATRON ENDP
;-----------------------------------------------------------------
;-----------------------------------------------------------------
;通用发声子程序
soundf proc far
push ax
push bx
push cx
push dx
push di
mov al,0B6h
out 43h,al
mov dx,12h
mov ax,348Ch
div di
out 42h,al
mov al,ah
out 42h,al
in al,61h
mov ah,al
or al,3
out 61h,al
wait1: mov cx,663
call far ptr waitf
dec bx
jnz wait1
mov al,ah
out 61h,al
pop di
pop dx
pop cx
pop bx
pop ax
ret
soundf endp
;-----------------------------------------------------------------
;(CX)=count of 15.08us 利用硬件产生精确延时
waitf proc far
push ax
waitf1:
in al,61h
and al,10h
cmp al,ah
je waitf1
mov ah,al
loop waitf1
pop ax
ret
waitf endp
;----------------------------------------------------------------
;去抖动延时程序
delay proc far
PUSH ECX
mov ecx,07000000h
delay1: loopd delay1
POP ECX
ret
delay endp
;----------------------------------------------------------------
;-----------------------------------------------------------------
MAIN PROC FAR
ASSUME CS:CODE_ORGATRON,DS:DATA_ORGATRON
ASSUME SS:STACK_ORGATRON
START:
MOV AX,STACK_ORGATRON
MOV SS,AX
MOV SP,TOP
MOV AX,DATA_ORGATRON
MOV DS,AX
;------------------------------------------------------
; TODO: 从这里开始您的代码
;------------------------------------------------------
beg: MOV AX,0012h
INT 10h
MOV DX,0010h
CALL b1002
LEA BP,quitbuf
CALL msg
MOV DX,010ah
LEA BP,quitbuf2
CALL msg
MOV DX,020ah
LEA BP,quitbuf3
CALL msg
beg2: CALL skin
CALL skin2
CALL skin3
CALL CLk
MOV second,DH
MOV second2,DH
MOV count_minute,11
CALL minute_lin
XOR DX,DX
MOV AX,minute2
MOV CX,12
DIV CX
MOV CX,AX ;minurte2/12
POP AX
ADD AX,CX
MOV hour2,AX
MOV count_hour,11
CALL hour_lin
CALL CLk
MOV DL,DH
CALL bcd2
XOR AH,AH
MOV CL,12
DIV CL
MOV count_minute,AH ;second%12初始值
DEC count_minute
XOR DX,DX
MOV AX,minute2
MOV CX,12
DIV CX ;minurte2%12
MOV count_hour,DL
DEC count_hour
INC second2
kk3: CLI
CALL second_lin
STI
JMP ks
ks: MOV AH,1
INT 16h
JZ kk3
MOV AH,8
INT 21h
CMP AL,'q'
JE quit
CMP AL,'b'
JE CHange_rb
CMP AL,'s'
JE CHange_rs
CMP AL,'c'
JE CHange_color
cmp al,'e'
je a0
JMP kk3
CHange_rs: CMP r0,190
JA ks
ADD r0,5
JMP tobeg2
CHange_rb: CMP r0,60
JB ks
SUB r0,5
JMP tobeg2
CHange_color: LEA SI,color_hour
MOV CX,6
CHange_kk1: MOV AL, [SI]
INC AL
CMP AL,15
JC CHange_color_kk2
MOV AL,1
CHange_color_kk2:
MOV [SI],AL
INC SI
LOOP CHange_kk1
JMP tobeg2
a0: call FAR PTR music
call FAR PTR music
call FAR PTR music
tobeg2: CALL CLear
JMP beg2
quit: MOV AX,4C00H
INT 21H
;*************************************
hour_lin PROC NEAR
PUSHa
CMP count_hour,11
JB tohour_yl
JMP hour_lin_next
tohour_yl: MOV SIgle,3
JMP hour_yl
hour_lin_next:
MOV count_hour,0
MOV SIgle,5
CALL CLk
MOV DL,CH
CALL bcd2
CMP AL,12
JB hour_kk1
SUB AL,12
hour_kk1: MOV CL,30
MUL CL
PUSH AX
XOR DX,DX
MOV AX,minute2
MOV CX,12
DIV CX
MOV CX,AX ;minurte2/12
POP AX
ADD AX,CX
MOV hour2,AX
;擦掉
MOV Color,0
MOV AX,hour
MOV BX,r0
ADD BX,20
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
ADD AX,270
ADD BX,400 ;90
CALL renovate
MOV DX,yuanx ;擦掉
MOV x2,DX
MOV DX,yuany
MOV y2,DX
MOV DX,x0
MOV x1,DX
MOV DX,y0 ;擦掉
MOV y1,DX
CALL sjx
ADD AX,180
CALL renovate
MOV DX,yuanx ;擦掉
MOV x2,DX
MOV DX,yuany
MOV y2,DX
SUB BX,100
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX ;擦掉
CALL sjx
MOV SIgle,4
;***************************;; ;重写
hour_yl: MOV AL,color_hour
MOV color,AL
MOV AX,hour2
MOV BX,r0
ADD BX,70
CALL renovate
MOV DX,yuanx
MOV x3,DX
MOV DX,yuany
MOV y3,DX
ADD AX,90
ADD BX,600 ;90
CALL renovate
MOV DX,yuanx
MOV x2,DX
MOV DX,yuany
MOV y2,DX ;重写
ADD AX,180
CALL renovate
MOV DX,yuanx
MOV x1,DX
MOV DX,yuany
MOV y1,DX
CALL sjxx
CALL sjxy
ADD AX,270
SUB BX,100
CALL renovate
MOV DX,yuanx
MOV x3,DX ;重写
MOV DX,yuany
MOV y3,DX
CALL sjx
CALL sjxx
CALL sjxy
MOV CX,hour2
MOV hour,CX
hour_quit: POPa
RET
hour_lin ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -