汇编实验数字电子琴课程
A
选题:数字电子琴
院 系: 计算机科学与工程
专 业: 计算机科学与技术
班 级:
学 生:
学 号:
指导教师:
完成时间: 2015.06.29~2015.07.02
目 录
第1章 数字电子琴课程设计 ..............................................................3
1.1 数字电子琴课程设计的目的与意义............................................................ 3
1.1.1 数字电子琴课程设计的目的 ..................................................................... 3
1.1.1 数字电子琴课程设计的意义 ..................................................................... 3
1.2 数字电子琴课程设计的内容与要求............................................................ 3
1.2.1 数字电子琴课程设计的内容 ..................................................................... 3
1.2.2 数字电子琴课程设计的要求 ..................................................................... 3
1.3 数字电子琴应解决的主要问题.................................................................... 3 第2章 数字电子琴课程设计的原理、思路及电路图.........................4
2.1 数字电子琴课程设计的原理........................................................................ 4
数字电子琴课程设计的思路........................................................................ 4 2.2
2.3 数字电子琴课程设计的电路图.................................................................... 4 第3章 数字电子琴课程设计的源代码 ...............................................6 第4章 系统调试与运行 .....................................................................9
4.1 数字电子琴课程设计的运行结果................................................................ 9
4.2 数字电子琴课程设计的改进方向................................................................ 9 第5章 心得体会.................................................................................9
第1章 数字电子琴课程设计
1.1 数字电子琴课程设计的目的与意义
1.1.1 数字电子琴课程设计的目的
本课程设计通过在《微机原理与接口技术》课程上所学的汇编知识和相关芯片知识,利用汇编语言用软件编程的方法实现简单的PC仿真电子琴,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
1.1.2 数字电子琴课程设计的意义
主要是提高我们的动手能力以及自己通过查找资料解决问题的能力。
1.2 数字电子琴课程设计的内容与要求
1.2.1 数字电子琴课程设计的内容
通过汇编语言用软件编程的方法实现简单的PC仿真电子琴。
1.2.2 数字电子琴课程设计的要求
基本要求:
1) 用pc键盘模拟数字电子琴;
2) 利用试验仪扬声器与键盘1,2,3,4,5,6,7,8设计一个电子琴,通过数字按键响相应的
乐符1,2,3,4,5,6,7,i,使能演奏简单地乐曲;按1~8数字键能同时点亮相应的8个LED
灯,使具有声、光效果;
3) 利用实验DAC和喇叭,软件控制上述过程的实现;
1.3 数字电子琴应解决的主要问题
该课程设计应该解决的主要问题有:
1)查找出哆、唻、咪、发、嗦、啦、唏、唗八个音节所对应的频率值。
2)音乐的自动播放问题。
3)喇叭的开启与关闭。
第2章 数字电子琴课程设计的原理、思路及电路图
2.1 数字电子琴课程设计的原理
音节 哆 唻 咪 发 嗦 啦 唏 唗 频率262 294 330 347 392 440 494 523 (HZ)
8254和8255连接电路图:
PC0
、 喇叭 8255
GATE0 OUT0 PC1
8253 CS Y1 CS CLK0 Y0
1MHZ
2.2 数字电子琴课程设计的思路
在本次课程设计中,根据复杂程序设计思想—模块化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。 程序设计的思路按以下顺序进行:
1) 分析与确定程序总体设计目标
2) 将总体目标划分为若干模块
3)定义每个模块的具体任务,明确它与其他模块间的通信方式
4) 编写源程序,进行调试,包括:
(1)音乐弹奏
用户可以根据爱好弹奏音乐
(2)音乐播放
用户可以选择播放歌曲“欢乐颂”
5) 模块连接,形成完整的程序
6) 编写程序文档
2.3 数字电子琴课程设计的电路图
流程图大体设计:
开始
8254初始化
N N
是否是接收输入字是否是’a’键?
符 ‘1~8’键
Y Y
演奏歌曲 演奏声音
N 是否是
‘Esc’键
Y
程序结束
第3章 数字电子琴课程设计的源代码
源代码:
.model small
.586
.stack
.data
msg db 'you can press keyboard 1~8 ! And you also can press ‘a’to play music~ you also can
press ‘a’to quit!',0dh,0ah,'$',0
initvala word 4554,4058,3616,3439,3044,2712,2415,2281
initval word
330,330,347,392,392,347,330,294,262,262,294,330,330,294,294,330,330,347,392,392,347,330,29
4,262,262,294,330,294,262,262
.code
main proc
mov ax,@data
mov ds,ax ;建立数据段
;写8255 的控制字,控制端口28BH C通道的下半部做为输出,以此来通过PC0
控制扬声器的开关状态
mov dx,28BH
mov al,80H
out dx,al
;设定PC0 0初始情况默认扬声器是关闭着的
mov al ,00000000b
out dx,al
;设定PC1为 1,连接到8253的门控信号
mov al, 00000011b
out dx,al
;写8253的控制字 计数器0 方式为0 (计数结束产生中断方式地址在283H
mov dx,283H
mov al,00110110b
out dx,al
;对于8253初值的设定要根据所输入的字符
;向屏幕输出提示信息:
mov dx,offset msg
mov ah,09h ;显示字符串
int 21h
inputa: mov dl,0ffh ;直接控制台IO,相当于C中while(!kbhit())
mov ah,06h ;等待按键
int 21h ;al=输入字符
jz inputa ;若无按键返回到inputa继续输入
cmp al,1bH
jz final ;判断输入字符与Esc键。若相等,则结束
cmp al,61h
jz inputb ;判断输入字符与a键。若相等,则进入音乐播放
cmp al,31h ;否则进入音乐弹奏
jb inputa
cmp al,38h
ja inputa
mov bl,31h ; 取得数字值从0开始记
sub al,bl
add al,al ;找到数字对应的频率,存放在di中
mov ah,00h
mov si ,ax
xor di,di
mov di, initvala[si] ;
xor edx,edx ;写8253的计数器的初值,先进行计算
mov dx,0FH
mov ax,16960
;DX ,AX = 15*65526 + 16960 = 1M Hz
div di
mov dx,280H
out dx,al
mov al,ah
out dx,al
;将PC0为置为1,
示打开扬声,控制端口的地址28BH
mov dx,28BH
mov al,00000001b
out dx,al
;控制延时
mov cx,0ffffh
lo11: mov dx,23H
lo12: dec dx
jnz lo12
loop lo11 ;cx自动-1
;将PC0位置为,,表示扬声器关闭,
mov dx,28BH
mov al,00000000b
out dx,al
jmp inputa
inputb: mov ecx,29 ;音乐播放
mov si ,0
again: xor di,di
mov di, initval[si] ;
xor edx,edx ;写8253的计数器的初值,先进行计算
mov dx,0FH
mov ax,16960 ;DX ,AX = 15*65526 + 16960 = 1M Hz
div di
mov dx,280H
out dx,al
mov al,ah
out dx,al
;将PC0为置为1,表示打开扬声,控制端口的地址28BH
mov dx,28BH
mov al,00000001b
out dx,al
;控制延时
mov cx,0ffffh
lo11a: mov dx,45H
lo12b: dec dx
jnz lo12b
loop lo11a;cx自动-1
;将PC0位置为,,表示扬声器关闭,
mov dx,28BH
mov al,00000000b
out dx,al
inc si
loop again
final: mov ah,4ch ;返回DOS
int 21h
ret
main endp
end main
第4章 系统调试与运行
4.1 数字电子琴课程设计的运行结果
本次试验,当用户从键盘上敲击1~7时,音响发出哆、唻、咪、发、嗦、啦、唏、唗的音节。如果选择收听音乐,只需点击“a”,然后就会播放音乐。
4.2 数字电子琴课程设计的改进方向
此课程设计用户可以选择自己弹奏乐曲也可以选择收听音乐,提示信息清楚明了,操作简单。 但是也存在一定的问题,比如说,用户不能循环收听,没有录音功能,而且如果已经选择了一首乐曲只能一直收听完才可以终止,并且只有音调,不能放出歌词。今后应往更高要求改进此程序,实现更多功能,争取克服以上所列出的缺点,让程序更加完善~
第5章 心得体会
通过这一周的编程和查资料,我完成了微机原理和接口技术的课程设计---数字电子琴。一开始我觉得老师在课上讲的东西我都会,课程设计会很快完成。但是真正开始做的时候我碰到了很多的难题和障碍,我认识到只有能够熟练的掌握平时所学的基础知识才能在实验过程中得心应手,否则一步错则整个试验都会陷入困境。有时候就是一些小问题让实验停滞不前。因而,熟练掌握内容和严谨的态度是实验成功的重要保障~
通过这次课程设计,我对各个芯片的功能有了更深刻的认识和体会,平时上课的理论知识只是停留在理论的层面,只有通过了这样的实验才能更好的体会到,做到了理论和实际的相结合,使理论知识真正运用到了实践中去。 这次实验使我熟悉并掌握了汇编如何实现一些功能,一些中断的调用。在以后的学习中我会从多方面继续结合硬件学习汇编语言。
同时感谢老师的指导~