ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:136.98KB ,
资源ID:9790746      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9790746.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机课程设计电子琴.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机课程设计电子琴.docx

1、微机课程设计电子琴微机实验及课程设计课程设计报告电子琴姓 名:*学 号:*专 业:*实 验 室: 电工电子实验中心103设计时间: 2009年5月 30日 2009年 6 月 4日评定成绩: 审阅教师:一实验简介3二基本设计思想3三程序流程和程序实现3四测试方案和测试结果10五分析与总结10一实验简介 目的:检验和提高我在原理与接口综合应用方面分析问题与解决问题的能力,同时也给我提供更多、更好的训练机会。根据设计要求,尽可能完成设计要求的功能,选择最合适的器件,构成最有效的硬件电路来完成。基本实验要求:构造一模拟/数字电子琴、选择利用实验仪扬声器/PC机内8253驱动内扬声器与键盘1、2、3、

2、4、5、6、7、8设计一个电子琴,通过按数字键响相应的乐符1、2、3、4、5、6、7、i,使能演奏简单的乐曲。按18数字键同时点亮相应的8个LED灯,使具有声、光效果;2、利用实验仪DAC和喇叭,软件控制上述功能。选择机内还是实验仪由开关设置,课随时切换;3、在8*8点阵上表示音节高低;4、精确显示从第一个键按下后的时间(单位秒,要求精确到0.1秒,显示到秒)。 进一步设计要求:1.、能准确记录开始演奏到结束演奏的时间,在八段码上显示;2、数字、模拟合奏,能同时指示音阶;3、自动录音,并具有回放功能(分两种水平、难易不等、即记录按键,同时记录按键和时间。 实现情况:实现基本实验要求的13。二基

3、本设计思想1、先分别设计机内电子琴和实验仪电子琴。机内电子琴参照实验五8253计数器/定时器的选做与探索中使用PC机内8253驱动声音接口;实验仪电子琴参照实验中演示实验的电子琴流程图;2、再把两者结合起来,用一个高低电平作开关控制是机内还是实验仪,可通过8255A口输入,判断10(二进制)则实验仪DAC,00则机内喇叭;3、点阵显示。根据输入的数字判断应显示点阵的哪一行。具体可先把点阵的8列全选通,输入为1某个数字时,判断显示相应的行;、LED灯显示。同样,根据输入的数字判断应显示哪一个LED灯。具体可设置8255B口为输出,根据输入的数字,输出控制LED灯相应灯亮。三程序流程和程序实现1、

4、机内电子琴流程图:程序:dseg segment freq dw 262,294,330,349,392,440,494,523 ;扬声器发声各频率值msg db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$tim dw 400num db ?dseg endssseg segment stack dw 256 dup(?)sseg endscseg segment assume cs:cseg,ds:dsegstart: mov ax,dseg mov ds,ax mov dx,offset msg mov ah,9 int 21h ;显示提示信息sss: mov

5、 ah,7int 21h ;等待从键盘接收字符,不回显al=asc码 cmp al,1bh je exit;若为ESC键,则转EXIT退出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在1-8之间转sss sub al,31h mov num,al ;num求出相应的时间常数的序号jinei: mov al,num add al,al mov ah,00h mov si,axagain: mov di,freqsi mov bx,tim call gen jmp sssexit: mov ah,4chint 21hgen proc n

6、earmov al,0b6h ;设置8253通道2方式3二进制计数out 43h,al mov dx,12h mov ax,12928;DXAX=896*533h=18*65536+12928=1.19Mdiv di out 42h,al ;8253通道2口设置初值 mov al,ahout 42h,al in al,61h ;读8255PB口 mov ah,al or al,3out 61h,alwait1: mov cx,0hdelay3: mov ax,10 ;延时子程序delay2: nop dec ax jnz delay2 loop delay3 dec bx jnz wait1

7、mov al,ah out 61h,al retgen endp cseg endsend start2、实验仪电子琴流程图:实验电路:程序:data segmentioport equ 0d400h-0280hio8253a equ ioport+280hio8253b equ ioport+283hio8255a equ ioport+288hio8255b equ ioport+28bhio0832a equ ioport+290hdata1 db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h

8、,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据time db 120,106,94,89,79,70,63,59 ;发不同音时8253的计数器初值msg db Press 1,2,3,4,5,6,7,8,ESC:,0dh,0ah,$num db ? ;num为8253计数器初值的序号data endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset msg mov

9、ah,9 int 21h ;显示提示信息sss: mov ah,7 int 21h ;从键盘接收字符,不回显 cmp al,1bh je exit ;若为ESC键,则转EXIT cmp al,31h jl sss cmp al,38h jg sss ;若不在1-8之间转sss sub al,31h mov num,al ;求出相应的时间常数的序号 mov cx,60 ;取60次32个正弦波数据ddd: mov si,0lll: mov al,data1si ;取正弦波数据mov dx,io0832a out dx,al ;放音 call delay ;调延时子程序 inc si cmp si,

10、32 ;是否取完32个数据 jl lll ;若没有,则继续 loop ddd ;总循环次数60是否完,没有,则继续 jmp sssexit: mov ah,4ch int 21hdelay proc near ;延时子程序ccc: mov bx,offset time mov dx,io8253b ;置8253通道0为方式0工作 mov al,10h out dx,al mov dx,io8255b ;设8255A口输入 mov al,9bh out dx,al mov al,num ;取相应的时间常数 xlat mov dx,io8253a out dx,al ;向8253通道0输出kkk:

11、 mov dx,io8255a in al,dx ;从8255A口读一字节 test al,01 ;判PA0口是否为1 jz kkk ;若不为1,则转KKKret ;子程序返回delay endpcode endsend start3.电子琴总设计流程图:电路图: 8个LED灯 8253 82551MHZ+5V DAC0832280H K0开关 288H 290H程序:data segmentioport equ 0c800h-0280hio8253a equ ioport+280h;8253通道0地址io8253b equ ioport+283h;8253控制字寄存器地址io8255a eq

12、u ioport+288h ;8255A口地址io8255b equ ioport+289h ;8255B口地址io8255d equ ioport+28bh;8255控制字寄存器地址io0832a equ ioport+290hproth equ ioport+2a8h ;点阵行选的地址protlr equ ioport+2b0h ;点阵列选的地址data1 db 80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h

13、db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据time db 120,106,94,89,79,70,63,59;发不同音时8253的计数器初值banquan db 0dh,0ah db *,0dh,0ah db * *,0dh,0ah db * WELE TO USE dianziqin *,0dh,0ah db * THIS PROGRAMME IS DESIGHED BY *,0DH,0AH db * zhouqiuping 61007204 *,0DH,0AH db * *,0dh,0ah db *,0dh,0ah db Press 1,2,3,4,5

14、,6,7,8,ESC:,0dh,0ah,$num db ? ;num为8253计数器初值的序号freq dw 262,294,330,349,392,440,494,523;扬声器发声各频率值tim dw 400data endsstack segment stack dw 256 dup(?)stack endscode segment assume cs:code,ds:datastart: mov ax,data mov ds,ax mov dx,offset banquan; 显示 mov ah,9 int 21h ;显示提示信息sss: mov ah,7 int 21h ;等待从键盘

15、接收字符,不回显al=asc码 cmp al,1bh je exit ;若为ESC键,则转EXIT推出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在1-8之间转sss sub al,31h mov num,al ;num求出相应的时间常数的序号dianzhen: mov al,0ffh ;点阵板的列全部选通 mov dx,proth out dx,al mov al,00000001 :点阵的行赋初值 shl al,num;根据输入的数字,左移相应位数,即点阵亮相应行 mov num,al;如输入3,则num为2,左移两位,第三行亮

16、 mov dx,prothl out dx,alled: mov dx,io8255d mov al,99h ;设置8255A口入B口出 mov dx,io8255b out dx,num;根据移位后的num点亮相应led灯kaiguan: mov dx,io8255a ;判断机内机外 in al,dx ;从8255B口读一字节 test al,10b ;判断PA0口是否为10(二进制) jz jiwai ;是的话转实验仪 jmp nei ;否则转机内;-jiwaijiwai: mov cx,60 ;取60次32个正弦波数据ddd: mov si,0lll: mov al,data1si ;取

17、正弦波数据 mov dx,io0832a out dx,al ;放音 call delay ;调延时子程序 inc si cmp si,32 ;是否取完32个数据 jl lll ;若没有,则继续 loop ddd ;总循环次数60是否完,没有,则继续 jmp sssexit: mov ah,4ch int 21hdelay proc near ;延时子程序ccc: mov bx,offset time mov dx,io8253b;置8253通道0为方式0工作 mov al,10h out dx,al mov al,num ;取相应的时间常数 xlat mov dx,io8253a out d

18、x,al ;向8253通道0输出kkk: mov dx,io8255a in al,dx ;从8255A口读一字节 test al,01 ;判PA0口是否为1 jz kkk ;若不为1,则转KKK ret ;子程序返回delay endp;-机内部分jinei: mov al,num add al,al mov ah,00h mov si,axagain: mov di,freqsi mov bx,tim call gen jmp sss gen proc near mov al,0b6h ;设置8253通道2方式3二进制计数 out 43h,al mov dx,12h mov ax,1292

19、8 ; DX AX=896*533h=18*65536+12928=1.19M div di out 42h,al ;8253通道2口设置初值 mov al,ah out 42h,al in al,61h ;读8255PB口 mov ah,al or al,3 out 61h,alwait1: mov cx,0hdelay3: mov ax,10 ;延时子程序delay2: nop nop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al retgen endp code endsend start四测试方案

20、和测试结果 测试方案 测试结果启动程序,出现按键提示,按下18键机内/实验仪发出相应的音阶同时led和点阵板亮相应的灯和行改变开关状态(可随时任意改变),按18键对应发出相应的音阶“弹琴”发出优美旋律按下ESC键退出程序五分析与总结问题分析:关于开关改变发声源为机内或机外和led灯的点亮,原来想用前面学过的简单输入输出实验,用74LS273做输出,到led上驱动led灯亮;用74LS244做输入,把开关值输入控制发声源。后来发现这样很麻烦,虽然在程序上没有太繁杂,但是这样就加了两个地址,而且对于电路来说,就很复杂。因此,后来想到直接用8255做输入输出,设A口为输入,B口输出,这样用一个片子即

21、可完成几个功能。 关于点亮点阵板,原来想将num逐个与07比较,来判断亮哪一行,后来这样写代码时比较繁杂,就改成移位来实现,给点阵的行赋初值00000001,然后再左移num位,即可亮相应的行。实验总结: 这次微机实验课程设计,使我对微机软硬件结合有了进一步的了解。原来并不太清楚是什么意思,一直都很模糊,听课本也是很迷茫;而之前的那些单元实验,也没有都做好。之前做的实验,由于大部分是验证性的,所以就很被动地去做,甚至并没有想为什么要那样连电路,内部的代码更没有认真看。这次课程设计,因为要自己去设计整个过程,所以就不得不去了解学习自己原来并没有真正弄懂的东西。比如一些程序的代码的意思,汇编语言的

22、逻辑,比如一些芯片的用途。使我对前面所做的实验有了原理性的了解,回头看一些实验,也知其然其所以然了。同时对课本上讲的一些内容,不再像以前那样觉得抽象,通过这次设计,有了具体的理解。 同时,我也知道了设计一个项目,应该如何下手。应该先对项目要求有个全面的了解,知道要做什么,然后根据要求所要涉及到的知识我们要主动去摄取,结合自己已学过的,再对整体框架有个感知,心里有数后,进行设计。设计时用流程图,这很重要,这样整个思路就很清晰,而且是按照软硬件语言的逻辑顺序进行,就很方便。设计过程可以分模块,不要一开始就想把所有的功能都实现了,应该一个模块一个模块地实现,再总的连起来,实现最后的总模块。在每个模块设计时,尽量想到比较简单的设计,简化编程和电路,也可少出错。对微机是这样,对其他的像数字系统设计,也是一样的。 因此,我也觉得微机实验的这种形式的课程设计是很好也很有必要的。对我们对微机实验的理解有很大帮助。参考书目:【1】 杨素行微型计算机系统原理及应用,清华大学,2004年【2】 微机实验及课程设计教程(试用版2.0),东南大学微机系统与接口课程组,2009年2月

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1