![电子琴设计(微机原理课程设计)_第1页](http://file4.renrendoc.com/view/2b27d5bb6985414cfc3a5ba65ed3bfe3/2b27d5bb6985414cfc3a5ba65ed3bfe31.gif)
![电子琴设计(微机原理课程设计)_第2页](http://file4.renrendoc.com/view/2b27d5bb6985414cfc3a5ba65ed3bfe3/2b27d5bb6985414cfc3a5ba65ed3bfe32.gif)
![电子琴设计(微机原理课程设计)_第3页](http://file4.renrendoc.com/view/2b27d5bb6985414cfc3a5ba65ed3bfe3/2b27d5bb6985414cfc3a5ba65ed3bfe33.gif)
![电子琴设计(微机原理课程设计)_第4页](http://file4.renrendoc.com/view/2b27d5bb6985414cfc3a5ba65ed3bfe3/2b27d5bb6985414cfc3a5ba65ed3bfe34.gif)
![电子琴设计(微机原理课程设计)_第5页](http://file4.renrendoc.com/view/2b27d5bb6985414cfc3a5ba65ed3bfe3/2b27d5bb6985414cfc3a5ba65ed3bfe35.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理课程设计电子琴设计设计内容编写一实现电子琴的程序,并实现若干扩展功能。基本功能:用键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;扩展功能:1、在程序中可预设多首曲目,按一键可以进入预设子菜单,对要播放的曲目进行选择,并实现播放该曲目。2、程序运行时有友好的用户介面。3.当弹奏不同音阶时,双色点阵LED显示器显示不同的图案二、元件与仪器1.计时器82532.并行控制器8255A3.实验台三、设计原理、思路及流程图设计原理(1)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A,即可在其输出端得到一定的电压输出。给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。各音阶标称频率值:(2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:发"1"频率为261。1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/32=0.12ms.定时时间可以由8253配合8255来实现。按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。本程序中设置默认长度为60个正弦波。编写源程序,进行调试,包括:简单电子琴主程序结合实验指导书的两程序,将其分为若干个子程序,实现简单的播放和显示音阶的功能。发音子程序本子程序实现放音功能。首先从键盘读出键码,判断,如果键码不是1-8(9除外)即仍然处于音阶输入准备状态,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。播放60次后,然后判断是否有按键,如果有就进入死循环,直到下次按键为止。放歌子程序本子程序实现播放预置在程序中的歌曲,并加上一个选择子程序段,可通过选择进入不同曲目,进而实现播放不同的歌曲,播放时直接调用放音子程序Led显示子程序本程序实现从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。显示广告版子程序本子程序实现在广告板上在输入不同音阶时有我们自行设计的图案显示。输入不同图案相关的代码,然后调用图案显示判断程序段。对其进行判断,然后进入图案显示代码,最终显示不同的图案。源程序整体程序开始,显示提示信息,接着调用发音子程序,实现发音和显示。接着对9键进行判断、当9按下时,调用放音子程序。然后iujinru选择,选择喜欢的歌曲并进行播放。当检测到esc时,退出。当每一个都检测不到时,退回到调用发音子程序,继续发音显示。从而实现有扩展功能的电子琴。模块连接,形成完整的程序编写程序文档4.流程图以下用主程序与子程序配合流程图其进行说明。(1)主程序流程图开始开始调用发音子程序使用键盘输入是否1到8键放音子程序NY退出是esc键是否9键NY调用广告版子程序Led子程序Y(2)发音子程序流程图(3)led显示子程序(4)显示广告板子程序(5)放音子程序开始开始调用发音子程序用键盘输入喜欢歌曲的序号(1-3)是否1到3键放音子程序YNY退出是esc键是否9键Y调用广告版子程序Led子程序NN四、源程序STACKSEGMENTPARASTACK'STACK'DB100DUP(0)STACKENDSDATASEGMENTIOPORT EQU0C400H-0280HIO8255A EQUIOPORT+288HIO8255C EQUIOPORT+28AHIO8255B EQUIOPORT+28BHIO8253A EQUIOPORT+280HIO8253B EQUIOPORT+283HIO0832A EQUIOPORT+290HPROT EQU0C400H-280HPROTH EQU PROT+298HPROTLR EQUPROT+2A0HPROTLY EQU PROT+2A8HDATA1DB80H,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 ;正弦波数据LEDDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHMESG1DB0DH,0AH,'INPUTANUM(1--8=PLAYPIANO,9=PLAYMUSIC,ESC=EXIT):',0DH,0AH,'$'MESG2DB0DH,0AH,'PLEASECHOOSETHEMUSICYOULIKE(1-AAA,2-BBB):',0DH,0AH,'$'TIMEDB120,110,100,90,81,72,55,42 ;发不同音时8253的计数器初值NUMDB? ;NUM为8253计数器初值的序号--MESSDB'STRIKEANYKEY,RETURNTODOS!',0AH,0DH,'$'MIN1DB00H,01H,02H,03H,04H,05H,06H,07HCOUNTDB0JNUMDB?;JNUM用来存储输入数字MUSICDB30H,31H,31H,35H,35H,36H,36H,35H,30H,30H,34H,34H,33H,33H,32H,32H,31H,100DUP(30H);,35H,35H,34H,34H,33H,33H,32H,35H,35H,34H,34H,33H,33H,32H,31H,31H,35H,35H,36H,36H,35H,34H,34H,33H,33H,3;2H,32H,31H,QMUSICDB?DOWNDB31H,32H,33H,34H,35H,36H,37H,38H,38H,37H,36H,35H,34H,33H,32H,31H,100DUP(30H)PPDB?TTDB?LMUSICEQU45BUFF1DB00H,00H,18H,3CH,3CH,18H,00H,00HBUFF2DB00H,1EH,0AH,46H,62H,50H,78H,00HBUFF3DB00H,06H,06H,60H,60H,06H,06H,00HBUFF4DB24H,66H,0E7H,00H,00H,0E7H,66H,24HBUFF5DB42H,0E7H,42H,18H,18H,42H,0E7H,42HBUFF6DB66H,24H,81H,0C3H,0C3H,81H,24H,66HBUFF7DB24H,66H,00H,0DBH,0DBH,00H,66H,24HBUFF8DB0CBH,99H,10H,0C6H,63H,08H,99H,0D3HDATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART: MOVTT,1MOVAX,DATA MOVDS,AX MOVDX,IO8255B;使8255的A口为输出方式 MOVAX,92H OUTDX,ALMOVQMUSIC,0JMPSSSZERO:MOVQMUSIC,0SSS:CMPQMUSIC,LMUSICJEZEROCMPQMUSIC,0JESSS4JMPSSS3SSS4:MOVDX,OFFSETMESG1MOVAH,9 INT21H;显示提示信息MOVAH,7 INT21H;从键盘接收字符,不回显SSS3:CMPAL,39HJEPLAY0CMPQMUSIC,0JEOOJMPPLAYOO: CMPAL,1BH JEEXIT;若为ESC键,则转EXITCMPAL,30HJESOFTDLY;MOVDI,OFFESETRECORD;MOV[DI],AL;INCDI CMPAL,31H JLSSS CMPAL,38H JGSSS;若不在'1'-'8'之间转SSSMOVJNUM,AL SUBAL,31H MOVNUM,AL;求出相应的时间常数的序号 MOVCX,60;取60次32个正弦波数据SSS2:MOVAL,JNUM SUBAL,30H;将所得字符的ASCII码减30H MOVBX,OFFSETLED;BX为数码表的起始地址 XLAT;求出相应的段码 MOVDX,IO8255C;从8255的C口输出 OUTDX,ALDDD: MOVSI,0LLL: MOVAL,DATA1[SI];取正弦波数据 MOVDX,IO0832A OUTDX,AL;放音 CALLDELAY;调延时子程序 INCSI CMPSI,32;是否取完32个数据 JLLLL;若没有,则继续 LOOPDDD;总循环次数60是否完,没有,则继续MOVCX,0002HCALLNIAN;------------------------CALLNIAN;CALLNIAN JMPSSS;转SSSEXIT: MOVAH,4CH INT21HPLAY0: CMPTT,1JETT1MOVDX,OFFSETMESG2 MOVAH,9 INT21H;显示子菜单MOVAH,7 INT21H;输入子菜单命令MOVPP,ALPLAY:MOVAL,QMUSICCMPPP,32HJEPLAY2CMPPP,31HJNEPLAY0MOVBX,OFFSETMUSICPLAY3:XLATMOVCL,QMUSICADDCL,01HMOVQMUSIC,CLJMPOOTT1:MOVTT,0MOVPP,32HPLAY2:MOVBX,OFFSETDOWNJMPPLAY3SOFTDLY:MOVBL,10DELAY4:MOVCX,0FFFFHWAIT3:LOOPWAIT3DECBLJNZDELAY4JMPSSSDELAYPROCNEAR;延时子程序CCC1: MOVBX,OFFSETTIME MOVDX,IO8253B;置8253通道0为方式0工作 MOVAL,10H OUTDX,AL MOVAL,NUM;取相应的时间常数 XLAT MOVDX,IO8253A OUTDX,AL;向8253通道0输出KKK: MOVDX,IO8255A INAL,DX;从8255A口读一字节 TESTAL,01;判PA0口是否为1 JZKKK;若不为1,则转KKK RET;子程序返回DELAYENDPNIANPROCNEARSTART2:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMESSAGN: MOV CX,80HD2: MOV SI,OFFSETMIN1 MOV AH,01H PUSH CX MOV CX,0008HNEXT:MOVAL,JNUMCALLBUFF MOV DX,PROTH OUT DX,AL MOV AL,AH MOV DX,PROTLR OUT DX,AL;显示第一行红 SHL AH,01 INC SI PUSHCX MOV CX,0FFFFHDELAY2:LOOPDELAY2;延时 POP CX LOOPNEXT POP CX CALLDELAY LOOPD2 MOV AL,00 MOV DX,PROTLR OUT DX,ALCMPQMUSIC,0JEC1RETC1:MOV AH,01 INT 16HJNZBACKAGN1: MOV CX,80H;AGN1为显示黄色D1:MOV SI,OFFSETMIN1 MOV AH,01 PUSHCX MOV CX,0008HNEXT1:MOVAL,JNUMCALLBUFF MOV DX,PROTH OUT DX,AL MOV AL,AH MOV DX,PROTLY OUT DX,AL SHL AH,01 INC SI PUSH CX MOV CX,0FFFFHDELAY1:LOOPDELAY1 MOV CX,0FFFFHDELAY3:LOOPDELAY3 POP CX LOOPNEXT1 POP CX CALLDELAY LOOP D1 MOV AL,00 MOV DX,PROTLY OUT DX,ALCMPQMUSIC,0JEC2RETC2:MOV AH,01 INT 16HJNZBACKJMPAGNBACK:RET;----------------------------------------------------------------DELAY0 PROC NEAR;延迟子程序 PUSH CX MOV CX,0FFFFHCCC: LOOP CCC POP CX RETDELAY0 ENDP;---------------------------------------------------------------------;--------------------------------------------------------------------BUFFPROCNEAR;代码选择判断子程序JUDGE1:CMPAL,31HJEL1CMPAL,32HJEL2CMPAL,33HJEL3CMPAL,34HJEL4CMPAL,35HJEL5CMPAL,36HJEL6CMPAL,37HJEL7CMPAL,38HJEL8;JMPA2L1:MOV AL,[SI] MOV BX,OFFSETBUFF1 XLATRET;得到第一行码L2:MOV AL,[SI] MOV BX,OFFSETBUFF2 XLATRETL3:MOV AL,[SI] MOV BX,OFFSETBUFF3 XLATRETL4:MOV AL,[SI] MOV BX,OFFSETBUFF4 XLATRETL5:MOV AL,[SI] MOV BX,OFFSETBUFF5 XLATRETL6:MOV AL,[SI] MOV BX,OFFSETBUFF6 XLATRETL7:MOV AL,[SI] MOV BX,OFFSETBUFF7 XLATRETL8:MOV AL,[SI] MOV BX,OFFSETBUFF8 XLATRETBUFFENDPNIANENDPCODEENDSENDSTART五、调试情况及其分析源程序完成后,进行子程序与程序的调试工作,程序调试过程、完成情况及其分析按以下顺序进行:主程序简单电子琴功能主程序要求完成的功能有:电子琴简单功能实现及将音阶用数码管显示,主程序由电子琴实验程序有机组成,两个程序简单拼凑在一齐是不能实现的。经过实际调试和修改,将原电子琴程序改为2个子程序:(实现播放音阶)和(实现播放音阶时延时);并加入了数码管显示的子程序以及广告版显示图案程序。然后播放预存歌曲由放歌子程序完成。调试后,主程序能实现课程设计要求的功能,并且界面清晰、操作容易。子程序放歌(已预存)功能此功能将一首预存的歌曲播放,此功能可以调用放音的子程序实现,唯一不同就是根据键盘的输入控制,选择播放的缓存区是预存歌缓存区。然后通过键盘选择所要播放的歌曲曲目源程序整体功能将各子程序调试完成后,进行最后的源程序整体功能调试。调试过程中我们注意到:程序模块化(功能分为若干子程序)能使源程序清晰,调试简单,因此在调试中我们还将源程序进一步模块化。注意子程序之间的通信方式,调用子程序前,使用push/pop保护了一些子程序会用到的主程序同时会用到的寄存器,保证调用之后主程序的顺利执行。在调试过程中出现的一些小问题,我们都根据以上3点总结出的经验作为原则进行调试,调试过程十
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2022年新课标八年级上册道德与法治《3.1 维护秩序 》听课评课记录
- 【2022年新课标】部编版七年级上册道德与法治8.1 生命可以永恒吗 听课评课记录
- 河北省七年级历史下册第三单元明清时期:统一多民族国家的巩固与发展第20课清朝君主专制的强化听课评课记录(新人教版)
- 湘教版数学八年级上册《小结练习》听评课记录2
- 湘教版数学九年级下册4.1《随机事件与可能性》听评课记录1
- 统编版七年级下册道德与法治第四单元整体听课评课记录
- 《百家争鸣》名师听课评课记录(新部编人教版七年级上册历史)
- 新人教版七年级地理上册《4.1人口与人种(第1课时世界人口的增长世界人口的分布)》听课评课记录
- 场地使用安全协议书范本
- 北师大版道德与法治七年级上册2.2《学习风向标》听课评课记录
- 2025版大学食堂冷链食材配送服务合同模板3篇
- 新能源发电项目合作开发协议
- 《中医体重管理临床指南》
- 2025年上半年潞安化工集团限公司高校毕业生招聘易考易错模拟试题(共500题)试卷后附参考答案
- 2024年铁岭卫生职业学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 甲基乙基酮2-丁酮MSDS危险化学品安全技术说明书
- 【大学】挤出管材(P64)ppt课件
- 大学物理课后习题答案北京邮电大学出版社
- 暗黑破坏神2所有绿色套装(大图)
- 火炬气回收设施设计
- 猪场岗位责任制(共14页)
评论
0/150
提交评论