简易电子琴设计.docx
- 文档编号:4102166
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:15
- 大小:96.56KB
简易电子琴设计.docx
《简易电子琴设计.docx》由会员分享,可在线阅读,更多相关《简易电子琴设计.docx(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芯片的PB0—PB4,PA0—PA4它们分别与键盘单元的X1—X4,Y1—Y4相连,其中B口低4位为输出端,B口低4位1为输入端。
由它们对键盘单元进行扫描,并确定键值工作过程为:
先给所有列线输入低电平,然后读取行线,检测行线是否为低电平,如果有某条行线输出低电平,则说明该键盘有按键被按下,否则,说明无按键被按下.采用这种方法可以快速判断键盘是否有键按下。
在检查到有键按下后,再通过行扫描法判断按下的位置,从而确定按下的是什么键,经过计算得出计数器1#的初值。
3设计原理流程图
停止发声
无条件转移
程序结束
开始程序
定义8255,8254控制字
键 盘 扫 描
有无键按下
确定按键位置
键值送CPU处理取对应频率
时钟频率除对应频率得初始值
初始值送8254发出方波
调用延迟控制发音长短
4实际硬件接线图
系XD0
统∣
XD7
XA1
XA2
CLK
IOY3
IOW#
IOR#
D08254
∣
D7
A0
A1
CLK0
OUTO
CS
GATA0
WR
RD
电子发声单元SPK
+5V
5源程序清单及注释
MY8255_AEQU0600H
MY8255_BEQU0602H
MY8255_CEQU0604H
MY8255_MODEEQU0606H
MY8254_MODEEQU06C6H
MY8254_AEQU06C0H;进行宏定义
DATASEGMENT
FREQ_LISTDW441D,495D,556D,589D,661D,742D,833D,882D
DW262D,294D,330D,373D,402D,450D,494D,-1D
DATAENDS;建立数据段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;实现段寄存器DS的初始化
MOVDX,MY8255_MODE
MOVAL,81H
OUTDX,AL;写8255芯片的控制字实
现工作在方式0,A端口
和B端口输出,C端口输入
MOVDX,MY8254_MODE
MOVAL,36H
OUTDX,AL;使8254工作在方式3,
A口输入,运用计数器0,二进制方式
BEGIN:
CALLCCSCAN;扫描
JNZINK1;有键按下时跳到INK1
JMPBEGIN;没键按下时循环执行
BEGIN
确定按下键的位置
INK1:
CALLCCSCAN
JNZINK2;有键按下时跳到INK2
JMPBEGIN;没键按下时循环执行BEGIN
INK2:
MOVCH,0FEH;确定按下键在第一列
MOVCL,00H;将CL清零
COLUM:
MOVAL,CH
MOVDX,MY8255_A;将8255的A口地址赋给DX
OUTDX,AL;将CPU中的AL值送到8255
的A口中,即送到x1、x2、
x3、x4中
MOVDX,MY8255_C;将8255的C口地址赋给DX
INAL,DX;将C口的值送到AL中
L1:
TESTAL,01H;检验按下键是否在L1
JNZL2;不是L1则跳到L2
MOVAL,00H;为了后面用来与FREQ_LIST
数据段中数对应
JMPKCODE;强制跳转到KCODE
L2:
TESTAL,02H;检验按下键是否在L2
JNZL3;不是L2则跳到L3
MOVAL,04H;为了后面用来与FREQ_LIST
数据段中数对应。
JMPKCODE;强制跳转到KCODE
L3:
TESTAL,04H;检验按下键是否在L3
JNZL4;不是L3则跳到L4
MOVAL,08H;为了后面用来与FREQ_LIST
数据段中数对应。
JMPKCODE;强制跳转到KCODE
L4:
TESTAL,08H;检验按下键是否在L4
JNZNEXT;不是L4则跳到NEXT
MOVAL,0CH;为了后面用来与FREQ_LIST
数据段中数对应。
KCODE:
ADDAL,CL;实现AL与CL的无进位加法
MOVDL,2D
MULDL;将AL乘以2结果保存到AX中
PLAY:
MOVSI,OFFSETFREQ_LIST;使SI指向FREQ_LIST的首地址
ADDSI,AX;通过SI加AX实现指针SI的移动
MOVDX,0FH
MOVAX,4240H;被除数为0F4240H
DIVWORDPTR[SI];除数为SI所指的数据
MOVDX,MY8254_A;将8255的A口地址赋给DX
OUTDX,AL;输出商的低4位
MOVAL,AH
OUTDX,AL;输出商的高4位
MOVCX,8D;输入计数值CX
NEXT3:
CALLDALLY;调用延时子程序DALLY
CALLDALLY
CALLDALLY
CALLDALLY
CALLDALLY
LOOPNEXT3;CX不为0重复执行NEXT3
MOVDX,0FH
MOVAX,4240H;被除数为0F4240H
MOVSI,30D
DIVWORDPTR[SI];除数为SI=30所指的数据
MOVDX,MY8254_A;将8255的A口地址赋给DX
OUTDX,AL
MOVAL,AH
OUTDX,AL;实现静音,结束一个音符的发音
JMPBEGIN;跳转到BEGIN,重复扫描
NEXT:
INCCL;使CL加1,为了后面用来与
FREQ_LIST数据段中数对应
MOVAL,CH
TESTAL,08H
JZKERR;无键按下时跳转到KERR
ROLAL,1D;向左移位
MOVCH,AL
JMPCOLUM;强制跳转到COLUM
KERR:
JMPBEGIN;跳到BEGIN重新开始扫描
键盘扫描子程序
CCSCAN:
MOVAL,00H
MOVDX,MY8255_A
OUTDX,AL;使8255芯片A端口输出为0,
既使x1、x2、x3、X4为0
MOVDX,MY8255_C
INAL,DX;将从C端口输入的y1、y2、y3、y4送到AL中
NOTAL;将AL取反
ANDAL,0FH;将AL前4位清零
RET
延时子程序
DALLY:
PUSHCX;将CX压栈
MOVCX,000FH
T1:
MOVAX,0009FH
T2:
DECAX;使AX减1
JNZT2;AX不为0重复T2
LOOPT1;CX不为0重复T1
POPCX;将CX出栈
RET
CODEENDS;代码段定义结束
ENDSTART;程序结束
6主要元器件介绍
6.18255简介
6.1.18255引线图
可编程并行接口8255引线图
6.1.28255引脚功能
RESET:
复位输入线,当该输入端外于高电平时,所有部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。
RD:
读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,允许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、和GND
6.1.38255的工作方式
(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.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控制字格式如下:
D7D6D5D4D3D2D1D0
SC1
SC0
RL1
RL0
M2
M1
M0
BCD
各位的功能见表1~表4:
表1SC1、SC0-计数器选择
SC1SC0
选择计数器
00
选择0#
01
选择1#
10
选择2#
11
使用方法参见8254使用说明
表2RL1、RL0-CPU读/写操作
RL1RL0
操作类型
00
计数器封锁操作
01
读/写计数器低8位
10
读/写计数器高8位
11
先读/写低8位,后读/写高8位
表3M2、M1、M0-工作方式选择
M3M2M1
计数工作方式
000
方式0
001
方式1
010
方式2
011
方式3
100
方式4
101
方式5
表4BCD-计数方式选择
BCD
数码形式
0
十六位二进制计数
1
四位十进制(BCD)码计数
7设计总结
紧而又忙碌的课设过去了,在这周设计我得到了许多以前书本上学不道的知识,让我知道了微机在以后工作中的重要性,也是此次课设使我对微机原理产生了浓厚的兴趣,下面是我这一的感想与体会。
我想微机原理课程设计和其他课程设计有共同的地方,那就是不仅加深和巩固了我们的课本知识,而且增强了我们自己动脑,自己动手的能力。
但是我想他也有它的独特指出,那就是让我们进入一个神奇的世界,那就是编程。
对于很多学过汇编或者其他的类似程序的同学来说,这不算新奇,但是对于我来说真的新奇,很有趣,也是我有更多的兴趣学习微机原理和其他的汇编。
学习该门课程知识时,其思维方法也和其它课程不同,该课程偏重于工程思维,具体地说,在了解了微处理器各种芯片的功能和外部特性以后,剩下额是如何将它们用于实际系统中,其创造性劳动在于如何用计算机的有关技术和厂家提供的各种芯片,设计实用的电路和系统,再配上相应的应用程序,完成各种实际应用项目。
编写程序的过程中,体会最深的是子程序的调用和程序的条理问题,一个程序就算功能实现了,但是也要使主程序和子程序的条理分明,易读性高,才能算一个比较好的程序。
虽然我的程序不是做好的,但我已经尽我所能去做了,我没有什么遗憾了
通过辅导老师的指导,同学们的相互帮助,我收获了很多,也通过设计增强了自己动手的能力,同时也对自己所学到的知识作一个肯定。
学好这门课程在自己今后的学习和工作中都有很大的作用,对自己以后的帮助也很大.这次课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。
最后,敬请各位老师对本论文的缺点和不足之处提出宝贵的意见。
同时也向我的小组同学致,在本次的设计过程中他们给予了我们很大的帮助。
致
一个星期的微机原理课程设计结束了,我很顺利的完成了本次课程设计的题目,这次课程设计的完成与很多人对我的关心帮助是密不可分的。
首先我要感曲老师在为期一周的微机原理课程设计里为我的设计方案提供参考意见,指导我改正设计方案中的错误以及不厌其烦地解答我的问题,使我得以最终完成这次课程设计的题目。
感学校给我们安排了这次课程设计,使我们的动手能力有了很大的提高。
在理论与实践之间懂得了如何架桥,这样对我今后将大学所学的理论知识向实践的转变提供了指导性帮助。
与此同时要感我院图书馆的工作人员在我借指导书时对我的极大帮助,再次我衷心的你们!
最后再次对帮助过我的老师和同学表达最衷心的感!
参考文献
[1]周明德、本珊.微机原理与接口技术.人民邮电,2002.4
[2]吴产乐.微机系统与接口技术.华中科技大学,2004.4
[3]雷晓平、屈莉莉、罗海天.微机原理与接口技术.人民邮电,2006.5
[4]会敏.晋惠.微型计算机原理与接口技术应用.科学,2000.5
[5]王颐.微机原理及应用实验教程.:
大学,1998
[6]峰.微型计算机原理与汇编语言.电子工业,1997
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简易 电子琴 设计