这里有没有听说过使用汇编语言控制系统扬声器发出简单的音乐声音?

tangmasi 2003-08-23 12:41:26
rt!
...全文
206 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangmasi 2003-08-29
  • 打赏
  • 举报
回复
我现在想要用51单片机汇编语言编的。谁知道??
xirenshen 2003-08-29
  • 打赏
  • 举报
回复
up
xirenshen 2003-08-29
  • 打赏
  • 举报
回复
^_^我关心的不是怎么发声,而是你们从哪里查到扬声器的端口地址和控制/状态寄存器的每一位是做什么的?
noahart 2003-08-28
  • 打赏
  • 举报
回复
难以理解!
lizhuohua 2003-08-27
  • 打赏
  • 举报
回复
data segment
freq dw 5421,4828,4552,4056,3614,3614,4056,4552,4828
dw 5421,4828,4828,4552,4828,5421,5421
dw 5421,4828,4552,4056,3614,3614,2710,3417,4056,4056
dw 3 dup(4552),4056,4552,3614,3614
dw 4 dup(2710),3614,4 dup(3042),3614,4056
dw 4056,4552,4552,3042,3614,3614
dw 4 dup(2710),2415,2710,4 dup(3042),3614,4056
dw 4552,4552,4828,5421,6085,5421
dw 3 dup(4056),3614,3042,3614,3042,5421
dw 4 dup(2280),2415,2710,3042,3042
dw 3 dup(4056),3614,3042,3614,4056,4056,3614,3042,3614
dw 3 dup(4056),3614,3042,2280,2415,2415,2710,0
;频率表
time dw 3 dup(25),12,12,4 dup(25),25,25,4 dup(12),100
dw 3 dup(25),3 dup(12),25,25,12,3 dup(25),4 dup(12)
dw 100,12,25,12,25,25,12,25,12,25,12,12,3 dup(25)
dw 12,12,100,2 dup(12,25,12,25,12,12),25,25,12
dw 12,25,100,2 dup(12,12,12,12,25,12,12,100)
dw 4 dup(12),25,25,12,25,12,25,25,4 dup(12)
dw 25,3 dup(12),88
;延时表
data ends
code segment
assume cs:code,ds:data
main proc far
start:
push ds
mov ax,0
push ax
mov ax,data
mov ds,ax ;初始化
mov si,offset freq ;DS:SI指向freq表
mov di,offset time ;DS:DI指向time表
mov al,0b6h
out 43h,al ;将0B6h送入端口43h
sound:
mov ax,[si] ;ax中是频率
cmp ax,0 ;ax中是0吗?
je done ;若是,则演奏完,跳转
out 42h,al ;因为端口只能传送8位
mov al,ah ;所以分两次传送
out 42h,al ;将频率送至端口42h
in al,61h ;从61h端口接收数据
mov ah,al ;保存数据到ah中
or al,3 ;低两位置1
out 61h,al ;再送出61h端口
mov bx,[di] ;将延时数送入bx
mov dl,23
waiting:
mov cx,65000
delay:
loop delay ;延时
dec dl
jnz waiting ;延时
mov dl,23
dec bx
jnz waiting ;延时
mov al,ah
out 61h,al ;送回原来的数据,停止发声
inc si
inc si ;将si指向下一个频率数
inc di
inc di ;将di指向下一个延时数
jmp sound ;跳回演奏下一个音符
done:
ret
main endp
code ends
end start
用户 昵称 2003-08-27
  • 打赏
  • 举报
回复
这是play.mac文件,那个sound.mac可以不用。

;BY JENNYVENUS HEBUST 1999

PLAY MACRO MUSIC
LOCAL MUSIC1,MUSIC2,DELAYTIME,DOPLAY,NEXT1,NEXT2
LOCAL NEXT3,NEXT4,NEXT5,NEXT6,NEXT7
LOCAL NEXT8,NEXT9,NEXT10,NEXT11,NEXT12,NEXT13,NEXT14,NEXT15
LOCAL PLAY1,PLAY2,PLAY3,PLAY4,PLAY5,PLAY6,PLAY7,PLAY8,PLAY9,PLAY10
LOCAL UPF,LOWF,LEN,TRUE
LOCAL C,D,E,F,G,A,B
LOCAL DELAY,WAITING,SOUND,DONE,HAI
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH DS
PUSH CS
POP DS
JMP DOPLAY
MUSIC1: DB MUSIC,255
C: DW 4552
D: DW 4056
E: DW 3614
F: DW 3417
G: DW 3042
A: DW 2710
B: DW 2415
MUSIC2: DW 256 DUP(0),65535
DELAYTIME:DB 256 DUP(0),255
DOPLAY:
LEA SI,MUSIC1 ;
NEXT1: MOV AL,[SI] ;
CMP AL,255 ;
JZ NEXT3 ;
CMP AL,'a' ;
JB NEXT2 ;UPGREAD
CMP AL,'g' ;
JA NEXT2 ;
SUB AL,20H ;
MOV [SI],AL ;
NEXT2: INC SI ;
JMP NEXT1 ;
NEXT3:
LEA SI,MUSIC1
LEA DI,MUSIC2
NEXT4: MOV AL,[SI]
CMP AL,255
JNZ PLAY1
LEA BX,NEXT7
JMP BX
PLAY1: CMP AL,'C'
JNZ PLAY2
PUSH SI
PUSH AX
LEA SI,C
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY2: CMP AL,'D'
JNZ PLAY3
PUSH SI
PUSH AX
LEA SI,D
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY3: CMP AL,'E'
JNZ PLAY4
PUSH SI
PUSH AX
LEA SI,E
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY4: CMP AL,'F'
JNZ PLAY5
PUSH SI
PUSH AX
LEA SI,F
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY5: CMP AL,'G'
JNZ PLAY6
PUSH SI
PUSH AX
LEA SI,G
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY6: CMP AL,'A'
JNZ PLAY7
PUSH SI
PUSH AX
LEA SI,A
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY7: CMP AL,'B'
JNZ PLAY8
PUSH SI
PUSH AX
LEA SI,B
MOV AX,[SI]
MOV [DI],AX
POP AX
POP SI
LEA BX,NEXT6
JMP BX
PLAY8: CMP AL,'>'
JNZ PLAY9
PUSH AX
PUSH SI
LEA SI,C
MOV CX,7
UPF: MOV AX,[SI]
SHR AX,1
MOV [SI],AX
INC SI
INC SI
LOOP UPF
POP SI
POP AX
LEA BX,NEXT6
JMP BX
PLAY9: CMP AL,'<'
JNZ NEXT6
PUSH AX
PUSH SI
LEA SI,C
MOV CX,7
LOWF: MOV AX,[SI]
SHL AX,1
MOV [SI],AX
INC SI
INC SI
LOOP LOWF
POP SI
POP AX
NEXT6: INC SI
INC DI
INC DI
LEA BX,NEXT4
JMP NEXT4
NEXT7:
LEA SI,MUSIC1
LEA DI,DELAYTIME
NEXT8: MOV AL,[SI]
CMP AL,255
JNZ NEXT9
JMP TRUE
NEXT9: CMP AL,'1'
JNZ NEXT10
PUSH AX
MOV AL,32
MOV [DI],AL
POP AX
NEXT10: CMP AL,'2'
JNZ NEXT11
PUSH AX
MOV AL,16
MOV [DI],AL
POP AX
NEXT11: CMP AL,'4'
JNZ NEXT12
PUSH AX
MOV AL,8
MOV [DI],AL
POP AX
NEXT12: CMP AL,'8'
JNZ NEXT13
PUSH AX
MOV AL,4
MOV [DI],AL
POP AX
NEXT13: CMP AL,'6'
JNZ NEXT14
PUSH AX
MOV AL,2
MOV [DI],AL
POP AX
NEXT14: CMP AL,'3'
JNZ NEXT15
PUSH AX
MOV AL,1
MOV [DI],AL
POP AX
NEXT15: INC SI
INC DI
JMP NEXT8
TRUE:
LEA SI,MUSIC2
LEA DI,DELAYTIME
MOV AL,0B6H
OUT 43H,AL
SOUND: MOV AX,[SI]
CMP AX,65535
JE DONE
CMP AX,0
JZ HAI
OUT 42H,AL
MOV AL,AH
OUT 42H,AL
IN AL,61H
MOV AH,AL
OR AL,3
OUT 61H,AL
MOV BX,[DI]
WAITING:MOV CX,06000H
DELAY:LOOP DELAY
DEC BX
JNZ WAITING
MOV AL,AH
OUT 61H,AL
HAI: INC SI
INC SI
INC DI
JMP SOUND
DONE:
POP DS
POP DX
POP CX
POP BX
POP AX
ENDM
用户 昵称 2003-08-27
  • 打赏
  • 举报
回复
那样我们写个music岂不是得计算半天?原来的dos下的basic有个play的函数,能够用
play "ABCDEFG"来发声。以前我就仿照这个做了,就是关于-廷时-不好作。

这是我的主程序。
用来播放<一剪梅>的

DOSSEG
.MODEL SMALL
.DATA
.STACK
.CODE
THIS_PROGRAM:
INCLUDE PLAY.MAC
INCLUDE SOUND.MAC
PLAY 'C6E6G6G6A8G6E6C6G6G6G6E8C8<G6G6G6G6G6G6>C8'
PLAY '<G8>C8C8<A8B8G8A8B8>C8C8E8C8D8E8G8G8E8E8C8E8G8E8D8D8'
PLAY 'A8G8D8E8G8E8G8E8D8E8C8E8'
PLAY '<G8A8>C8C8E8E8G8G8D6D6D6<A8>D8'
PLAY '<G8A8>C8D8E8G8A8 A8>C8<A8G8E8G8 A8>C8<A8G8E8G8 A8>C8<A8G8E8G8A8E8'
PLAY 'E8G8E8D8C8D8 E8G8E8D8C8D8 E8G8E8D8<B8G8A8>C8'
PLAY 'F8A8A8A8C8G8G8G8 C8D8E8A8G8E8 >C8<G8A8'
EXIT:
MOV AH,4CH
INT 21H
END THIS_PROGRAM
紫郢剑侠 2003-08-27
  • 打赏
  • 举报
回复
高手终于来了.哈哈...
用户 昵称 2003-08-26
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2121/2121485.xml?temp=.7881586
zzqzzq 2003-08-26
  • 打赏
  • 举报
回复
用高级语言编一个反汇编一下,多的是。
smzh8 2003-08-24
  • 打赏
  • 举报
回复
要使扬声器发声主要用到I/O端口,输入端口为60h,62h,输出为61h,要具体源程序请发给我e-mail:adminc@citiz.net
aabiao 2003-08-24
  • 打赏
  • 举报
回复
我还能播放WAV,有人相信不?
nomit 2003-08-24
  • 打赏
  • 举报
回复
9494
hswxf 2003-08-24
  • 打赏
  • 举报
回复
还能发出所谓的和弦
nicememory 2003-08-24
  • 打赏
  • 举报
回复
一点也不难,只不过输入比较郁闷而已
紫郢剑侠 2003-08-23
  • 打赏
  • 举报
回复
Areslee(易水) 说的是呀.书里有.

前段时间也曾讨论, 看看以前的贴子罢.可能精华区有.
bullet2003 2003-08-23
  • 打赏
  • 举报
回复
有啊,温冬蝉的就有啊
grail0922 2003-08-23
  • 打赏
  • 举报
回复


好像很多汇编书上都有这个例子
Areslee 2003-08-23
  • 打赏
  • 举报
回复
看清华那本汇编书

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧