您好,欢迎访问三七文档
沈阳工程学院课程设计(论文)11设计任务描述1.1设计题目:简易电子琴设计1.2设计内容利用微机原理试验箱,设计简易电子琴,要求至少可以弹出7个音阶。1.2.1设计目的通过本学期对微机原理的学习,掌握的知识还停留在理论的上。但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。1.2.2基本要求1.可以弹出7个音阶。2.弹奏简短音乐。3.通过改变键盘输入来改变8254输出频率,实现扬声器发音沈阳工程学院课程设计(论文)22设计思路通过8255和8254来实现电子琴模拟,主要由两部分组成:第一部分为键盘扫描,用来确定按键位置,并给计数器赋初值。第二部分为发声部分,由计数器1#的输出端产生一定频率的方波驱动扬声器发声。其中8254和课本中学的8253在原理上是一样的,它为可编程定时器/计数器。利用计数器0,并使它工作在方式3---输出对称方波,通过改变频率来实现不同的发声高低,再调用延时子程序来实现发音的长短,把输出方波送到扬声器,至此实现不同的音符发声。过程中主要用到了8255芯片的PB0—PB4,PA0—PA4它们分别与键盘单元的X1—X4,Y1—Y4相连,其中B口低4位为输出端,B口低4位1为输入端。由它们对键盘单元进行扫描,并确定键值工作过程为:先给所有列线输入低电平,然后读取行线,检测行线是否为低电平,如果有某条行线输出低电平,则说明该键盘有按键被按下,否则,说明无按键被按下.采用这种方法可以快速判断键盘是否有键按下。在检查到有键按下后,再通过行扫描法判断按下的位置,从而确定按下的是什么键,经过计算得出计数器1#的初值。沈阳工程学院课程设计(论文)33设计原理流程图停止发声无条件转移程序结束开始程序定义8255,8254控制字键盘扫描有无键按下确定按键位置键值送CPU处理取对应频率时钟频率除对应频率得初始值初始值送8254发出方波调用延迟控制发音长短沈阳工程学院课程设计(论文)44实际硬件接线图系XD0统∣XD7XA1XA2IOW#IOR#IOYOD08255PA0∣∣D7PA3A0PC0A1∣WRPC3RDPB0CS∣PB7X1键∣X4盘Y1∣Y4A∣D0系XD0统∣XD7XA1XA2CLKIOY3IOW#IOR#D08254∣D7A0A1CLK0OUTOCSGATA0WRRD电子发声单元SPK+5V沈阳工程学院课程设计(论文)55源程序清单及注释MY8255_AEQU0600HMY8255_BEQU0602HMY8255_CEQU0604HMY8255_MODEEQU0606HMY8254_MODEEQU06C6HMY8254_AEQU06C0H;进行宏定义DATASEGMENTFREQ_LISTDW441D,495D,556D,589D,661D,742D,833D,882DDW262D,294D,330D,373D,402D,450D,494D,-1DDATAENDS;建立数据段CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX;实现段寄存器DS的初始化MOVDX,MY8255_MODEMOVAL,81HOUTDX,AL;写8255芯片的控制字实现工作在方式0,A端口和B端口输出,C端口输入MOVDX,MY8254_MODEMOVAL,36HOUTDX,AL;使8254工作在方式3,A口输入,运用计数器0,二进制方式沈阳工程学院课程设计(论文)6BEGIN:CALLCCSCAN;扫描JNZINK1;有键按下时跳到INK1JMPBEGIN;没键按下时循环执行BEGIN确定按下键的位置INK1:CALLCCSCANJNZINK2;有键按下时跳到INK2JMPBEGIN;没键按下时循环执行BEGININK2:MOVCH,0FEH;确定按下键在第一列MOVCL,00H;将CL清零COLUM:MOVAL,CHMOVDX,MY8255_A;将8255的A口地址赋给DXOUTDX,AL;将CPU中的AL值送到8255的A口中,即送到x1、x2、x3、x4中MOVDX,MY8255_C;将8255的C口地址赋给DXINAL,DX;将C口的值送到AL中L1:TESTAL,01H;检验按下键是否在L1JNZL2;不是L1则跳到L2MOVAL,00H;为了后面用来与FREQ_LIST数据段中数对应JMPKCODE;强制跳转到KCODEL2:TESTAL,02H;检验按下键是否在L2JNZL3;不是L2则跳到L3MOVAL,04H;为了后面用来与FREQ_LIST数据段中数对应。JMPKCODE;强制跳转到KCODE沈阳工程学院课程设计(论文)7L3:TESTAL,04H;检验按下键是否在L3JNZL4;不是L3则跳到L4MOVAL,08H;为了后面用来与FREQ_LIST数据段中数对应。JMPKCODE;强制跳转到KCODEL4:TESTAL,08H;检验按下键是否在L4JNZNEXT;不是L4则跳到NEXTMOVAL,0CH;为了后面用来与FREQ_LIST数据段中数对应。KCODE:ADDAL,CL;实现AL与CL的无进位加法MOVDL,2DMULDL;将AL乘以2结果保存到AX中PLAY:MOVSI,OFFSETFREQ_LIST;使SI指向FREQ_LIST的首地址ADDSI,AX;通过SI加AX实现指针SI的移动MOVDX,0FHMOVAX,4240H;被除数为0F4240HDIVWORDPTR[SI];除数为SI所指的数据MOVDX,MY8254_A;将8255的A口地址赋给DXOUTDX,AL;输出商的低4位MOVAL,AHOUTDX,AL;输出商的高4位MOVCX,8D;输入计数值CXNEXT3:CALLDALLY;调用延时子程序DALLYCALLDALLYCALLDALLY沈阳工程学院课程设计(论文)8CALLDALLYCALLDALLYLOOPNEXT3;CX不为0重复执行NEXT3MOVDX,0FHMOVAX,4240H;被除数为0F4240HMOVSI,30DDIVWORDPTR[SI];除数为SI=30所指的数据MOVDX,MY8254_A;将8255的A口地址赋给DXOUTDX,ALMOVAL,AHOUTDX,AL;实现静音,结束一个音符的发音JMPBEGIN;跳转到BEGIN,重复扫描NEXT:INCCL;使CL加1,为了后面用来与FREQ_LIST数据段中数对应MOVAL,CHTESTAL,08HJZKERR;无键按下时跳转到KERRROLAL,1D;向左移位MOVCH,ALJMPCOLUM;强制跳转到COLUMKERR:JMPBEGIN;跳到BEGIN重新开始扫描键盘扫描子程序CCSCAN:MOVAL,00HMOVDX,MY8255_AOUTDX,AL;使8255芯片A端口输出为0,既使x1、x2、x3、X4为0MOVDX,MY8255_C沈阳工程学院课程设计(论文)9INAL,DX;将从C端口输入的y1、y2、y3、y4送到AL中NOTAL;将AL取反ANDAL,0FH;将AL前4位清零RET延时子程序DALLY:PUSHCX;将CX压栈MOVCX,000FHT1:MOVAX,0009FHT2:DECAX;使AX减1JNZT2;AX不为0重复T2LOOPT1;CX不为0重复T1POPCX;将CX出栈RETCODEENDS;代码段定义结束ENDSTART;程序结束沈阳工程学院课程设计(论文)106主要元器件介绍6.18255简介6.1.18255引线图可编程并行接口8255引线图6.1.28255引脚功能RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。沈阳工程学院课程设计(论文)11WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个位的数据输入锁存器。PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。A1、A0:端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。本实验用到的引脚有PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS、和GND6.1.38255的工作方式(1)基本输入/输出方式(方式0)相当于三个独立的8位简单接口各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出C端口可以是一个8位的简单接口,也可以分为两个独立的4位端口常用于连接简单外设(适于无条件或查询方式)方式0的应用常使A端口和B端口作为8位数据的输入或输出口,使C口的某些位作状态输入沈阳工程学院课程设计(论文)12(2)选通工作方式(方式1)利用一组选通控制信号控制A端口和B端口的数据输入输出A口、B口作输入或输出口,C口的部分位用作选通控制信号A口、B口在作为输出和输入时的选通信号不同8255方式1的输出信号定义及时序图沈阳工程学院课程设计(论文)138255方式1的输入信号定义及时序图方式1的应用方式1主要用于中断控制方式下的输入输出C口的8位除用作选通信号外,其余位可工作于方式0下,作为输入或输出口沈阳工程学院课程设计(论文)14(3)双向传送方式(方式2)双向输入输出方式-------可以既作为输入口,又作为输出口只有A端口可工作在方式2下8255方式2的信号定义及时序图方式2的应用可使A端口作为双向端口用于中断控制方式当A口工作于方式2时,B口可工作于方式1(此时C口的所有位都用作选通控制信号的输入输出),也可工作于方式0(此时C口的剩余位也可工作于方式0)沈阳工程学院课程设计(论文)156.28254简介:6.2.1简介8254具有3个独立的16位计数器,6种不同的工作方式。计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当减为零时,通过OUT输出指示信号表明计数单元已为零。当作为定时器工作时,每当计数单元为零时,计数寄存器内容会自动重新装入计数单元,而且CLK输入是均匀的脉冲序列,于是OUT输出频率是降低了的(相对于CLK信号频率)脉冲序列。当作为计数器工作时,表明只关心在CLK端出现(代表事件)的脉冲个数,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。6.2.28254控制字格式8254的全部功能是由CPU编程设定的。CPU通过输出指令给8254装入控制字,从而设定其功能。8254控制字格式如下:D7D6D5D4D3D2D1D0SC1SC0RL1RL0M2M1M0BCD各
本文标题:简易电子琴设计
链接地址:https://www.777doc.com/doc-78695 .html