简易电子琴设计.doc_第1页
简易电子琴设计.doc_第2页
简易电子琴设计.doc_第3页
简易电子琴设计.doc_第4页
简易电子琴设计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 设计任务描述1.1 设计题目: 简易电子琴设计1.2 设计内容 利用微机原理试验箱,设计简易电子琴,要求至少可以弹出7个音阶。1.2.1 设计目的通过本学期对微机原理的学习,掌握的知识还停留在理论的上。但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。1.2.2 基本要求1可以弹出7个音阶。2弹奏简短音乐。3通过改变键盘输入来改变8254输出频率,实现扬声器发音2 设计思路 通过8255和8254来实现电子琴模拟, 主要由两部分组成:第一部分为键盘扫描,用来确定按键位置,并给计数器赋初值。第二部分为发声部分,由计数器1#的输出端产生一定频率的方波驱动扬声器发声。其中8254和课本中学的8253在原理上是一样的,它为可编程定时器/计数器。利用计数器0,并使它工作在方式3-输出对称方波,通过改变频率来实现不同的发声高低,再调用延时子程序来实现发音的长短,把输出方波送到扬声器,至此实现不同的音符发声。过程中主要用到了8255芯片的PB0PB4,PA0PA4它们分别与键盘单元的X1X4,Y1Y4相连,其中B口低4位为输出端,B口低4位1为输入端。由它们对键盘单元进行扫描,并确定键值工作过程为:先给所有列线输入低电平,然后读取行线,检测行线是否为低电平,如果有某条行线输出低电平,则说明该键盘有按键被按下,否则,说明无按键被按下.采用这种方法可以快速判断键盘是否有键按下。在检查到有键按下后,再通过行扫描法判断按下的位置,从而确定按下的是什么键,经过计算得出计数器1#的初值。3 设计原理流程图开始程序定义8255,8254控制字键盘扫描有无键按下确定按键位置键值送处理取对应频率时钟频率除对应频率得初始值初始值送8254发出方波调用延迟控制发音长短 停止发声无条件转移程序结束4 实际硬件接线图系 XD0统 XD7 XA1XA2 CLK IOY3 IOW# IOR#D0 8254D7A0A1CLK0OUTOCSGATA0WRRD电子发声单元SPK+5V系 XD0 统 XD7 XA1 XA2 IOW# IOR#IOYOD0 8255 PA0 D7 PA3A0 PC0A1 WR PC3RD PB0CS PB7X1键X4盘Y1Y4AD05 源程序清单及注释MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604H MY8255_MODE EQU 0606HMY8254_MODE EQU 06C6HMY8254_A EQU 06C0H ;进行宏定义DATA SEGMENTFREQ_LIST DW 441D,495D,556D,589D,661D,742D,833D,882D DW 262D,294D,330D,373D,402D,450D,494D,-1DDATA ENDS ;建立数据段CODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AX ;实现段寄存器DS的初始化 MOV DX,MY8255_MODE MOV AL,81HOUT DX,AL ;写8255芯片的控制字实现工作在方式0,A端口和B端口输出,C端口输入MOV DX,MY8254_MODEMOV AL,36HOUT DX,AL ;使8254工作在方式3, A口输入,运用计数器0,二进制方式BEGIN: CALL CCSCAN ;扫描JNZ INK1 ;有键按下时跳到INK1JMP BEGIN ;没键按下时循环执行 BEGIN确定按下键的位置INK1: CALL CCSCAN JNZ INK2 ; 有键按下时跳到INK2 JMP BEGIN ;没键按下时循环执行BEGININK2: MOV CH,0FEH ;确定按下键在第一列 MOV CL,00H ;将CL清零COLUM: MOV AL,CH MOV DX,MY8255_A ;将8255的A口地址赋给DX OUT DX,AL ;将CPU中的AL值送到8255 的A口中,即送到x1、x2、 x3、x4中 MOV DX,MY8255_C ; 将8255的C口地址赋给DX IN AL,DX ;将C口的值送到AL中 L1: TEST AL,01H ;检验按下键是否在L1 JNZ L2 ;不是L1则跳到L2 MOV AL,00H ;为了后面用来与FREQ_LIST 数据段中数对应JMP KCODE ;强制跳转到KCODEL2: TEST AL,02H ;检验按下键是否在L2 JNZ L3 ;不是L2则跳到L3MOV AL,04H ;为了后面用来与FREQ_LIST 数据段中数对应。JMP KCODE ;强制跳转到KCODEL3: TEST AL,04H ;检验按下键是否在L3 JNZ L4 ;不是L3则跳到L4MOV AL,08H ;为了后面用来与FREQ_LIST 数据段中数对应。JMP KCODE ;强制跳转到KCODEL4: TEST AL,08H ;检验按下键是否在L4 JNZ NEXT ;不是L4则跳到NEXTMOV AL,0CH ;为了后面用来与FREQ_LIST 数据段中数对应。KCODE: ADD AL,CL ;实现AL与CL的无进位加法 MOV DL,2D MUL DL ;将AL乘以2结果保存到AX中 PLAY: MOV SI,OFFSET FREQ_LIST ; 使SI指向 FREQ_LIST的首地址 ADD SI,AX ;通过SI加AX 实现指针SI的移动 MOV DX,0FH MOV AX,4240H ;被除数为0F4240H DIV WORD PTRSI ;除数为SI所指的数据 MOV DX,MY8254_A ;将8255的A口地址赋给DX OUT DX,AL ;输出商的低4位 MOV AL,AH OUT DX,AL ;输出商的高4位 MOV CX,8D ;输入计数值CX NEXT3: CALL DALLY ;调用延时子程序DALLY CALL DALLYCALL DALLYCALL DALLYCALL DALLYLOOP NEXT3 ;CX不为0重复执行NEXT3 MOV DX,0FH MOV AX,4240H ;被除数为0F4240H MOV SI ,30D DIV WORD PTRSI ;除数为SI=30所指的数据 MOV DX,MY8254_A ;将8255的A口地址赋给DX OUT DX,AL MOV AL,AH OUT DX,AL ; 实现静音,结束一个音符的发音 JMP BEGIN ;跳转到BEGIN,重复扫描NEXT: INC CL ;使CL加1,为了后面用来与FREQ_LIST数据段中数对应 MOV AL,CH TEST AL,08H JZ KERR ;无键按下时跳转到KERR ROL AL,1D ;向左移位 MOV CH,AL JMP COLUM ;强制跳转到COLUMKERR: JMP BEGIN ;跳到BEGIN重新开始扫描键盘扫描子程序CCSCAN: MOV AL,00H MOV DX,MY8255_A OUT DX,AL ;使8255芯片A端口输出为0,既使x1、x2、x3、 X4为0 MOV DX,MY8255_C IN AL,DX ;将从C端口输入的y1、y2、y3、y4送到AL中NOT AL ;将AL取反 AND AL,0FH ;将AL前4位清零RET延时子程序DALLY: PUSH CX ;将CX压栈 MOV CX,000FH T1: MOV AX,0009FHT2: DEC AX ;使AX减1JNZ T2 ;AX不为0重复T2LOOP T1 ;CX不为0重复T1POP CX ;将CX出栈RETCODEENDS ;代码段定义结束END START ;程序结束6 主要元器件介绍6.1 8255简介6.1.1 8255引线图 可编程并行接口8255引线图6.1.2 8255引脚功能RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也 通过数据总线传送。PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个位的数据输入锁存器。PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。PC0PC7:端口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 、和GND 6.1.3 8255的工作方式(1)基本输入/输出方式(方式0) 相当于三个独立的8位简单接口各端口既可设置为输入口,也可设置为输出口,但不能同时实现输入及输出 C端口可以是一个8位的简单接口,也可以分为两个独立的4位端口常用于连接简单外设(适于无条件或查询方式)方式0的应用 常使A端口和B端口作为8位数据的输入或输出口,使C口的某些位作状态输入(2)选通工作方式(方式1) 利用一组选通控制信号控制A端口和B端口的数据输入输出A口、B口作输入或输出口,C口的部分位用作选通控制信号A口、B口在作为输出和输入时的选通信号不同8255方式1的输出信号定义及时序图 8255方式1的输入信号定义及时序图方式1的应用 方式1主要用于中断控制方式下的输入输出 C口的8位除用作选通信号外,其余位可工作于方式0下,作为输入或输出口(3)双向传送方式(方式2) 双向输入输出方式-可以既作为输入口,又作为输出口只有A端口可工作在方式2下8255方式2的信号定义及时序图 方式2的应用 可使A端口作为双向端口用于中断控制方式当A口工作于方式2时,B口可工作于方式1(此时C口的所有位都用作选通控制信号的输入输出),也可工作于方式0(此时C口的剩余位也可工作于方式0)6.2 8254简介:6.2.1 简介8254具有3个独立的16位计数器,6种不同的工作方式。 计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当减为零时,通过OUT输出指示信号表明计数单元已为零。当作为定时器工作时,每当计数单元为零时,计数寄存器内容会自动重新装入 计数单元,而且CLK输入是均匀的脉冲序列,于是OUT输出频率是降低了的(相对于CLK信号频率)脉冲序列。 当作为计数器工作时,表明只关心在CLK端出现(代表事件)的脉冲个数,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。6.2.2 8254控制字格式8254的全部功能是由CPU编程设定的。CPU通过输出指令给8254装入控制字,从而设定其功能。8254控制字格式如下: D7 D6 D5 D4 D3 D2 D1 D0SC1SC0RL1RL0M2M1M0BCD 各位的功能见表1表4: 表1 SC1、SC0 计数器选择SC1 SC0选择计数器0 0选择0#0 1选择1#1 0选择2#1 1使用方法参见8254使用说明 表2 RL1、RL0CPU读写操作RL1 RL0操作类型0 0计数器封锁操作0 1读写计数器低8位1 0读写计数器高8位1 1先读写低8位,后读写高8位 表3 M2、M1、M0 工作方式选择M3 M2 M1计 数 工 作 方 式0 0 0方 式 00 0 1方 式 10 1 0方 式 20 1 1方 式 31 0 0方 式 41 0 1方 式 5 表4 BCD计数方式选择BCD数 码 形 式0十六位二进制计数1四位十进制 ( BCD ) 码计数7设计总结 紧张而又忙碌的课设过去了,在这周设计我得到了许多以前书本上学不道的知识,让我知道了微机在以后工作中的重要性,也是此次课设使我对微机原理产生了浓厚的兴趣,下面是我这一的感想与体会。我想微机原理课程设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。但是我想他也有它的独特指出,那就是让我们进入一个神奇的世界,那就是编程。对于很多学过汇编或者其他的类似程序的同学来说,这不算新奇,但是对于我来说真的新奇,很有趣,也是我有更多的兴趣学习微机原理和其他的汇编。学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。虽然我的程序不是做好的,但我已经尽我所能去做了,我没有什么遗憾了通过辅导老师的指导,同学们的相互帮助,我收获了很多,也通过设计增强了自己动手的能力,同时也对自己所学

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论