音谱演奏显示器的设计与实现

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算机硬件技术实验课程设计
课题名称音谱演奏显示器的设计与实现
姓名
学号
班级
专业计算机科学与技术
指导教师范波
计算机学院
2010年 6 月
音谱演奏显示器的设计与实现
一、设计目的
通过音乐发生器实验,学习如何利用8253定时/计数器进行声音控制电路的设计原理与方法。

二、设计内容
1.如图-1所示,端口输出的方波经放大滤波后,驱动蜂鸣器发声。

音谱的频率由端口输出时延控制,音谱与频率的对应关系见表-1。

设置1个启动按键“S”,当按下该键时,蜂鸣器从低音到高音循环演奏音谱,各音谱的延时为2秒左右;同时MFID实验平台,8个发光管也循环显示相对应的音谱,如当演奏“Fa”(音谱号为“4”)则,第四个发光管点亮,其他熄灭。

图-1
三、电路及连线设计
1.音乐发生器驱动模块电路原理如图1.1所示。

模块包含喇叭SPK,LM386A,74LS08,以及74LS245和LED等。

其中LED是配合演奏音乐时产生发光效果而设置的。

2.单线连接如图1.2所示:
四、分析与说明
1.利用8253控制发声原理与方法的详细阐述,参考计算机接口技术课本相关章节。

2.8253输入时钟CLK的频率为1.19318MHZ。

3.准备工作:将实验平台的电源开关拔到“内”的位置。

启动“MFIK”集成环境,对 8253、8255芯片进行测试,确保工作正常。

4.硬件连线
(1)跳线设置:将电源模块的JP7跳接,以给音乐发生器模块供电。

(2)单线连接如图1.2所示。

5. 程序设计、编译、连接、运行。

五、流程图设计
主程序流程图
六、程序设计:
;*------------------------------------------------------*/
;* 8253定时计数实验—Music.asm(音乐发生器接口实验) */
;*------------------------------------------------------*/
sstack segment stack
dw 200 dup(?)
sstack ends
data segment
message1 db 'Music And LED',0ah,0dh
db 'press S to start!',0ah,0dh,'$'
message2 db 'press Q to stop! ',0ah,0dh,'$'
freq dw 523,587,659,698,784,880,988,0 ;音符的频率(音阶)
;其中,0频率表示结尾
time dw 300,300,300,300,300,300,300,0
l1 db 0feh,0fdh,0fbh,0f7h,0efh,0dfh,0bfh
old_seg dw ?
old_off dw ?
data ends
code segment
assume cs:code, ds:data, ss:sstack
star proc far ;程序开始
mov ax,data
mov ds,ax
mov ax,sstack
mov ss,ax
push di ;寄存器压栈
push si
push bp
push bx
mov al,80h ;8255初始化,10000000B 方式00,ABC端口都为输出
mov dx,303h
out dx,al
mov al,0ch ;关闭8253的T2计数器(8255的PC6=0)
mov dx,303h
out dx,al
;关闭74LS245(8255的pc4=1),00001001h
mov al,0ffh
mov dx,300h ;; ;mov dx,300h
out dx,al
mov al,00h ;关闭喇叭(8255的PC0=0),00000000b
mov dx,303h
out dx,al
mov al,10110110b ;8253初始化,10110110b
mov dx,307h
out dx,al
mov dx,offset message1 ;显示提示信息
mov ah,9
int 21h
startTo: mov ah, 08h ;检测S键是否按下?
int 21h
cmp al,'s'
jne startTo ;若有,则开始演凑
mov ah,9h
mov dx,offset message2 ;显示提示退出信息
int 21h
s: mov si,offset freq ;设置频率指针→si
mov bp,offset time ;设置延时指针→bp
mov bx,offset l1 ;设置相关二极管亮
s1: mov di,[si] ;取1个音符的频率→di
cmp di,0 ;检测是否是乐曲结尾
je s ;若是,则结束演凑
mov dx,12h ;计算音符的频率所对应的8253计数初值
mov ax,34dch ;1.19318MHz
div di ;fclk/fout
mov dx,306h ;向8253装入计数初值
out dx,al ;先装低字节
mov al,ah
out dx,al ;再装高字节
mov dx,303h ;打开喇叭(8255的PC0=1)
mov al,00000001b
out dx,al
mov al,00001101b ;打开8253的T2(PC6=1),开始发声out dx,al
mov al,ds:[bx]
mov dx,300h
out dx,al
inc bx
push bx
mov bx,30 ;取1个音符的延时次数为30
call time_delay ;调用延时子程
pop bx
mov dx,303h ;关闭8253的T2(PC6=0)
mov al,0ch
out dx,al
mov al,00h ;关闭喇叭(PC0=0)
out dx,al
mov dx,300h
mov al,0ffh ;关闭74LS245(pc4=0)
out dx,al
add si,2 ;取下1 个音符的频率
add bp,2 ;取下1 个音符的延时次数
mov ah, 0bh ;检测是否有任意键按下?
int 21h
cmp al,00
je s1
mov ah, 08h ;检测Q键是否按下?
int 21h
cmp al,'q'
je end_sing ;若有,则结束演凑
jmp s1 ;否则继续
end_sing:
mov dx, 303h ;关闭8253的T2
mov al, 0ch
out dx, al
mov al, 00h ;关闭喇叭
out dx, al
mov al,0ffh ;关闭发光二极管
mov dx,301h
out dx,al
pop bx ;寄存器出栈
pop bp
pop si
pop di
mov ax,4c00h ;返回DOS
int 21h
star endp
new_intr proc ;新中断服务程序
dec bx ;该服务程序只将延时次数-1
iret
new_intr endp
time_delay proc near ;延时子程序
pushf ;压栈
push ds
push es
push bx
mov ah,35h ;取原中断(INT1CH)的向量,并保存
mov al,1ch
int 21h
mov old_off, bx
mov bx, es
mov old_seg, bx
pop bx
pop es
push ds
mov ah, 25h ;设置新中断服务程序的向量
mov al, 1ch
mov dx, seg new_intr
mov ds,dx
lea dx, new_intr
int 21h
pop ds
TD: cmp bx,0h ;延时次数已到?
jnz TD ;未到,则继续
mov ah,25h ;已到,则恢复原中断向量
mov al,1ch
mov dx,old_seg
push dx
mov dx,old_off
pop ds
int 21h
pop ds
popf
ret
time_delay endp
code ends
end star ;程序结束
七、设计总结:
通过音乐发生器实验,学会了如何利用8253定时/计数器进行声音控制电路的设计原理与方法。

八、参考文献:
[1] 潘松,潘明·现代计算机组成原理·北京:科学出版社,2007。

相关文档
最新文档