键盘电子琴课程设计报告Word格式.docx
《键盘电子琴课程设计报告Word格式.docx》由会员分享,可在线阅读,更多相关《键盘电子琴课程设计报告Word格式.docx(25页珍藏版)》请在冰点文库上搜索。
![键盘电子琴课程设计报告Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/ea1bd72a-ff5a-45ed-9d5e-94e0d29896de/ea1bd72a-ff5a-45ed-9d5e-94e0d29896de1.gif)
8253定时器:
用于产生秒脉冲,其输出信号可作为中断请示信号送IRQ2。
8255并口:
用做接口芯片。
二、设计思想与原理
1.系统方案综述
从系统实现的功能上来看,简易电子琴的课程设计主要分为手动弹奏乐曲和自动播放音乐两大部分组成。
手动弹奏乐曲是根据PC机硬件键盘设置功能键并通过不同频率使其发出不同的声音就,即音阶,自动播放音乐则是通过中断的方法来实现。
从系统硬件结构上来看,我们主要使用到PC机、8086单片机、8253定时器芯片、8255可编程并行接口芯片、蜂鸣器等等。
将这些硬件电路有机地结合起来使之满足电子琴的实现硬件需要。
从系统软件设计角度来看,将电子琴的课程设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、中断发音程序模块等等。
此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲和自动播放音乐两部分的切换和启动。
从音乐产生原理方面来看,通过控制8253芯片定时器的定时时间产生不同频率的音频脉冲,从而驱动蜂鸣器发出不同音乐的声音。
用软件延时来控制发音时间的长短,控制节拍。
把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在存储器中,由程序查表得到定时常数和延时常数,分别用来控制8253定时器芯片产生的脉冲频率和发出该音频脉冲的持续时间。
因此,我们可以综合上述的方案设计原理,从软件和硬件两大部分进行有计划有步骤的系统分析和设计。
2.系统设计思路
(1)手动弹奏乐曲和自动播放音乐用PC机键盘来实现。
手动弹奏乐曲中PC机键盘的8个键分别设置不同的音符,同时用一个键作为中断控制程序的控制键,通过其可实现手动弹奏乐曲与播放音乐之间的切换。
(2)软件的设计主要包括PC机键盘扫描、音乐播放程序和手动弹奏程序。
此次程序设计主要分为两大块:
手动弹奏乐曲程序和自动播放程序。
两者之间用功能转换程序对其进行结合,并实现各功能的控制。
三、设计的具体实现
1.8253的基本用法
8253内部有三2个独立的16位减计数器(0#,1#,2#),每个均可单独设置工作方式。
每个计数器可用6种模式工作,在初始化时首先写控制字,选择工作方式,然后要正确地写入计数初值。
最常用的0、1、2、3四种方式。
8255A的基本用法
8255作为并行接口芯片,有3种工作方式:
方式0,方式1,方式2,方式0相当于可作无条件输入/输出方式,方式1和方式2将PC口的一些线作为状态线使用,相当于工作在查询方式或中断方式。
8255的PC口具有位控制功能,可以用指令将某条线单独置1或清0,利用此功能也可串行接收或发送数据。
注意:
8255有2条单元选的地址线,有4个端口地址,要能正确地完成与CPU的地址线、数据线、控制线的连接。
2.硬件设计
1.硬件电路的模块构成
硬件电路的设计及实现相对简单。
硬件电路PC机、8086单片机、定时器芯片8253、可编程并行接口芯片8255A、扬声器模块组成
2.具体说明
采用可编程并行接口芯片8255A的PA端口接8086的8个数据输出端口,利用8255A方式0,端口A输入方式,即AL=10010000B,利用中断调用DOS功能来调用并扫描PC机键盘。
利用可编程并行接口芯片8255A的PC端口连接七段共阴极数码管,来显示键入的不同音阶。
驱动控制扬声器利用8253与8255A共同执行。
利用8255A的PB0、PB1控制扬声器的开启、关闭。
利用定时器8253驱动发声,CPU通过对8253通道2(端口地址42H)进行编程,利用8253方式3以不同的脉冲频率产生不同的输出方波,方波信号通过滤波器、功率放大器使扬声器发声。
3.结构及功能说明
(1)单片机选用
8086单片机为Intel公司推出的16为微处理器,以后Intel公司生产的微处理器,均与其相同。
8086有16根数据线和20根地址线。
其可寻的的地址空间达2^20即1M字节单元。
其对外的数据线只有8根。
其接线相对简化。
本次课程设计采用8086单片机。
8086单片机的实际接口图如下图所示:
图.8086单片机的实际接口图
(2)扬声器模块的设计
电磁式蜂鸣器由振荡器、电磁线圈、磁铁振动膜片及外壳等组成。
接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。
振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
本系统设计的蜂鸣器与8255的PB1端口和8253的OUT2输出端口连接,当8255的PBO、PB1端口为11时蜂鸣器发出响声。
扬声器控制:
1)8253计数器2的输出控制扬声器的发声音调;
2)8253计数器2只能工作在方式3,才能输出一定频率的方波,经滤波后得到近似的正弦波,进而推动扬声器发声;
3)扬声器还受控于并行接口(8255A芯片);
4)必须使8255APB0和PB1同时为高电平,扬声器才能发出预先设定频率的声音;
关闭则是利用8255APB0和PB1同时为低电平,关闭与门,扬声器关闭。
(3)显示电路的设计
本设计所用显示电路七段数码管为共阴型,段码采用同相驱动,输入端加高电平,选中的数码管亮,位码加反相驱动器,位码输入端高电平选中。
(4)8253以及8255A芯片介绍
1.8253介绍
8253是24脚双列直插式芯片,+5V电源供电。
每个芯片内部有3个独立的计数器(计数通道),每个计数器都有自己的时钟输入CLK,计数输出OUT和门控信号GATE。
数据总线D0~D7:
为三态输出/输入线。
片选信号CS,读信号RD,写信号WR,他们为输入信号,低电平有效。
地址线A1、A0,接到系统总线A1、A0上。
计数器时钟信号CLK,作用是在8253进行定时或计数工作是,每输入1个时钟脉冲信号CLK,便使计数值减1。
计数器门控选通信号GATE,计数器输出信号OUT,作用是计数工作时,每来1个时钟脉冲,计数器减1,当计数器值减为0,就在输出线上输出一OUT信号,以示定时或计数以到。
图-38253引脚图
表8253端口地址
信号线
寄存器
编址
输出端YO
0#计数器
FFE0H
1#计数器
FFE1H
2#计数器
FFE2H
控制寄存器
FFE3H
8253/8254内部有6个模块:
数据总线缓冲器,读/写逻辑,控制命令寄存器,计数器0,计数器1,计数器2。
数据总线缓冲器:
3态,双向8位寄存器和D0~D7相连。
读/写逻辑:
由CPU发来的读/写信号和地址信号来选择读出或写入寄存器。
控制命令寄存器:
接受CPU来控制字。
计数器:
8253有3个结构完全相同的计数器。
其内部由16为初值寄存器、减1计数器和当前计数值锁存器组成。
图3-18253内部结
2.8255A介绍
8255A是一个40引脚的双列直插式集成电路芯片.它具有三个8位口,其中A口和B口是单纯的数据口,供数据I/O使用。
而C口则既可以作数据口,又可以作控制口使用,用于实现A口和B口的控制功能。
数据传送中A口所需的控制信号由C口高位部分(PC7~PC4)提供,因此把A口和C口高位部分合在一起称之为A组;
同样理由把B口和C口低位部分(PC3~PC0)合在一起称之为B组。
1.8259A芯片的内部结构及引脚
中断控制器8259A是Intel公司专为控制优先级中断而设计开发的芯片。
它将中断源优先排队、辨别中断源以及提供中断矢量的电路集中于一片中。
因此无需附加任何电路,只需对8259A编程,就可以管理8级中断,并选择优先模式和中断请求方式,即中断结构可以由用户编程来设定。
在MD微机系统中,8259芯片工作于单片方式。
8259引脚图如图3.3,各引脚功能如下。
D7~D0——八条双向数据线;
WR(低电平有效)——写输入信号;
RD(低电平有效)——读输入信号;
CS(低电平有效)——片选输入信号;
A0——地址信号;
INT——中断请求信号;
INTA(低电平有效)——中断响应信号;
CAS0~CAS2——级联信号,形成一条专用8259A总线,以便多片8259A的级联;
SP/EN——从编程/允许级联。
在缓冲方式中,可用做输出信号以控制总线缓冲器的接收和发送。
在非缓冲方式中,作为输入信号用于表示主片还是从片;
IR0~IR7——外部中断请求输入线。
要求输入的中断请求信号是由低电平到高电平的上升沿(并保持高电平到CPU响应时为止)或者是高电平。
4.运行结果
四、软件设计
1.主程序的流程图
这里用汇编语言对接口进行编程控制。
程序模块主要包括8255A、8253的初始化、开关量的输入、扬声器的开启、关闭及程序的退出。
在使8253的初值计数与频率相对应有两种方法,一是利用表的操作,但这种操作不太容易实现,硬件的连接也比较麻烦,易出错;
所以我采用的是比较跳转的方式,
比较简单明了,容易理解。
程序中的模块关系见程序流程图。
五、系统操作说明
1.连接8253定时/计数器实验电路
运行并使其能定时/计数器功能,并产生方波
2.连接8255A并行口实验电路
运行并使其成功
3.写程序代码
4.装载程序
5.调试程序
6.调试成功,结束
六、结束语
本次课程设计是由本人和搭档共同完成,通过一星期微机接口的课程设计,我们对微机接口芯片有了更进一步的了解。
这次实验通过使用了8259A中断控制器、8253计数器、8255可编程并行接口实现了对实验板上的LED灯分别计时、分别控制。
由于这学期微机接口这门课学的并不是很好,所以在调试程序中出现了很多问题。
所以刚开始在做这个设计时,我们首先将以前做过的关于8259A中断控制器、8253计数器、8255可编程的实验重新做了一遍,对这些芯片有了更进一步的理解。
然后通过网上查阅了很多资料,总算了解了8259A中断控制器、8253计数器、8255可编程等芯片的操作方式,对整个课程设计也有了总体的轮廓,通过学过的知识以及做过的实验,最后有了圆满的结果。
通过本次课程设计我们学到了很多课堂没有涉及到的知识,极大地拓宽了我们的知识面,锻炼了能力,综合素质得到较大提高,我们感到收获不小。
也发现了大量问题,有些在设计过程中已经解决,有些还要待今后慢慢学习,只要学习就会有更多的问题,有更多的难点,但也会有更多的收获。
同时,也学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
希望综合运用微机原理、数字电路及微机接口技术的知识,获得一定的系统开发能力。
七.附录
源程序以及注释:
DATASEGMENT
INFO1
DB
0AH,0DH,'
Welcome
to
our
music
program!
'
INFO2
0AH,0DH,
*********Please
select!
*********$'
INFO4
*********Input
error!
***********$'
INFO5
*******Please
input
again!
******$'
MUSLIST
0AH,
0DH,
======================'
Press1
HuanLeSong'
DB
Press2
KaiXin'
Press3
XiaoBuWuQu'
Press4
Wonderful'
Press5
SCALE
PLAY
Press6
EXIT'
====================='
$'
MUS_FRQ1
DW
330,330,350,393,393,350,330,294
;
歌曲1频率
DW
262,
294,
330,
294
350,
393,
262
294,330,350,
330,262
393
-1
MUS_TIM1
8
DUP(100)
歌曲1节拍
7
DUP(100),200
5
DUP(100),50,50,2
100,50,50,4
MUS_FRQ2
3
DUP(330)
DUP(294),
392,
392
4
MUS_TIM2
6
2
DUP(100,100,200)
DUP(100)
DUP(100),400
MUS_FRQ3
440,
494,
524,
330
350,330,294,262,294,330,294,262,247,
262,-1
MUS_TIM3
200,
DUP(100),
200
400
MUS_FRQ4
330,392,330,294,330,392,330,
394,
330
330,392,330,294,262,294,
330,392,
262,262,220,196,196,220,262,294,330,
MUS_TIM4
DUP(200),100,100,
200,100,100,
DUP(200,200,100,100),
DUP(200,100,100),
TABLE
262,294,330,349,392,440,494,5258个音
NUMBDB0AH,0DH,'
Keyboardnumber1~8keysplayNotesofthescale'
Enter
or
Ctrl+C
exit'
DATA
ENDS
STACK
SEGMENT
PARA
STACK'
堆栈段
STA
DUP('
)
ENDS
CODE
SEGMENT
;
代码段
ASSUME
DS:
DATA,SS:
STACK,CS:
CODE,ES:
START:
MOV
AX,
DS,
AX
数据段赋值
MOV
ES,
附加段赋值
SS,
堆栈段赋值
SHOW
MACRO
B
宏
DX,
OFFSET
取B的偏移地址
AH,
09H
INT
21H
中断,显示字符串,以$结束
ENDM
显示欢迎语
LOP:
显示菜单
01H
INT
中断,输入回显,放于AL
CMP
AL,
36H
JZ
RETU
输入是否是6,是6退出CMPAL,31H
JNZ
B0
输入是1?
不是跳到B0
CALL
MUSIC1
是1,调用MUSIC1程序
JMP
EXIT1
转到重新选择
B0:
32H
C0
输入是2?
不是跳到C0
CALL
MUSIC2
是2,用MUSIC2程序
转到重新选择
C0:
CMP
33H
JNZ
D0
输入是3?
不是跳到D0
MUSIC3
是3,调用MUSIC3程序
D0:
34H
E0
输入是4?
不是跳到E0
MUSIC4
是4,调用MUSIC4程序
E0:
35H
EXIT
输入是5?
不是则出错
SHOW
NUMB
显示8个按键菜单
MUSIC5
是5,调用MUSIC5程序
EXIT1:
退到重新输入
JMP
LOP
EXIT:
显示错误,退到重新输入
RETU:
4C00H
中断,退出程序
PROC
MUSIC1子程序过程
LEA
SI,
取MUSIC1频率地址
BP,DS:
取MUSIC1节拍地址
FREQ1:
DI,
[SI]
频率地址给DI中
DI,-1
JE
END_MUS1
频率是-1?
是就结束播放
BX,
DS:
[BP]
BX就是每个节拍
GENSOUND
调用发声子程序
ADD
SI,2
ADD
BP,2
双字节操作,要加2
FREQ1
继续播放
END_MUS1:
RET
返回到调用处