计算机硬件课程设计 电子琴Word下载.docx
《计算机硬件课程设计 电子琴Word下载.docx》由会员分享,可在线阅读,更多相关《计算机硬件课程设计 电子琴Word下载.docx(49页珍藏版)》请在冰点文库上搜索。
心得体会4:
25
6.操作说明书 27
6.1连线要求 27
6.2使用电子琴弹奏乐曲以及使用各个子功能的方法 28
7.整体程序清单 29
Ⅰ
摘要
通过大三上学期对《计算机硬件技术》课程的学习,我们初步掌握了一些计算机硬件工作的基本原理、汇编语言程序设计方法,建立了微型计算机系统的整体概念,初步形成微机系统软硬件开发的能力。
为了更好的理解和掌握学习到的知识,也为了更深入的了解熟悉可编程定时器8254和8255,我们试图通过编程使8255识别输入键值,通过8254识别发声,达到通过按键控制扬声器发声频率的目的,从而模拟电子琴的工作原理。
由于本电子琴设计简单,方便改装用于其他实用领域,如报警器、门铃、儿童玩具等,具有一定的实用价值。
要完成一个简易的电子琴,要求我们利用相关已经学过的芯片连接成一个电子电路,并且通过自己用汇编语言编程,控制设计的电子电路实现电子琴的一些功能,比如通过高中低音键和音调键分别控制发出高低音的1、2、3、4、5、6、7音调,比如播放预先存储的歌曲,比如回放上一个弹奏的歌曲等。
本文首先介绍了设计目的、意义、任务及思路,接着简单介绍了各个元器件的工作原理,然后以流程图的形式展现了各程序的基本思路,再介绍了一些具体功能是如何实现的,在附录中还附带了完整的程序,最后描述了组员的心得体会。
1.设计目的与意义
1.1设计目的
计算机硬件技术课程设计是对所学课程内容的全面、系统的总结、巩固和提高的一项课程实践活动。
课程设计要求同学们熟悉汇编语
言的编程、连接、调试、运行等步骤,以及设计中所设计的相关软硬知识。
通过课程设计,一方面提高运用汇编语言变成解决实际问题的能力,另一方面使同学们更深入的了解计算机系统内部的有关知识,为以后的学习和系统开发奠定良好的基础。
1.2设计意义
通过课程设计要进一步锻炼在微型计算机应用方面的实际工作能力。
计算机科学是一门应用型学科,学习时必须紧密联系实际,要强调实际问题的能力。
通过设计学会面对一个实际问题时如何分析问题、收集资料并且如何将理论知识运用于实际生活中,解决实际问题。
2.课程设计的任务和思路
2.1设计任务
设计一个电子琴,以扬声器作为发声装置,以4X4小键盘作为输入装置,模拟电子琴的琴键和功能按键,嗲子清具有低、中、高三个音阶,能弹奏曲目在计算机硬件试验系统基础上,完成扬声器模块的设计,完成基本功能,并在此基础上完善并优化系统功能。
(1)按“1—7”中的任一数字键,则发出对应的中音;
(2)若按下“高音键”和“1—7”中的任一数字键,则发出对应的高音;
(3)若按下“低音键”和“1—7”中的任一数字键,则发出对应的低音;
(4)弹奏时要求能够区分节拍、音调、音阶和休止符。
2.2设计思路
电子琴的设计实际上就是要设计一个程序,通过识别按键,控制扬声器模块的振动频率,从而发出不同的音调。
扬声器模块是通过并行接口芯片8255和定时芯片8254来控制发音的,其电路连接方式如下图所示。
频率
OUT2
GATE2
CLK2 8254
PC8
1
8255A
扬声器模块
&
图1扬声器控制电路
扬声器是由8254通道2产生的方波信号驱动发声的。
要想让扬声器发声,除了电源和接地外,,还需要一个引脚给予振动频率才能正常工作。
同时当8255的PC7置1,,使得8254的GATE为高时。
OUT2引脚上才能产生一定频率的方波信号驱动扬声器,使扬声器发声。
因此,可以通过对8255的PC7的设置来控制扬声器的开通和关断,而其发音频率可以通过改变8254通道2的计数初值来控制。
因此设计程序的任务就是要通过识别按键来设置8255的PC7输出电平的高低,以及设置8254通道2计数初值。
在实际的课程设计中,因为计数初值的设置、8254的CLK频率的选择等原因,我们给予8254用于参与计算高低中音的程序频率和实际OUT2口输出的驱动频率有
点不同,以下两表分别为OUT2口输出频率和程序中用于计算的频率:
音符
2
3
4
5
6
7
频率(低)
131
147
165
175
196
220
247
频率(中)
262
294
330
349
392
440
494
频率(高)
524
588
660
698
784
880
988
表一:
OUT2口输出的驱动频率
101
112
125
134
151
167
186
202
224
250
268
302
334
372
402
448
500
536
604
668
744
表二:
程序中参与计算8254计数初值的频率
3.硬件工作原理
3.18255工作原理
8255是Intel公司生产的可编程并行I/O接口芯片,有3个8
位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片
(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
8255的内部结构图如图2所示,它有3个数据端口,分为两组,
A组由A口和C口高四位组成,B组由B口和C口低四位组成。
其方式控制字如图3所示。
图28255内部结构图
图38255控制字
3.28254工作原理
8254 芯片是一款使用十分广泛的可编程定时,计数芯片,其主要功能是定时和计数的功能。
人们所使用的微机内的动态存储器刷新电路、系统日时钟的技术以及发声系统的声源都是由8254芯片来参与完成工作的。
每个8254芯片有3个独立的16位计数器通道,每个计数器有6中工作方式,都可以按二进制或十进制(BCD码)计数。
8254芯片主要由数据总线、缓冲器、读写逻辑控制字、寄存器、计数器四部分组成。
其中当计数器工作在方式3时,输出信号为方波信号。
图48253内部结构图
图58253控制字格式
8254的通道0,通道1,通道2,控制口的端口地址分别为:
300H,304H,308H,30CH。
因为扬声器是由通道2来控制的,故应选择通道2,工作方式选为方式3,输出的信号则为方波信号。
3.3扬声器模块工作原理
扬声器模块式有8254以方式3产生的方波信号驱动发声的。
该发声驱动系统由8255的PC7口经控制8254的GATE电平高低控制定时计数开始与结束的。
3.4三色LED数显
8255A并行模块中共有4片8255A芯片,每个8255A芯片的输出控制了两个共阳极8段LED,通过PCI总线接口与其相连,下面为电路图和端口地址,字型码和LED显示颜色选择表格
3.54X4非编码键盘
在拓展的实验板上有4行4列非编码键盘,按键的行、列信号用过插孔引出,行信号通过插孔P0-P3引出,列信号用过插孔Q0-Q3引出,4X4非编码键盘电路图如下图所示。
4.功能说明
4.1总体功能说明
8254的A口与B口分别连接4X4键盘的行与列,从中读取键值,确定音符,1—7按键分别对应1—7音符。
C口连接两个开关,读取选择的音阶,若K1K2=01则为高音,若K1K2=01则为低音,否则为中音。
8255根据选择的音符与音阶根据音符频率表确定需要的发声频率Hz送给8254。
8254的CLK频率为3MHz,由N=3MHz /Hz确定
8254计数初值N。
8254工作在方式3,通过OUT 口以方波形式将发声频率传给发声模块。
发声模块通过不同的频率选择不同的音符与音阶发声。
当不需要发声时,使8254的GATE为低电平。
4.1.1主程序说明
程序开始运行后,首先读取开关状态,若没有键按下,则进入弹琴子程序,否则判断是回放还是放音键。
若为回放键,则进入回放子程序,否则进入播放子程序。
进入子程序后,判断是否结束或中断。
若不是则重复运行子程序,否则重新读取开关。
主程序的流程图如下图所示:
4.2弹奏功能说明
图6主程序流程图
开始
读取开关
回放
是否有键按下
是
是播放还是回放
否
播放
进入弹琴子程序
进入播放子程序
进入回放子程序
是否结束或中断
首先根据音符音阶表建立音阶表LOW、MID、HIGH。
根据K1K2选择高中低音,由LEA指向相应表。
再根据8255读取按键值,若没有按键按下,则重新开始选择音阶读取键值,若有键按下则根据键值选择偏移地址放入SI中,从而准确判断选择发音频率,送往扬声器。
再令GATE为高电平,开启扬声器发声。
发声时不断扫描键盘和功能键,若有键盘键按下则重新根据相应的音符发声,若有功能键
按下则关闭扬声器。
4.2.1音符选择
扬声器发音的频率是由8254产生方波的频率决定的,而方波频率又是由通道的计数初值来决定的,因此可以通过改变通道的计数初值来实现变调功能。
计数初值N=时钟频率/音阶频率,时钟频率为3MHZ,可以将相应音调对应的时钟频率存入内存单元,当选择相应的音调时,计算计数初值时,采用对应的时钟频率值,
4.2.2音阶选择
高中低音阶主要是三组频率不同的音符,因此可以通过建立三个音阶表LOW、MID、HIGH。
根据开关情况确定由LEA指向相对应的表,再调用发声子程序,即可发出不同音阶的声音。
4.2.3弹奏实现
已提前选择音阶,即已选择好该指向哪个音符表。
由8255扫描按键值,根据扫描确定按得是哪个键,由此确定偏移地址并放入SI中,然后通过查表得其相应频率值,求得计数初值,然后将计数初值送入8254的通道2,最后调用发声子程序即实现弹奏功能。
4.2.4流程图
弹奏功能流程图如下:
选择音阶
开扬声器
读取键值
读键值
是否有其他功能、
音符键被选择
选择发声频率
是否为功能键
送扬声器
关扬声器
结束
图7弹奏功能流程图
4.3回放功能
回放功能的实现与歌曲播放功能的实现原理相近,不同的是用来存放声音所键的表里并不会预先存储歌曲,而是每按下一个音符键时就将对应的频率存放到该表里。
当弹奏结束后开通K2时,与歌
曲播放功能一样取出频率与节拍计数值,调用发声子程序,即可演奏刚刚弹奏的歌曲。
当K4为1时,调用回放子程序,回放子程序的流程图如下图所
示:
选择固定节拍
将音阶、音符
频率调入SI中
调用发音子程序
是否结束
图8音乐播放子程序流程图
首先选择的固定的节拍,再将相应频率调入SI中,在调用发音程序发现,并判断是否结束,若不结束,则重新调入频率,重新发
音。
4.4歌曲播放功能
预先存储《欢乐颂》歌曲,建立了两个表,一个存放歌曲对应的频率,一个存放节拍。
程序从频率表中依次取出音符对应的频率送给SI寄存器,同时取出对应的节拍计数值送给BX寄存器,在调用发声子程序,即可演奏出歌曲。
当频率为0时结束程序。
选择歌曲
将音符。
音阶对应
平率SI中
对应节拍调入BP中
调用发音程序发音
选择呢下一个
音符和节拍
当K3为打开时启动播放功能,可以播放预先存储的歌曲,其流程图如下:
图9歌曲播放子程序流程图
根据选择的歌曲将音符、音阶对应的频率调入SI中,对应节拍放入BP中,在调用发音子程序,根据SI与BP发出对应的声音,每发出一个声音判断歌曲是否结束,若还未结束则选择下一个音符、音阶、节拍调入,若结束则关闭扬声器,结束放音。
4.5显示功能
显示功能调用了控制三色led的第一片8255,其地址片选为200H,当每一个音符被按下的时候,我们调用8255控制着两个三色
led给出相应的显示。
为弹奏的子功能时,第一片三色led用A来显示,低音显示绿色、中音显示黄色、高音显示红色,第二片用来显示被按下的对应的音符;
为放音子程序时显示B,第二片显示相应的音符;
当为回放子程序的时候两片合起来显示C0。
其程序流程图对应如下:
读取功能键
显示功能符号
是否有音符响起
显示音符符号
图10显示子程序流程图
5.组员心得体会
重庆大学自动化学院计算机硬件课程设计电子琴
耗时两周,很坑,正好占据考研时间,真TM贱本实验相当成功,按键灵敏,音乐准确
程序由大神亲自编写
唐丹老师相当好,既可爱又漂亮要求也不严要是答辩碰上黄勤,等着死吧
欢迎学妹垂询!
!
QQ 2725714501
祝学长考研成功!
6.操作说明书
6.1连线要求
端口地址连接:
第五片8255A片选与320H相连;
8254片选与
300H相连。
8255与输入设备:
第5片8255A的PA0-PA3与键盘行信号P0-
P3连接;
第5片8255A的PB0-PB3与键盘列信号Q0-Q3连接;
第
5片8255A的PC0-PC3与开关K1-K4连接。
8254连接:
GATE2与PC7口连接;
CLK2与3MHz 相连;
OUT2与扬声器输入口相连。
扬声器:
正电源与实验板的+5V相连接;
接地端与实验板的GND
连接。
连线后设备全貌:
6.2使用电子琴弹奏乐曲以及使用各个子功能的方法
弹奏功能:
全速运行之后,当K2K1为10时(扳上为1,扳下为0),按下键盘的1-7按钮则会对应发出低音部的键盘1-7的声音;
当K2K1为01是,按下键盘的1-7按钮则会对应发出高音音部的键盘1-7的声音;
当K2K1为非以上情况时,按下键盘的1-7按钮则会对应发出中音部的键盘1-7的声音。
并且其实实验板上排的三色LED会显示为A模式,且弹奏的音符对应的简谱符号也会现实,而且根据其所属音节的不同,为不同的颜色;
其中红色为高音,黄色是中音,绿色为低音。
乐曲《欢乐颂》播放示范:
当将K3开关板上时,则会自动循环播放歌曲,且三色LED首位会现实为B,扳下则停止播放,并恢复到弹奏功能模块工作方式。
弹奏回放功能:
在弹奏不超过100个音符的时候,可以回放所弹音符,但是注意是没有记录节拍信息的。
7.整体程序清单
.486
PORTAEQU320HPORTBEQU324HPORTCEQU328HCTRL EQU32CHPORTA4EQU300HPORTB4EQU304HPORTC4EQU308HCTRL4 EQU30CH
CODE SEGMENTUSE16ASSUME CS:
CODEORG1000H
BEG:
JMPSTARTHFDINGWEIDW?
HFQISHIDW?
HFZHONGZHIDW?
HFBIAOZHIDW?
GONGNENGDB?
YINFUDB?
PINLVDW?
PANDUANDB?
SHANGYINDB?
SHANGGONGDB?
DENGZHIDW?
LOWDDW101,112,125,134,151,167,186;
3MHZ时钟信号
MID DW202,224,250,268,302,334,372
HIG DW402,448,500,536,604,668,744
HUANLE DW250,250,268,302,302,268,250,224
DW202,202,224,250,250,224,224
DW250,250,268,302,302,268,250,224
DW202,202,224,250,224,202,202,0JIEPAI DW8DUP(25)
DW4DUP(25),50,2DUP(25)DW8DUP(25)
DW4DUP(25),50,2DUP(25)HUIFANGDW1DUP(50H)JIEPAI2DW8DUP(50H)
START:
KSCAN1 PROCNEAR ;
主程序,用于扫描功能,并且调用相关的程序
PUSHCX ;
从这开始就是初始化的一些东西,包括8255的初始化、回放、三色
LED的初始化
MOVDX,CTRLMOVAL,91H
OUTDX,AL
MOVCX,20H;
回访的初始化LEASI,HUIFANG
CHUZHI:
MOVAX,0000H
MOVWORDPTR[SI],AXINCSI
INCSI
LOOPCHUZHI
LEASI,HUIFANG
MOVHFBIAOZHI,0000HMOVHFDINGWEI,SIMOVHFQISHI,SI
MOVSI,HFQISHI ;
做出回放地址的起始点
MOVAX,HFQISHI ;
做出回放地址的终止点ADDAX,100H
MOVHFZHONGZHI,AX
CHUDENG:
;
三色led的初始化
MOVDX,20CH
MOVEAX,80808080HOUTDX,EAX
MOVDX,200HMOVAL,88HOUTDX,AL
MOVDX,204HMOVAL,0C0HOUTDX,AL
MOVDX,208H
MOVEAX,0F0F0F05HOUTDX,EAX
RECEIVE:
形成功能代号,便于下面选择功能MOVDX,PORTC
INAL,DXANDAL,0FHCMPAL,0FH
CALLFNDKEY1MOVCL,GONGNENG
MOVSHANGGONG,CL
CMPGONGNENG,01HJZRELOP1
CMPGONGNENG,02H
JZRELOP1
CMPGONGNENG,03HJZRELOP1
CMPGONGNENG,04HJZRELOP2
CMPGONGNENG,08HJZRELOP3
RELOP1:
CALLGONGDENGCALLTANQINJMPRECEIVE
RELOP2:
CALLGONGDENGCALLGEQU
JMPRECEIVERELOP3:
CALLGONGDENGCALLHUIF
JMPRECEIVE
;
处理完毕之后,返回继续读取功能选择
POPCXRET
KSCAN1 ENDP
KSCAN2 PROCNEAR ;
寻找对应的1-7音符的按键是否按下的子程序,把得到的音符值传给YINFU
MOVCX,02H
MOVBL,0FDH ;
从Q1列开始扫描
LOP3:
MOVAL,BLMOVDX,PORTBOUTDX,ALMOVDX,PORTAINAL,DX
ANDAL,0FHCMPAL,0FHJZLOP4
CALLFNDKEY2JMPLOP5
LOP4:
RORBL,1LOOPLOP3
MOVYINFU,00H;
如果没有音符键按下则置YINFU为00H
LOP5:
RETKSCAN2 ENDP
FNDKEY1PROCNEAR ;
形成功能键的键值音CMPAL,00H
JZ FK1LOP3CMPAL,01HJZ FK1LOP1CMPAL,02HJZ FK1LOP2CMPAL,03HJZ FK1LOP3CMPAL,04HJZ FK1LOP4CMPAL,08HJZ FK1LOP5
MOVGONGNENG,00HJMPOVER
FK1LOP1:
MOVGONGNENG,01HJMPOVER
FK1LOP2:
MOVGONGNENG,02HJMPOVER
FK1LOP3:
MOVGONGNENG,03HJMPOVER
FK1LOP4:
MOVGONGNENG,04H
JMPOVERFK1LOP5:
MOVGONGNENG,08HJMPOVER
OVER:
RET
FNDKEY1ENDP
FNDKEY2PROCNAER