您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 微机原理课程设计报告电子琴
摘要本次专业课程设计作为前阶段学习知识的一个检验,培养了我们的动手能力以及独立思考设计的能力,也是大学培养的一个重要实践步骤。设计初期,我们通过网络,图书馆等资源查找到利用单片机设计制作电子琴的相关信息,对不同的方案进行细致的分析比较。并且按照题意与实际情况进行改进,使之符合要求。尔后利用恒科HK-51仿真开发系统编译软件对设计程序进行调试,最终确定了成熟的方案。然后按照电路图进行实物焊接,最终做出一个简单的电子琴。制作过程中发现的一些问题通过共同的分析研究得到的解决,此次课程设计巩固了前期的理论知识,增强了动手实践能力。程序主要是由定时子程序、发光二极管显示子程序和中断服务程序组成。包括对8253、8255等可编程器件的编程。关键词:8255;8253;中断;脉冲信号目录1概述......................................................11.1设计目的...............................................11.28255和8253的工作原理..................................12电子琴设计原理及流程图....................错误!未定义书签。2.1设计原理...............................错误!未定义书签。2.2流程图.................................错误!未定义书签。3设计思路..................................错误!未定义书签。4源代码....................................错误!未定义书签。5调试情况及其分析..........................................156课程设计总结..............................错误!未定义书签。参考文献...................................................291概述1.1设计目的(1)了解交通灯管理的基本工作原理;(2)熟悉8255A并行接口的各种工作方式和应用;(3)熟悉8253计数器/定时器的工作方式及应用编程,掌握利用软硬件相结合定时的方法;1.28255和8253的工作原理1.2.18255A的工作原理⑴8255A的内部结构①数据总线缓冲器:这是一个双向三态的8位数据缓冲器,它是8255A与微机系统数据总线的接口。输入输出的数据、CPU输出的控制字以及CPU输入的状态信息都是通过这个缓冲器传送的。②三个端口A,B和C:A端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入锁存器。B端口包含一个8位数据输入/输出锁存器和缓冲器,一个8位数据输入缓冲器。C端口包含一个8位数据输出锁存器和缓冲器,一个8位数据输入缓冲器(输入没有锁存器)。③A组和B组控制电路:这是两组根据CPU输出的控制字控制8255工作方式的电路,它们对于CPU而言,共用一个端口地址相同的控制字寄存器,接收CPU输出的一字节方式控制字或对C口按位复位字命令。方式控制字的高5位决定A组的工作方式,低3位决定B组的工作方式。对C口按位复位命令字可对C口的每一位实现置位或复位。A组控制电路控制A口和C口上半部,B组控制电路控制B口和C口下半部。④读写控制逻辑:用来控制把CPU输出的控制字或数据送至相应端口,也由它来控制把状态信息或输入数据通过相应的端口送到CPU。⑵8255A的工作方式方式0——基本输入输出方式;方式1——选通输入输出方式;方式2——双向方式。1.2.28253的工作原理8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。其CLK0~CLK2是计数器0~2的时钟脉冲输入端,GATE0~GATE2是门控脉冲输入端,OUT0~OUT2是输出端。2电子琴设计原理及流程图2.1设计原理(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个正弦波。2.2流程图2.2.1电路连接图如下:(1)8253和8255连接如下2.2.2主程序流程图开始显示缓存区,初始化8279初始化调用发音子程序调用键盘子程序键盘码送缓存区是否9键是否0键是否S键是否R键录音子程序放录音子程序放歌子程序返回DOSYNNNYYYN2.2.3发音子程序流程图2.2.4键盘显示子程序流程图2.25显示子程序流程图3设计思路在本次课程设计中,根据复杂程序设计思想——模块化程序设计,分析和确定程序总体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块(子程序,具体可见下)。程序设计的思路按以下顺序进行:1.分析与确定程序总体设计目标2.将总体目标划分为若干模块3.定义每个模块的具体任务,明确它与其他模块间的通信方式4.编写源程序,进行调试,包括:简单电子琴主程序结合实验指导书的两程序,将其分为5个子程序,实现简单的播放和显示音阶的功能。录音子程序实现记录弹奏曲目并播放的功能。首先由9触发,将输入的音阶存入缓存区song中,输入的同时可以发声和显示。当再次按9时录制完成。放音子程序本子程序实现放音功能。首先从8279键盘读出键码,判断,如果键码不是1-8即回到程序开始,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。播放60次后,从PORT1中取出值到AL,和1相与,判断是否有按键,如果有就进入死循环,直到下次按键为止。放歌子程序调用放音子程序。暂停子程序在乐曲播放过程中,每调用一次MUSIC,就从PORT1中取出AL,检测AL个数,即每次发音后按键盘的次数。当检测到AL为1时,即按了一次任意就使程序进入一个死循环,不发音,到此实现了暂停,然后再次按动任意键时,AL就为2,不为1,所以程序跳出死循环,继续从断开处调用乐曲,继续播放。源程序整体程序开始,显示提示信息,对缓存区、8279初始化。接着调用发音子程序,键盘子程序,在把AL送缓存区,实现发音和显示。接着对9键、0键、f键、r键进行逐个判断,当9按下时,调用录音子程序。当按下0时,播放录制的曲目。当按下f键时,播放程序中预设的曲目。当检测到r时,退出到DOS状态。当每一个都检测不到时,退回到调用发音子程序,继续发音显示。从而实现有扩展功能的电子琴。5.模块连接,形成完整的程序6.编写程序文档4源代码DATASEGMENTIOPORTEQU0C400H-0280HPORT0EQUIOPORT+2B0H;8279DATAPORTPORT1EQUIOPORT+2B1H;8279CTRLPORTSEC1DB0;HOURHIGHTSEC2DB0;HOUPLOWMIN1DB0;MINHIGHTMIN2DB0;MINLOWHOUR1DB0;SECHIGHTHOUR2DB0;SECLOWLEDDB3FH,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,77H,7CH,39H,5EH,79H,71H;7段管对应的显示码DB67H,37H,73H,31H,3EH,36H,66HIO8253AEQUIOPORT+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’************************************************’,0DH,0AHDB’THISISOURWORK,PLEASESUPPORTUS,THANKYOU’,0DH,0AHDB'1.PRESS1~8TOPLAY',0DH,0AH,0DH,0AHDB'2.PRESS9TORECORD',0DH,0AH,0DH,0AHDB'3.PRESS0TOPLAYTHERECORD',0DH,0AH,0DH,0AHDB'4.PRESSFTOPLAYTHESONG',0DH,0AH,0DH,0AHDB'5.PRESSANYKEYTOPAUSE/STARTWHENPLAYTHERECORD',0DH,0AH,0DH,0AHDB'6.PRESSRTOEXIT',0DH,0AH,0DH,0AHDB’COPYRIGHT@MR.LI&MR.HUANG’,0DH,0AHDB’**********************************’,0DH,0AH,'$'NUMDB?;NUM为8253计数器初值的序号SONGDB50DUP(?)SONG1DB1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1MSGPLAYDB0DH,0AH,0DH,0AH,'RECORDING......PLESS9TOEND',0DH,0AH,0DH,0AH,'$'MSGENDDB'RECORDFINISHED.',0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,'$'MSGPLAY1DB0DH,0AH,0DH,0AH,'PLAYING......PRESSANYKEYTOPAUSE.',0DH,0AH,0DH,0AH,'$'MSGEND1DB'PLAYINGFINISHED.',0DH,0AH,0DH,0AH,'$'DATAENDSSTACK1SEGMENTPARASTACK'STACK'DB50DUP(0)STACK1ENDSCODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVDX,OFFSETMSGMOVAH,9INT21H;显示提示信息CLIMOVAX,DATAMOVDS,AXMOVSEC1,0MOVSEC2,0MOVMIN1,0MOVMIN2,0MOVHOUR1,0MOVHOUR2,0;显示缓存区初始化MOVAX,DATAMOVDS,AXMOVAX,CSMOVDS,AXMOVDX,PORT1MOVAL,0D3H;11010011清除命令特征位OUTDX,AL;8279CLEARMOVAL,2AH;0010101042分频,内部使用1MHZ/42的频率OUTDX,AL;8279CLOCKMOVAL,40HOUTDX,AL;READFIFORAMCOMMANDMOVAL,00H;8个字符显示,左入口。编码扫描键盘,双键锁定。OUTDX,AL;KEYBORDDISPLYMODEMOVAL,80H;写入的存储单元地址为0000OUTDX,AL;WRITERAMCOMMANDKEY1:CALLMUSIC;发音CALLKEYBORD;CALLKEYBORDANDDISPLYNEXT2:MOVHOUR2,ALMOVHOUR
本文标题:微机原理课程设计报告电子琴
链接地址:https://www.777doc.com/doc-2647299 .html