⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 电子琴+电子钟.asm

📁 在PC机上 利用dos 环境 开发一个电子琴和电子钟的界面
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	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 + -