课程设计简易电子琴设计.docx
- 文档编号:16618727
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:15
- 大小:75.78KB
课程设计简易电子琴设计.docx
《课程设计简易电子琴设计.docx》由会员分享,可在线阅读,更多相关《课程设计简易电子琴设计.docx(15页珍藏版)》请在冰点文库上搜索。
课程设计简易电子琴设计
一设计任务描述
1.1设计题目:
简易电子琴设计
1.2设计目的
通过本学期对微机原理的学习,掌握的知识还停留在理论的上。
但是这是一门实践性较强的课程,让学生在学完该课程之后,进行一次课程设计,使学生将课堂所学的知识和实践有机结合起来,初步掌握计算机应用系统设计的步骤和接口设计的方法,提高分析和解决实际问题的能力。
通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业标准,掌握现代设计手段和软件工具,并能以图纸和说明书表达设计思想和结果的能力。
通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯,牢固树立实事求是和严肃认真的工作态度。
具体要求如下:
(1)可以弹出7个音阶;
(2)弹奏简短音乐;
(3)通过改变键盘输入来改变8254输出频率,实现扬声器发音。
1.3设计要求
1、总体内容:
设计简易电子琴,能发出至少7种音阶;
2、接口设计:
根据题目和所用的接口电路芯片设计出完整的接口电路,并在实验系统上完成电路的连接和调试通过;
3、程序设计:
要求画出程序框图,设计出全部程序并给出程序设计说明和程序注释;
4、前期完成的实验有:
8255并行接口实验。
1.4简易电子琴
电子琴简单功能实现以及利用由8255芯片控制的小键盘(含数码管、键盘阵列)实现控制电子琴。
主程序由电子琴和键盘控制的两个程序有机组成,两个程序简单拼凑在一起是不能实现的。
经过实际调试和修改,将原电子琴程序改为2个子程序:
start(实现播放音阶)和delay(实现播放音阶时延时);将原键盘控制程序改为1个主程序:
ccscan(实现键盘扫描)。
各个子程序通过寄存器通信,寄存器存有当前输入的键盘码,同时为电子琴和键盘控制两子程序服务。
调试后,主程序能实现课程设计要求的功能。
二设计概要
2.1设计内容
本次课程设计的内容为简易电子琴的设计与实现,利用8255将键盘输出值返回CPU,CPU通过分析命令8254输出相应频率的方波波形,再经过扬声器发出声音。
由于PC计算机的时钟晶振为1.1931816MHz,可以利用微机实验箱里面的发生单元发出声音。
表2.1各音阶标称频率值:
音符
1
2
3
4
5
6
7
重音对应频率(Hz)
131
147
165
175
196
220
247
低音对应频率(Hz)
262
294
330
349
392
440
494
中音对应频率(Hz)
523
587
659
698
784
880
988
高音对应频率(Hz)
1064
1175
1318
1397
1568
1760
1975
2.2设计环境与器材
(1)PC计算机一台
用于对程序的编译测试等,实现对实验设备进行控制,提供整个程序的运行平台,并且收集和释放硬件信号,实现程序功能。
(2)微机原理实验箱一台
此设备提供了8255、8259等必要芯片。
并且能通过接受计算机传来的信息,实现相应的功能。
(3)导线若干条
用于电路和芯片之间的连接。
2.3主要芯片功能
2.3.18255主要功能
8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,并行接口是以数据的字节为单位与I/O设备或被控制对象之间传递信息。
CPU和接口之间的数据传送总是并行的,即可以同时传递8位、16位、32位等。
用+5V单电源供电,能在以下三种方式下工作:
方式0--基本输入/出方式、方式1--选通输入/出方式、方式2--双向选通工作方式。
8255的内部结构及引脚如图2.1所示:
图2.1内部结构及引脚
如图2.1所示,D0~D7为双向数据信号线,用来传送数据和控制字。
为读信号线,与其他信号线一起实现对8255接口的读操作。
通常接系统总线的
信号。
为写信号线,与其他信号一起实现对8255的写操作,通常接系统总线的
。
为片选信号线,当它为低电平时,才能选中该8255芯片,也才能对8255进行操作。
A0、A1为口地址选择信号线。
本次设计使其分别与系统总线的XA1、XA2相连,它们的不同编码可分别寻址3个口和一个控制寄存器,具体规定如下:
A1
A0
选择
0
0
A口
0
1
B口
1
0
C口
1
1
控制寄存器
RESET:
复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:
片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。
RD:
读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:
写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。
D0~D7:
三态双向数据总线,8255与CPU数据传送的通道,当CPU执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:
端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:
端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:
端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
这里的8255接口所占地址范围为0640H~067FH。
当对8255接口进行写操作时,各信号线的状态如下表所示:
CS
A1
A0
IOR
IOW
操作
0
0
0
1
0
写A口
0
0
1
1
0
写B口
0
1
0
1
0
写控制寄存器
0
1
1
1
0
写C口
8255在应用过程中,将不同的控制字装入芯片中控制寄存器,即可确定8255的工作方式。
8255在应用过程中,将不同的控制字装入芯片中控制寄存器,即可确定8255的工作方式。
8255的控制字由8位二进制数构成,各位的控制功能如下图:
图2.2置位/复位控制字格式
2.3.28254主要功能
8254具有3个独立的16位计数器,6种不同的工作方式。
计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当减为零时,通过OUT输出指示信号表明计数单元已为零。
当作为定时器工作时,每当计数单元为零时,计数寄存器内容会自动重新装入计数单元,而且CLK输入是均匀的脉冲序列,于是OUT输出频率是降低了的(相对于CLK信号频率)脉冲序列。
当作为计数器工作时,表明只关心在CLK端出现(代表事件)的脉冲个数,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。
三硬件接线图及流程图
3.1硬件接线图
系统的连线图主要由四个部分构成。
系统总线、8255并口控制器、键盘及数码管显示单元、8254芯片。
如下图所示:
12
.
图3.1硬件接线图
3.2流程图
主程序的流程图是对整个程序的逻辑的图象表示。
形象的描述了整个系统的工作过程。
图3.2系统实现流程图
四简易电子琴设计源程序及注释
MY8255_AEQU0640H
MY8255_BEQU0642H
MY8255_CEQU0644H
MY8255_MODEEQU0646H
MY8254_MODEEQU0686H
MY8254_BEQU0680H;进行宏定义
DATASEGMENT
FREQ_LISTDW441D,495D,556D,589D,661D,742D,833D,882D,
262D,294D,330D,373D,402D,450D,494D,-1D
DATAENDS;建立数据段
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX;实现段寄存器DS的初始化
MOVDX,MY8255_MODE
MOVAL,82H
OUTDX,AL;写8255芯片的控制字,实
现工作在方式0,A端口和C端口输出,B端口输入
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的B口地址赋给DX
OUTDX,AL;将CPU中的AL值送到8255
的B口中,即送到x1、x2、
x3、x4中
MOVDX,MY8255_B;将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;检验按下键是否在L23
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_B;将8254的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_B;将8254的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芯片B端口输出
为0,既使x1、x2、x3、
X4为0
MOVDX,MY8255_B
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;程序结束
总结
通过这一周的课程设计使我更加深刻的认识到了微机原理的广泛应用,同时也体会到它的多样和多变性,让我对这门课程保持了深深的兴趣!
这一周的课程设计颇有收获,最重要的是让我能够更深刻的理解了书本上的知识,而且实际中的运用使得那些知识像活了一样地映入我的脑海。
对于8254和8255等芯片我原来只是停留在书本上的认识,并不能在实际中灵活应用。
刚开始进行课设的时候,看着那一片芯片实在不知道该怎么下手。
后来经过老师的热心指导和同学们的帮助我有了自己的思路,将课设进行了下去。
我的思路大概是这样的:
调整8254及8255的工作方式,并且进行编程,然后连线。
使得减胖的信号能够传到CPU里,通过CPU的计算控制8254芯片,最后8254芯片发出一定频率的方波传到发声装置,从而发出声音。
在设计的过程中,每当有一个新想法我就会进行实验,虽然失败的多成功的少,但我还是从中获得了知识。
而且再多的失败也打不倒我,因为我知道失败乃成功之母,实践出真知,只有在风雨过后的彩虹才是美丽的!
就这样,在多次的实验之后,我做出了自己的作品。
尽管还有些差强人意,但它还是我一点一滴做出来的。
一周的课程设计终于圆满的结束了,兴奋之余,我觉得这是我收获最多的一个课程设计。
因为原来的我真的是一个门外汉,通过老师的悉心讲解和自身的不断努力,反复查阅书籍,终于没有白白浪费这一周的时间,充实了自己。
感谢老师的谆谆教诲和悉心的指导,使学生更好的掌握了所学的知识,并为以后的学习打下了坚实的基础。
虽然我的课程设计结束了,但我对微机原理的学习还仅仅只是个开始,在今后的学习中,我会更加努力,在老师的带领下学好这门深奥的学科。
致谢
感谢所有在本次课设中帮助过我的人!
为期一周的微机原理课程设计已经结束了,在这一星期的课设中,我要非常感谢我们的指导教师王庆利老师和踪念品老师。
因为在他们的悉心的指导下,我才能够如此顺利的完成任务。
他们严肃的科学态度,严谨的治学精神,精益求精的工作作风,深深地感染和激励着我。
从课设任务的下达到最终完成,王老师和踪老师都始终给予我细心的指导和帮助。
他们的帮助不仅使我开阔了视野,拓宽了思路,增长了学识,也为我在今后的学习和工作方面打下了牢固的基础。
我还要感谢我的同学们,因为单凭我一个人无法任务的,面对困难大家共同讨论,协作完成。
正是有了他们的帮助和支持,我才克服了一个一个的困难,成功完成任务。
最后,我要感谢我们的指导老师王老师和踪老师,谢谢您们对我们的帮助和支持,再次向您们表示深深的谢意,由衷的对您们说一句:
“老师,您们辛苦了!
”
祝老师们在今后的工作生活中一帆风顺,事事顺心!
参考文献
[1]李伯成等《微型计算机原理及应用》陕西:
西安电子科技大学出版社,2006
[2]李兰友等《微型计算机原理与接口技术》北京:
清华大学出版社,2003
[3]郑学坚等《微型计算机原理及应用实验指导》北京:
清华大学出版社,2002
[4]朱玉春等《微机原理与接口技术》辽宁:
大连理工大学出版社,2004
[5]仇玉章等《微型计算机技术实验及指导教程》北京:
清华大学出版社,2003
[6]戴梅萼等《微型计算机技术及应用》北京:
清华大学出版社,2003
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 简易 电子琴 设计