当前位置首页 > 建筑/施工 > 其它相关建筑施工文档
搜柄,搜必应! 快速导航 | 使用教程  [会员中心]

微机课程设计电子琴

文档格式:DOCX| 12 页|大小 201.76KB|积分 20|2022-12-27 发布|文档ID:178072997
第1页
下载文档到电脑,查找使用更方便 还剩页未读,继续阅读>>
1 / 12
此文档下载收益归作者所有 下载文档
  • 版权提示
  • 文本预览
  • 常见问题
  • 微机实验及课程设计》课程设计报告电子琴姓名:***学 号:********专业:********实 验 室:电工电子实验中心103设计时间:2009年 5月 30日—— 2009年 6 月 4 日评定成绩:审阅教师:一.实验简介……………………………………………………………3二.基本设计思想………………………………………………………3三.程序流程和程序实现………………………………………………3四.测试方案和测试结果………………………………………………10五.分析与总结…………………………………………………………10一.实验简介目的:检验和提高我在原理与接口综合应用方面分析问题与解决问题的能力,同时也给我提供更多、更好的训练机会 根据设计要求,尽可能完成设计要求的功能,选择最合适的器件,构成最有效的硬件电路来完成基本实验要求:构造一模拟/数字电子琴1、 选择利用实验仪扬声器/PC机内8253驱动内扬声器与键盘1、2、3、4、5、6、7、8设计一个电子琴, 通过按数字键响相应的乐符1、2、3、4、5、6、7、i,使能演奏简单的乐曲按1~8数字键同时点亮相应 的 8 个 LED 灯,使具有声、光效果;2、 利用实验仪DAC和喇叭,软件控制上述功能。

    选择机内还是实验仪由开关设置,课随时切换;3、 在8*8点阵上表示音节高低;4、 精确显示从第一个键按下后的时间(单位秒,要求精确到0.1秒,显示到秒)进一步设计要求:1、 、能准确记录开始演奏到结束演奏的时间,在八段码上显示;2、 数字、模拟合奏,能同时指示音阶;3、 自动录音,并具有回放功能(分两种水平、难易不等、即记录按键,同时记录按键和时间实现情况:实现基本实验要求的 1~3二.基本设计思想1、先分别设计机内电子琴和实验仪电子琴机内电子琴参照实验五8253 计数器/定时器的选做与探索中使用PC机内8253驱动声音接口;实验仪电子琴参照实验中演示实验的电子琴流程图;2、 再把两者结合起来,用一个高低电平作开关控制是机内还是实验仪,可通过8255A 口输入,判断10 (二 进制)则实验仪DAC,00则机内喇叭;3、 点阵显示根据输入的数字判断应显示点阵的哪一行具体可先把点阵的8列全选通,输入为1〜8某 个数字时,判断显示相应的行;4、 LED灯显示同样,根据输入的数字判断应显示哪一个LED灯具体可设置8255B 口为输出,根据输入 的数字,输出控制 LED 灯相应灯亮三.程序流程和程序实现1、机内电子琴程序:dseg segmentfreq 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 400 num db ? dseg ends sseg segment stack dw 256 dup(?) sseg ends cseg segmentassume cs:cseg,ds:dseg start: mov ax,dseg mov ds,ax mov dx,offset msg mov ah,9 int 21h ;显示提示信息sss: mov ah,7 int 21h;等待从键盘接收字符,不回显 al=asc 码 cmp al,1bhje exit;若为ESC键,则转EXIT退出 cmp al,31hjl sss ;小于 31h cmp al,38h ;大于 38h jg sss ;不在'1'-'8'之间转 sss sub al,31hmov num,al ;num求出相应的时间常数的序号 jinei: mov al,numadd al,al mov ah,00h mov si,ax again: mov di,freq[si] mov bx,tim call genjmp sssexit: mov ah,4chint 21hgen proc nearmov al,0b6h ;设置8253通道2 方式3二进制计数out 43h,almov dx,12hmov ax,12928;DXAX=896*533h=18*65536+12928=1.19Mdiv diout 42h,al ;8253通道 2 口设置初值mov al,ahout 42h,alin al,61h ;读 8255PB 口mov ah,alor al,3out 61h,alwait1: mov cx,0hdelay3: mov ax,10 ;延时子程序delay2: nopdec axjnz delay2loop delay3dec bxjnz wait1mov al,ahout 61h,alretgen endpcseg endsend start2、实验仪电子琴 流程图:N4T[AO曲]吗迁时二程芹5 F程河〔于 i'.r)駅出昔统■!求出B£53±时时间 箕敷门歟器机值)呂人以弟忙尢cHUZE詮遁-i嘰i一埶誥赋值机设置 3253^0 SuA丿k课卡读寻简RI惬阳佰壬有工L- 丁祥序圧叵申E號总匏悍遂r at的订毎■■卜亡戏浊類馆■■卜暫计数詁临认僖实验电路:程序: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,0fdhdb 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hdb 80h,66h,4eh,38h,25h,15h,09h,04hdb 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 segmentassume cs:code,ds:datastart:mov ax,data mov ds,ax mov dx,offset msg mov 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 数据 ddd: mov si,0 lll: mov al,data1[si]mov dx,io0832a out dx,al call delay inc si cmp si,32 jl lll loop ddd 没有,则继续 jmp sss exit: mov ah,4ch int 21hdelay proc near;求出相应的时间常数ccc: mov bx,offset timemov dx,io8253b;置8253通道0为方;取 60 次 32 个正弦波式 0 工作mov al,10h out dx,al;取正弦波数据mov dx,io8255bmov al,9bh out dx,al;设8255A 口输入mov al,num xlat;取相应的时间常数;放音mov dx,io8253a;调延时子程序out dx,alkkk: mov dx,io8255a;向 8253通道0输出;是否取完32 个数据in al,dx;从8255A 口读一字节;若没有,则继续test al,01;判PA0 口是否为1;总循环次数60 是否完,jz kkk;若不为 1,则转 KKKret delay endp;子程序返回;延时子程序3.电子琴总设计code ends end start流程图:电路图:8 个 LED 灯程序:data segmentioport equ 0c800h-0280hio8253a equ ioport+280h;8253 通道 0 地址 io8253b equ ioport+283h;8253 控制字寄存器地址 io8255a equ 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 db 00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据time db 120,106,94,89,79,70,63,59 ;发不同音时8253 的计数器初值 banquan db 0dh,0ahdb 't A\ 11 A\ I ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx ^Tx 1 | 1 Z~^ p-% | 1 (p-%db ' ****',0dh,0ahdb ' **WELE TO USEdianziqindb ' ****',0dh,0ahTHIS PROGRAMME ISDESIGHED BY db ' ****',0DH,0AH db ' ****',0DH,0AHzhouqiuping 61007204**',0dh,0ah db '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 endsstack segment stackdw 256 dup(?)stack ends code segmentassume cs:code,ds:data start: mov ax,datamov ds,axmov dx,offset banquan; 显示mov ah,9int 21h ;显示提示信息sss: mov ah,7int 21h ;等待从键盘接收字符,不回显 al=asc 码cmp al,1bhje exit 若为ESC键,则转EXIT推出cmp al,31hjl sss ;小于 31hcmp al,38h ;大于 38hjg sss ;不在'1'-'8'之间转 ssssub al,31hmov num,al ;num求出相应的时间常数的序号dianzhen: mov al,0ffh ;点阵板的列全部选通mov dx,prothout dx,almov al,00000001 :点阵的行赋初值shl al,num;根据输入的数字,左移相应位数,即点阵亮相应行 mov num,al;如输入3,则num为2,左移两位,第三行亮 mov dx,prothlout dx,alled: mov dx,io8255dmov al,99h ;设置 8255A 口入 B 口出mov dx,io8255bout 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,data1[si] ;取正弦波数据mov dx,io0832aout 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 timemov dx,io8253b;置8253通道0为方式0工作 mov al,10h out dx,almov al,num ;取相应的时间常数 xlatmov dx,io8253a out dx,al ;向 8253 通道 0 输出kkk: mov dx,io8255ain al,dx ;从 8255A 口读一字节test al,01 ;判 PA0 口 是否为 1jz kkk ;若不为1,则转KKKret ;子程序返回delay endp; 机内部分jinei: mov al,numadd al,al mov ah,00h mov si,ax again: mov di,freq[si] 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.19Mdiv diout 42h,al ;8253 通道 2 口设置初值 mov al,ah out 42h,alin al,61h ;读 8255PB 口mov ah,alor al,3out 61h,al wait1: mov cx,0h delay3: mov ax,10 ;延时子程序delay2: nopnop dec ax jnz delay2 loop delay3 dec bx jnz wait1 mov al,ah out 61h,al ret gen endpcode ends end start四.测试方案和测试结果测试方案测试结果启动程序,出现按键提示,按下1〜8键机内/实验仪发出相应的音阶同时led和点阵板亮相应的灯和行改变开关状态(可随时任意改变),按1〜8键对应发出相应的音阶“弹琴”发出优美旋律按下ESC键退出程序五.分析与总结问题分析:关于开关改变发声源为机内或机外和led灯的点亮,原来想用前面学过的简单输入输出实验,用74LS273 做输出,到 led 上驱动 led 灯亮;用 74LS244 做输入,把开关值输入控制发声源。

    后来发现这样很麻烦, 虽然在程序上没有太繁杂,但是这样就加了两个地址,而且对于电路来说,就很复杂因此,后来想到直 接用8255做输入输出,设A 口为输入,B 口输出,这样用一个片子即可完成几个功能关于点亮点阵板,原来想将num逐个与0~7比较,来判断亮哪一行,后来这样写代码时比较繁杂,就 改成移位来实现,给点阵的行赋初值00000001,然后再左移num位,即可亮相应的行实验总结:这次微机实验课程设计,使我对微机软硬件结合有了进一步的了解原来并不太清楚是什么意思,一直 都很模糊,听课本也是很迷茫;而之前的那些单元实验,也没有都做好之前做的实验,由于大部分是验 证性的,所以就很被动地去做,甚至并没有想为什么要那样连电路,内部的代码更没有认真看这次课程 设计,因为要自己去设计整个过程,所以就不得不去了解学习自己原来并没有真正弄懂的东西比如一些 程序的代码的意思,汇编语言的逻辑,比如一些芯片的用途使我对前面所做的实验有了原理性的了解, 回头看一些实验,也知其然其所以然了同时对课本上讲的一些内容,不再像以前那样觉得抽象,通过这 次设计,有了具体的理解同时,我也知道了设计一个项目,应该如何下手应该先对项目要求有个全面的了解,知道要做什么, 然后根据要求所要涉及到的知识我们要主动去摄取,结合自己已学过的,再对整体框架有个感知,心里有 数后,进行设计。

    设计时用流程图,这很重要,这样整个思路就很清晰,而且是按照软硬件语言的逻辑顺 序进行,就很方便设计过程可以分模块,不要一开始就想把所有的功能都实现了,应该一个模块一个模 块地实现,再总的连起来,实现最后的总模块在每个模块设计时,尽量想到比较简单的设计,简化编程 和电路,也可少出错对微机是这样,对其他的像数字系统设计,也是一样的因此,我也觉得微机实验的这种形式的课程设计是很好也很有必要的对我们对微机实验的理解有很 大帮助参考书目:【1】 杨素行《微型计算机系统原理及应用》,,清华大学,2004 年【2】 微机实验及课程设计教程(试用版2.0),东南大学《微机系统与接口》课程组,2009年2 月。

    点击阅读更多内容
    卖家[上传人]:zoulianhua
    资质:实名认证