您好,欢迎访问三七文档
《微机实验及课程设计》报告《微机实验及课程设计》课程设计报告电子琴姓名:***学号:********专业:********实验室:电工电子实验中心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、机内电子琴流程图:程序:dsegsegmentfreqdw262,294,330,349,392,440,494,523;扬声器发声各频率值msgdb'Press1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'timdw400numdb?dsegendsssegsegmentstackdw256dup(?)ssegendscsegsegmentassumecs:cseg,ds:dsegstart:movax,dsegmovds,axmovdx,offsetmsgmovah,9int21h;显示提示信息sss:movah,7int21h;等待从键盘接收字符,不回显al=asc码cmpal,1bhjeexit;若为ESC键,则转EXIT退出cmpal,31hjlsss;小于31hcmpal,38h;大于38hjgsss;不在'1'-'8'之间转ssssubal,31hmovnum,al;num求出相应的时间常数的序号jinei:moval,numaddal,almovah,00hmovsi,axagain:movdi,freq[si]movbx,timcallgenjmpsssYN求出音阶值保存赋相应频率值延时开始键盘读入一个字符是ESC键吗?是数字1~8键吗?返回DOSYN《微机实验及课程设计》报告exit:movah,4chint21hgenprocnearmoval,0b6h;设置8253通道2方式3二进制计数out43h,almovdx,12hmovax,12928;DXAX=896*533h=18*65536+12928=1.19Mdivdiout42h,al;8253通道2口设置初值moval,ahout42h,alinal,61h;读8255PB口movah,aloral,3out61h,alwait1:movcx,0hdelay3:movax,10;延时子程序delay2:nopdecaxjnzdelay2loopdelay3decbxjnzwait1moval,ahout61h,alretgenendpcsegendsendstart2、实验仪电子琴流程图:实验电路:《微机实验及课程设计》报告程序:datasegmentioportequ0d400h-0280hio8253aequioport+280hio8253bequioport+283hio8255aequioport+288hio8255bequioport+28bhio0832aequioport+290hdata1db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdhdb0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hdb80h,66h,4eh,38h,25h,15h,09h,04hdb00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据timedb120,106,94,89,79,70,63,59;发不同音时8253的计数器初值msgdb'Press1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'numdb?;num为8253计数器初值的序号dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetmsgmovah,9int21h;显示提示信息sss:movah,7int21h;从键盘接收字符,不回显cmpal,1bhjeexit;若为ESC键,则转EXITcmpal,31hjlssscmpal,38hjgsss;若不在'1'-'8'之间转ssssubal,31hmovnum,al;求出相应的时间常数的序号movcx,60;取60次32个正弦波数据ddd:movsi,0lll:moval,data1[si];取正弦波数据movdx,io0832aoutdx,al;放音calldelay;调延时子程序incsicmpsi,32;是否取完32个数据jllll;若没有,则继续loopddd;总循环次数60是否完,没有,则继续jmpsssexit:movah,4chint21hdelayprocnear;延时子程序ccc:movbx,offsettimemovdx,io8253b;置8253通道0为方式0工作moval,10houtdx,almovdx,io8255b;设8255A口输入moval,9bhoutdx,almoval,num;取相应的时间常数xlatmovdx,io8253aoutdx,al;向8253通道0输出kkk:movdx,io8255ainal,dx;从8255A口读一字节testal,01;判PA0口是否为1jzkkk;若不为1,则转KKKret;子程序返回delayendpcodeendsendstart《微机实验及课程设计》报告3.电子琴总设计流程图:YNNNYNY60个正弦波完了吗?一个正弦波完了吗?延时求出音阶值保存正弦波个数计数器赋值60每个正弦波数据个数计数器赋初值取正弦波数据送DAC0832开始键盘读入一个字符是ESC键吗?是数字1~8键吗?返回DOS点亮点阵点亮LED灯是机内吗?求出音阶值保存赋相应频率值延时NYY《微机实验及课程设计》报告电路图:8个LED灯825382551MHZ+5VDAC0832280HK0开关288H290H程序:datasegmentioportequ0c800h-0280hio8253aequioport+280h;8253通道0地址io8253bequioport+283h;8253控制字寄存器地址io8255aequioport+288h;8255A口地址io8255bequioport+289h;8255B口地址io8255dequioport+28bh;8255控制字寄存器地址io0832aequioport+290hprothequioport+2a8h;点阵行选的地址protlrequioport+2b0h;点阵列选的地址data1db80h,96h,0aeh,0c5h,0d8h,0e9h,0f5h,0fdhdb0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96hdb80h,66h,4eh,38h,25h,15h,09h,04hdb00h,04h,09h,15h,25h,38h,4eh,66h;正弦波数据timedb120,106,94,89,79,70,63,59;发不同音时8253的计数器初值banquandb0dh,0ahdb'*************************************************',0dh,0ahdb'**CLK0GATE0OUT0CSPB7~PB0PA0PA1CSCS《微机实验及课程设计》报告**',0dh,0ahdb'**WELCOMETOUSEdianziqin**',0dh,0ahdb'**THISPROGRAMMEISDESIGHEDBY**',0DH,0AHdb'**zhouqiuping61007204**',0DH,0AHdb'****',0dh,0ahdb'*************************************************',0dh,0ahdb'Press1,2,3,4,5,6,7,8,ESC:',0dh,0ah,'$'numdb?;num为8253计数器初值的序号freqdw262,294,330,349,392,440,494,523;扬声器发声各频率值timdw400dataendsstacksegmentstackdw256dup(?)stackendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovdx,offsetbanquan;版权显示movah,9int21h;显示提示信息sss:movah,7int21h;等待从键盘接收字符,不回显al=asc码cmpal,1bhjeexit;若为ESC键,则转EXIT推出cmpal,31hjlsss;小于31hcmpal,38h;大于38hjgsss;不在'1'-'8'之间转ssssubal,31hmovnum,al;num求出相应的时间常数的序号dianzhen:moval,0ffh;点阵板的列全部选通movdx,prothoutdx,al《微机实验及课程设计》报告moval,00000001:点阵的行赋初值shlal,num;根据输入的数字,左移相应位数,即点阵亮相应行movnum,al;如输入3,则num为2,左移两位,第三行亮movdx,prothloutdx,alled:movdx,io8255dmoval,99h;设置8255A口入B口出movdx,io8255boutdx,num;根据移位后的num点亮相应led灯kaiguan:movdx,io8255a;判断机内机外inal,dx;从8255B口读一字节testal,10b;判断PA0口是否为10(二进制)jzjiwai;是的话转实验仪jmpnei;否则转机内;---------------------------------jiwaijiwai:movcx,60;取60次32个正弦波数据ddd:movsi,0lll:moval,data1[si];取正弦
本文标题:微机课程设计电子琴
链接地址:https://www.777doc.com/doc-70730 .html