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

📄 music.asm

📁 利用电脑主板上的8253定时器
💻 ASM
字号:
data segment				; 数据段
	table dw 2277, 1993, 1808, 1709, 1522, 1356, 1208, 1139
data ends  				; 对应中音1~7和高音i的定时器计数值
code segment				; 代码段
	assume cs:code,ds:data
start:mov ax,data
	mov ds,ax		
	mov al, 0b6h		; 设置定时器2工作方式
	out 43h, al
again:	mov ah, 1		; 等待按键
	int 21h
	cmp al, '1'		; 判断是否为数字1~8
	jb next
	cmp al, '8'
	ja next
	sub al, 30h      	; 1~8的ASCII码转换为二进制数
	sub al, 1       	; 再减1,将按键数字1~8变为0~7,以便查表
	xor ah, ah
	shl ax, 1		; 乘以2
	mov bx, ax
	mov ax, table[bx]	; 在表中取出对应的计数值
	out 42h, al		; 设置定时器2的计数值
	mov al, ah
	out 42h, al
	in al, 61h		; 打开扬声器声音
	or al, 03h		; 使D1D0=PB1PB0=11b,其他位不变
	out 61h, al
	jmp again		; 连续发声,直到按下另一个键
next:	push ax
	in al, 61h		; 不是数字1~8,则关闭扬声器声音
	and al, 0fch		; 使D1D0=PB1PB0=00b,其他位不变
	out 61h, al
	pop ax
	cmp al, 1bh		; 判断是否为Esc键 (对应ASCII码1bh)
	jne again		; 不是Esc,继续;否则程序执行结束
code ends
	end start

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -