微机课程设计电子琴_第1页
微机课程设计电子琴_第2页
微机课程设计电子琴_第3页
微机课程设计电子琴_第4页
微机课程设计电子琴_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

2、8253驱动内扬声器与键盘1、2、3、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、自动录音,并具有回放功能(分两种水平、难易不等、即记录按键,同时记录按键和时间

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

4、led灯相应灯亮。三程序流程和程序实现1、机内电子琴开始流程图:键盘读入一个字符是esc键吗?ynn返回dos是数字18键吗?y求出音阶值保存赋相应频率值延时程序: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: mo

5、v ax,dseg mov ds,ax mov dx,offset msg mov ah,9 int 21h ;显示提示信息sss: mov ah,7 int 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

6、 di,freqsi mov bx,tim call gen jmp sssexit: mov ah,4ch int 21hgen proc near mov al,0b6h ;设置8253通道2方式3二进制计数 out 43h,al mov dx,12h mov ax,12928; 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,0hdela

7、y3: mov ax,10 ;延时子程序delay2: nop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al retgen endp cseg endsend start2、实验仪电子琴流程图:实验电路:程序:data segmentioportequ 0d400h-0280hio8253aequ ioport+280hio8253bequ ioport+283hio8255aequ ioport+288hio8255bequ ioport+28bhio0832aequ ioport+290hdata1

8、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 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 ass

9、ume cs:code,ds:datastart:mov ax,datamov ds,axmov dx,offset msgmov ah,9int 21h ;显示提示信息sss:mov ah,7int 21h ;从键盘接收字符,不回显cmp al,1bhje exit ;若为esc键,则转exitcmp al,31hjl ssscmp al,38hjg sss ;若不在1-8之间转ssssub al,31hmov num,al ;求出相应的时间常数的序号mov cx,60 ;取60次32个正弦波数据ddd:mov si,0lll:mov al,data1si ;取正弦波数据mov dx,io0

10、832aout dx,al ;放音call delay ;调延时子程序inc sicmp si,32 ;是否取完32个数据jl lll ;若没有,则继续loop ddd ;总循环次数60是否完,没有,则继续jmp sssexit:mov ah,4chint 21hdelay proc near ;延时子程序ccc:mov bx,offset timemov dx,io8253b ;置8253通道0为方式0工作mov al,10hout dx,almov dx,io8255b ;设8255a口输入mov al,9bhout dx,almov al,num ;取相应的时间常数xlatmov dx,

11、io8253aout dx,al ;向8253通道0输出kkk:mov dx,io8255ain al,dx ;从8255a口读一字节test al,01 ;判pa0口是否为1jz kkk ;若不为1,则转kkkret ;子程序返回delay endpcode endsend start3.电子琴总设计流程图:开始键盘读入一个字符y是esc键吗?nn是数字18键吗?返回dosy点亮点阵y点亮led灯n是机内吗?60个正弦波完了吗?yn求出音阶值保存正弦波个数计数器赋值60每个正弦波数据个数计数器赋初值取正弦波数据送dac0832求出音阶值保存y赋相应频率值一个正弦波完了吗?n延时延时电路图:

12、8个led灯pb7pb0 pa0pa1 csclk0gate0 out0cs 8253 82551mhz+5v dac0832cs280h k0开关 288h 290h程序:data segmentioportequ 0c800h-0280hio8253aequ ioport+280h;8253通道0地址io8253bequ ioport+283h;8253控制字寄存器地址io8255aequ ioport+288h ;8255a口地址io8255bequ ioport+289h ;8255b口地址io8255dequ ioport+28bh;8255控制字寄存器地址io0832aequ io

13、port+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 db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据time db 120,106,94,89,79,70,63,59;发不同音时8253的计数器初值banquan db 0dh,0a

14、hdb*,0dh,0ahdb* *,0dh,0ahdb* welcome to use dianziqin *,0dh,0ahdb* this programme is desighed by *,0dh,0ahdb* zhouqiuping 61007204 *,0dh,0ahdb* *,0dh,0ahdb*,0dh,0ah db press 1,2,3,4,5,6,7,8,esc:,0dh,0ah,$num db ? ;num为8253计数器初值的序号freq dw 262,294,330,349,392,440,494,523 ;扬声器发声各频率值tim dw 400data endss

15、tack 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 ;等待从键盘接收字符,不回显al=asc码 cmp al,1bh je exit ;若为esc键,则转exit推出 cmp al,31h jl sss ;小于31h cmp al,38h ;大于38h jg sss ;不在1-8之间转ss

16、s 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,左移两位,第三行亮 mov dx,prothl out dx,alled: mov dx,io8255d mov al,99h ;设置8255a口入b口出 mov dx,io8255b out dx,num ;根据移位后的num点亮相应le

17、d灯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 ;取正弦波数据mov dx,io0832aout dx,al ;放音call delay ;调延时子程序inc sicmp si,32 ;是否取完32个数据jl lll ;若没有,则继续loop ddd ;总循环次数60是否完,没

18、有,则继续jmp sssexit: mov ah,4chint 21hdelay proc near ;延时子程序ccc: mov bx,offset timemov dx,io8253b ;置8253通道0为方式0工作mov al,10hout dx,almov al,num ;取相应的时间常数xlatmov dx,io8253aout dx,al ;向8253通道0输出kkk:mov dx,io8255ain al,dx ;从8255a口读一字节test al,01 ;判pa0口是否为1jz kkk ;若不为1,则转kkkret ;子程序返回delay endp;-机内部分jinei: m

19、ov 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,12928 ; 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 ou

20、t 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四测试方案和测试结果 测试方案 测试结果启动程序,出现按键提示,按下18键机内/实验仪发出相应的音阶同时led和点阵板亮相应的灯和行改变开关状态(可随时任意改变),按18键对应发出相应的音阶“弹琴”发出优美旋律按下esc键退出程序 五分析与总结 问题分析:关于开关改变发声源为机内或机外和led灯的点亮,原来想用前面学过的简单输入输出实验,用74ls273做输出,到led上驱动led灯亮;用74ls244做输入,把开关值输入控制发声源。后来发现这样很麻烦,虽然在程序上没有太繁杂,但是这样就加了两个地址,而且对于电路来说,就很复杂。因此,后来想到直接用8255做输入输出,设a口为输入,b口输出,这样用一个片子即可完成几个功能。 关于点亮点阵板,原来想将num逐个与07比较,来判断亮哪一行,后来这样写代码时比较繁杂,就改成移位来实现,给点阵的行赋初值00000001,然后再左移num位,即可亮相应的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论