电子琴设计.docx

上传人:b****3 文档编号:4805338 上传时间:2022-12-09 格式:DOCX 页数:20 大小:210.22KB
下载 相关 举报
电子琴设计.docx_第1页
第1页 / 共20页
电子琴设计.docx_第2页
第2页 / 共20页
电子琴设计.docx_第3页
第3页 / 共20页
电子琴设计.docx_第4页
第4页 / 共20页
电子琴设计.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

电子琴设计.docx

《电子琴设计.docx》由会员分享,可在线阅读,更多相关《电子琴设计.docx(20页珍藏版)》请在冰豆网上搜索。

电子琴设计.docx

电子琴设计

 

微机原理课程设计报告

题目:

简易电子琴设计

学院(系):

武汉理工大学华夏学院信息工程系

年级专业:

电子信息工程1073班

学号:

10211807306

学生姓名:

张孝勇

指导教师:

甘泉

 

课程设计任务书

学生姓名:

张孝勇专业班级:

电信1073班

指导教师:

甘泉工作单位:

华夏学院

题目:

简易电子琴的设计

初始条件:

1.运用所学的微机原理和接口技术知识;

2.微机原理和接口技术实验室的实验箱设备。

要求完成的主要任务:

(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)

使用汇编语言设计一个能够用键盘运行的电子琴,(实现一个以上功能):

1.弹奏:

用户每按一个键盘琴键就弹奏相应的音符;

2.演奏:

按下键盘上某一个指定的建后自动弹奏预存琴谱功能;

3.变调:

按下键盘上某一指定键后,再弹奏和演奏时琴键相应的音符频率变高;按下另一指定键后,再弹奏和演奏时琴键相应的音符频率变低;

4.严格按照课程设计说明书要求撰写课程设计说明书。

时间安排:

序号

阶段内容

所需时间(天)

1

设计思路、原理电路设计

1

2

编程,调试

3

3

撰写课程设计报告

1

合计

5

指导教师签名:

年月日

系主任(或责任教师)签名:

年月日

 

一、摘要……………………………………………………………4

二、课题设计任务…………………………………………………5

2.1课程设计环境………………………………………………………5

2.2设计任务…………………………………………………………5

三、方案设计………………………………………………………6

3.1方案的论证与比较…………………………………………………6

3.2方案确定…………………………………………………………6

3.3主要芯片功能介绍…………………………………………………6

3.5硬件电路设计………………………………………………………9

四、软件设计………………………………………………………10

4.1主程序流程图…………………………………………………10

4.2发声程序设计…………………………………………………11

4.3按键程序设计…………………………………………………12

4.4声调定义……………………………………………………13

五、系统电路的安装与调试………………………………………14

5.1硬件调试………………………………………………………14

5.2软件调试………………………………………………………14

5.3调试过程………………………………………………………14

六、设计体会与小结………………………………………………15

七、参考文献………………………………………………………16

八、附录……………………………………………………………17

8.1完整电路图………………………………………………………17

8.2完整程序…………………………………………………………17

 

一、摘要

本文主要介绍了现代微机原理与接口技术的应用----简易电子琴系统的设计与实现过程的设计。

电子琴是我们日常生活接触的比较多的电子器件,因此掌握他的基本原理对于我们专业技术的学习有很好的提升作用。

系统采用8086微处理器作为处理器和可编程的8255A芯片为主设计简易电子琴。

设计重点在于产生特定频率的脉冲从而驱动蜂鸣器发出相应的声音。

本次设计主要使用8255作为普通IO端口产生相应频率脉冲,通过实验计算得计算机系统的程序执行时间长度,编写一定时长的延时函数。

便可在特定时长内改变8255某个输出口的电平状态,从而获得相应频率值的脉冲信号。

将并行接口芯片8255的B端口连接上按键,编写按键查询函数设定相应按键功能,当查询到按键时便可执行相应的发声程序,即弹奏相应音符,或发出特定的乐曲。

并在发声的过程中穿插查询按键函数,当查询到相应的按键后改变声调数据,实现音调的改变。

从而实现电子琴的设计。

 

 

二、课题设计任务与要求

2.1课程设计环境:

1.运用所学的微机原理和接口技术知识;

2.微机原理和接口技术实验室的实验箱设备。

①唐都实验箱TDN86/88

②wmd86软件

2.2设计任务:

使用汇编语言设计一个能够用键盘运行的电子琴,(实现一个以上功能):

1.弹奏:

用户每按一个键盘琴键就弹奏相应的音符;

2.演奏:

按下键盘上某一个指定的建后自动弹奏预存琴谱功能;

3.变调:

按下键盘上某一指定键后,再弹奏和演奏时琴键相应的音符频率变高;按下另一指定键后,再弹奏和演奏时琴键相应的音符频率变低;

 

三、方案设计

3.1方案的论证与比较

方案一、利用可编程定时/计数器接口芯片8253和可编程并行接口芯片8255A控制产生我们所需的频率。

8253可编程定时/计数器是Inter公司生产的通用外围芯片之一。

它有3个独立的十六位计数器,计数频率范围为0-8MHz。

它所有的计数方式和操作方式都通过编程控制。

系统中,8253的0通道输出线与8259的0中断请求线,作为实时钟中断信号。

1通道入口接1.8432MHz的信号源,输出接8251的收发时钟端,供串行通迅使用,这里的1计数器仅当作一个分频器使用。

2通道以排针形式引出,开放给用户使用。

因此我们可以使用8253的2计数器产生相应的频率脉冲信号,连接到蜂鸣器电路。

8255芯片连接按键,编写相应的按键查询程序,当查询到不同按键按下时,进入相应的子程序,控制计数器8253发出不同频率段的脉冲信号输出给蜂鸣器,从而产生相应的音符。

方案二、使用可编程并行接口芯片8255A为主体电路获得相应音频信号。

通过实验计算得计算机系统的程序执行时间长度,编写一定时长的延时函数。

便可在特定时长内改变8255某个输出口的电平状态,从而获得相应频率值的脉冲信号。

将并行接口芯片8255的B端口连接上按键,编写按键查询函数设定相应按键功能,当查询到按键时便可执行相应的发声程序,即弹奏相应音符。

3.2方案确定

方案一需要使用8253和8255两款主体芯片,而方案二只需要一个8255就可以实现所有的电子琴功能,电路连接简单。

方案一由于使用计数器8253作为脉冲产生电路,其产生频率稳定,而且编写8253的程序也较为简单。

使用8255产生一定频率脉冲,需要我们精确计数软件执行时间,并编写相应的延时程序,从而得到我们所需要的频率脉冲输出。

编写程序较为复杂。

考虑到我们本次课程设计目的就是让我们熟悉微机原理技术,并以此提高我们的编写汇编语言的能力,故本次设计采用方案二,即利用8255作为主体芯片设计简易电子琴。

3.3主要芯片功能介绍

本次电子琴系统主要用到的芯片有可编程并行接口芯片8255A和74LS00,以及八个按键。

8255可编程外围接口芯片是Intel公司生产的通用并行I/0接口芯片。

8255A芯片中包含3个8位端口:

A口,B口和C口。

这3个端口均可作为CPU与外设通信时的缓冲器或锁存器。

一般来说,它们作为缓冲器使用时,就是输入接口;作为锁存器使用时,就是输出接口。

8255的内部结构如图7-1所示。

2.8255A的编程

所谓8255A的编程,就是用户在使用8255A前,可用软件来定义端口的工作方式,选择所需要的功能。

掌握8255A编程是正确使用该芯片的前提,为此须先了解8255A的控制命令。

(1)8255A的方式控制字

这是一个8位的控制字,代表的信息非常丰富,上面提到8255A内部的3个端口位A、B两组,因此方式控制字也就相应地分成两个部分,分别控制A组和B组,其格式如下:

位该控制字的标志。

A组由

组成。

其中

为工作方式选择,见表1;

位A口的输入、输出选择,见表2;

位C口高4位的输入、输出选择,见表3。

B组由

组成。

其中

为工作方式选择,见表4;

为B口的输入/输出选择,见表5;

为C口的低四位的输入/输出选择,见表6。

方式控制字未规定C口的工作方式,只定义了C口数据的传输方向,这就表明C口要么作为联络线使用,要么只工作在方式0。

3.系统中的8255芯片

8255的数据线片选信号线、地址线、读写控制线等分别与系统总线相连,其A、B、C三个端口以排针形式引出,供8255实验使用,其线路如图2所示,

本次课程设计实验室中使用的TDN86-88微机实验箱系统中的8255A芯片各个端口地址如表7所示。

表7系统中8255端口地址

信号线

寄存器

编址

I0Y3

A口

60H

B口

61H

C口

62H

控制寄存器

63H

3.5硬件电路设计

根据8255A芯片的功能我们设计的简易电子琴系统如图

我们将使用8255A芯片的A口与B口。

8255A芯片A端口定义为输出端口,产生我们所需要的音频脉冲输出。

由于8255A芯片作为普通I/O口时输出电流有限,故在其输出端连接一个与非门74LS00以增加输出驱动力。

将74LS00的两个输入管脚连接在一起作为输入端便构成了一个非门。

在试验箱上电但未运行程序的情况下,8255A为未定义的状态。

实验得到若将PA0端口连接在蜂鸣器电路输入端,蜂鸣器连续发出声响。

说明此时,8255A芯片的初始态被蜂鸣器电路认为为高电平。

连接上74LS00,将8255A芯片的高阻态拉低为低电平,蜂鸣器便不再发声。

8255A芯片B端口定义为输入端。

该端口连接8个按键,按键的一端连接在地上,另一端通过5.1KΩ电阻后连接在+5V电源上,并用插针引出,那么初始状态按键输出为高电平,当按键按下后变为低电平。

 

四、软件设计

4.1主程序流程图

根据设计要求

4.2发声程序设计

我们将发声程序定义为一个过程子程序soundproc,其调用格式为:

movsi,re;si寄存器传递不同音调所对应的数据

callsound;调用指令

这样当我们需要蜂鸣器发出不同音调音时,只需将不同音调所对应的数据传递给si寄存器后调用sound子程序便能使蜂鸣器发出我们所需的声音。

整个发声程序如下所示。

soundprocnear;定义声音过程子程序。

movdx,200h

subdx,si;将200h减去si寄存器中内容后送人dx寄存器

g1:

movbx,si;si寄存器中内容送人bx寄存器,供voice使用

callvoice;调用voice程序,

decdx;dx寄存器减一,即dx值决定调用voice次数

jnzg1

inal,61h;查询B端口按键情况。

cmpal,11111110b;判断K1是否有按键按下。

jnza1;若无,正常执行程序。

jza2;若K1按键按下,停止发声进入主函数

cmpal,11111101b;判断K2键按下

jnza1;若无,正常执行程序

jza3;

a3:

addbx,100h;若K2键按下,bx值加100h,使得声音变调。

jmpa1

a2:

callstart

a1:

ret

soundendp;过程结束

voiceprocnear;定义voice过程程序,使PA0口发出高低脉冲。

moval,00h

out60h,al;PA0输出低电平

movcx,bx;将bx寄存器中内容传递给cx寄存器

calldelay;调用延时程序,时长由bx寄存器中内容决定

moval,01h

out60h,al;PA0输出高电平

movcx,bx

calldelay;调用同样时长延时程序

ret

voiceendp;过程结束

delayprocnear;定义延时过程程序。

delay1:

loopdelay1

ret

delayendp

4.3按键程序设计

startprocnear

moval,82H;8255A初始化,控制字寄存器为10000010,

out63h,al;A端口0方式输出,B端口0方式输入,C端口输出

moval,01h

out60h,al

next:

inal,61h;查询B端口按键状态,进入相应发声程序。

cmpal,11111110b

jznext1

cmpal,11111101b

jznext2

cmpal,11111011b

jznext3

cmpal,11110111b

jznext4

cmpal,11101111b

jznext5

cmpal,11011111b

jznext6

cmpal,10111111b

jznext7

cmpal,01111111b

jznext8

jmpnext

next1:

movsi,doo1;若K1按键按下,发do音

callfz

jmpnext

next2:

movsi,re1;若K2按键按下,发re音

callfz

jmpnext

next3:

movsi,mi1;若K3按键按下,发mi音

callfz

jmpnext

next4:

movsi,fa1;若K4按键按下,发fa音

callfz

jmpnext

next5:

movsi,so1;若K5按键按下,发so音

callfz

jmpnext

next6:

movsi,la1;若K6按键按下,发la音

callfz

jmpnext

next7:

movsi,xi1;若K7按键按下,发xi音

callfz

jmpnext

next8:

callbrithday;若K8按键按下,播放生日歌

jmpnext

startendp

4.4声调定义

各音阶对应标准频率如表8所示

由于我们产生音频信号的方法是控制8255A芯片的A端口输出高低电平的时间来决定脉冲频率的,每次电平维持的时间由si寄存器的数值决定,通过计算得到当si寄存器中的内容为1时一次电平维持时间为3.8us,即一个周期的高低脉冲时间约为7.8us,频率约为128KHz,那么根据不同音阶的值便可计算得所需要传递的si寄存器的值。

计算公式为:

dooequ01e9h;低音音节1对应的输入数据

reequ01b3h

miequ0184h

faequ016eh

soequ0146h

laequ0122h

xiequ0103h

doo1equ0ffh;中音音节对应的输入数据

re1equ0dah

mi1equ0c2h

fa1equ0b7h

so1equ0a3h

la1equ090h

xi1equ081h

 

五、系统电路的安装与调试

5.1硬件调试

将写好的程序编译连接下载到实验箱后运行,发现蜂鸣器一开始就叫,检查发现实验箱上的非门开始输出为高电平,接到蜂鸣器就会使蜂鸣器发音。

改用单独的74LS04非门接到蜂鸣器就可解决这一问题。

5.2软件调试

1)8255A芯片初始化,A口输出,工作方式0;B口输入,工作方式0;由于硬件电路A端口PA0是经过一个非门后接到蜂鸣器,所以设置PA0输出一高电平到非门,使蜂鸣器开始时不会响。

2)按键按下后开始连续发声,由于我们的程序设计的是使程序一直处于查询按键状态,所以到我们检测到按键松开后需要编写一段延时函数,那么在一瞬间的按键过程中蜂鸣器可以发出一定时长的声音。

采用循环函数来延时,延时时间的长短由循环次数来控制。

3)跳转,转移指令跳出的范围太大,编译出现错误。

使用过程,也就是子程序设计,直接把一个要频繁要用到的函数打包成一个子过程,然后用CALL调用子过程就可以了,这样就可以避免使用过多的跳转和转移指令。

5.3调试过程

硬件调试,软件调试多次后可以实现不同的开关按下发出不同音,当按下某一确定的开关后演奏预存曲目,当按下另一指定的开关后演奏停止。

实现了电子琴弹奏和演奏的功能。

 

六、设计体会与小结

通过整整一个星期的摸索和编程,终于把程序完成了,对于微机原理与接口技术这门课程有了更深的了解,对8086,8253,8255等芯片有了更清楚的认识。

在和小组的成员一起讨论问题,分析问题,发现问题,解决问题的过程中发现了自己的很多不足,在编写程序时存在很大的局限性。

以后需要多多练习才能真正掌握汇编语言的编写。

总的来说我们的编程技术都有所提高。

要提高自己的编程能力,你必须亲自去体验、去设计、编辑、编译、调试、运行。

每一个程序员都是在失败、尝试、失败、尝试与收获中成长起来的。

 

七、参考文献

1】彭虎、周佩玲、傅忠谦.微机原理与接口技术(第二版).电子工业出版社,北京,2008.3

2】吴秀清、周荷琴.微型计算机原理与接口技术(第二版).中国科学技术大学出版社,2002.

3】沈美明,温冬禅.IBM-PC汇编语言程序设计.清华大学出版社.

4】钱晓捷、陈涛等.16/32位微机原理、汇编语言及接口技术(第二版).机械工业出版社.

5】周艳萍、邹伟著.汇编语言程序设计教程.清华大学出版社.

 

八、附录

8.1系统硬件原理图

8.2部分源程序与参考文献

dooequ01e9h;低音音节1对应的输入数据

reequ01b3h

miequ0184h

faequ016eh

soequ0146h

laequ0122h

xiequ0103h

doo1equ0ffh;中音音节对应的输入数据

re1equ0dah

mi1equ0c2h

fa1equ0b7h

so1equ0a3h

la1equ090h

xi1equ081h

datasegment

dataends

STACKSEGMENT

STACKENDS

CODESEGMENT

ASSUMEDS:

DATA,CS:

CODE,SS:

STACK

startprocnear

moval,82H;8255A初始化,控制字寄存器为10000010,

out63h,al;A端口0方式输出,B端口0方式输入,C端口输出

moval,01h

out60h,al

next:

inal,61h;查询B端口按键状态,进入相应发声程序。

cmpal,11111110b

jznext1

cmpal,11111101b

jznext2

cmpal,11111011b

jznext3

cmpal,11110111b

jznext4

cmpal,11101111b

jznext5

cmpal,11011111b

jznext6

cmpal,10111111b

jznext7

cmpal,01111111b

jznext8

jmpnext

next1:

movsi,doo1;若K1按键按下,发do音

callfz

jmpnext

next2:

movsi,re1;若K2按键按下,发re音

callfz

jmpnext

next3:

movsi,mi1;若K3按键按下,发mi音

callfz

jmpnext

next4:

movsi,fa1;若K4按键按下,发fa音

callfz

jmpnext

next5:

movsi,so1;若K5按键按下,发so音

callfz

jmpnext

next6:

movsi,la1;若K6按键按下,发la音

callfz

jmpnext

next7:

movsi,xi1;若K7按键按下,发xi音

callfz

jmpnext

next8:

callbrithday;若K8按键按下,播放生日歌

jmpnext

startendp

brithdayprocnear;生日歌程序

movsi,so1

callfre

movsi,so1

callfre

movsi,la1

callfre

movsi,so1

callfre

movsi,duo1

callfre

movsi,xi1

callfre

movsi,so1

callfre

movsi,so1

callfre

movsi,la1

callfre

movsi,so1

callfre

movsi,re1

callfre

movsi,duo1

callfre

movsi,so1

callfre

movsi,so1

callfre

movsi,mi1

callfre

movsi,duo1

callfre

movsi,xi1

callfre

movsi,la1

callfre

movsi,fa1

callfre

movsi,fa1

callfre

movsi,mi1

callfre

movsi,duo1

callfre

movsi,re1

callfre

movsi,duo1

callfre

brithdayendp

soundprocnear;定义声音过程子程序。

movdx,200h

subdx,si;将200h减去si寄存器中内容后送人dx寄存器

g1:

movbx,si;si寄存器中内容送人bx寄存器,供voice使用

callvoice;调用voice程序,

decdx;dx寄存器减一,即dx值决定调用voice次数

jnzg1

inal,61h;查询B端口按键情况。

cmpal,11111110b;判断K1是否有按键按下。

jnza1;若无,正常执行程序。

jza2;若K1按键按下,停止发声进入主函数

cmpal,11111101b;判断K2键按下

jnza1;若无,正常执行程序

jza3;

a3:

addbx,100h;若K2键按下,bx值加100h,使得声音变调。

jmpa1

a2:

callstart

a1:

ret

soundendp;过程结束

voiceprocnear;定义voice过程程序,使PA0口发出高低脉冲。

moval,00h

out60h,al;PA0输出低电平

movcx,bx;将bx寄存器中内容传递给cx寄存器

calldelay;调用延时程序,时长由bx寄存器中内容决定

moval,01h

out60h,al;PA0输出高电平

movcx,bx

calldelay;调用同样时长延时程序

ret

voiceendp;过程结束

delayprocnear;定义延

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1