为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

电子琴2

2011-11-14 22页 doc 740KB 68阅读

用户头像

is_621110

暂无简介

举报
电子琴2 武汉理工大学华夏学院>课程设计 微机原理课程设计报告 题 目: 简易电子琴设计 学院(系):武汉理工大学华夏学院信息工程系 年级专业: 电子信息工程1073班 学 号: 10211807306 学生姓名: 张孝勇 指导教师: 甘泉 课程设计任务书 ...
电子琴2
武汉理工大学华夏学院<<微机原理与接口技术>>课程设计 微机原理课程设计 题 目: 简易电子琴设计 学院(系):武汉理工大学华夏学院信息系 年级专业: 电子信息工程1073班 学 号: 10211807306 学生姓名: 张孝勇 指导教师: 甘泉 课程设计任务书 学生姓名: 张孝勇 专业班级: 电信1073班 指导教师: 甘泉 工作单位: 华夏学院 题 目: 简易电子琴的设计 初始条件: 运用所学的微机原理和接口技术知识; 微机原理和接口技术实验室的实验箱设备。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) 使用汇编语言设计一个能够用键盘运行的电子琴,(实现一个以上功能): 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.微机原理和接口技术实验室的实验箱设备。 ①唐都实验箱TDN 86/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所示, 本次课程设计实验室中使用的TDN 86-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 发声程序设计 我们将发声程序定义为一个过程子程序sound proc,其调用格式为: mov si,re ;si寄存器传递不同音调所对应的数据 call sound ;调用指令 这样当我们需要蜂鸣器发出不同音调音时,只需将不同音调所对应的数据传递给si寄存器后调用sound子程序便能使蜂鸣器发出我们所需的声音。 整个发声程序如下所示。 sound proc near ;定义声音过程子程序。 mov dx,200h sub dx,si ;将200h减去si寄存器中内容后送人dx寄存器 g1:mov bx,si ;si寄存器中内容送人bx寄存器,供voice使用 call voice ;调用voice程序, dec dx ;dx寄存器减一,即dx值决定调用voice次数 jnz g1 in al,61h ;查询B端口按键情况。 cmp al,11111110b ;判断K1是否有按键按下。 jnz a1 ;若无,正常执行程序。 jz a2 ;若K1按键按下,停止发声进入主函数 cmp al,11111101b ;判断K2键按下 jnz a1 ;若无,正常执行程序 jz a3 ; a3:add bx,100h ;若K2键按下,bx值加100h,使得声音变调。 jmp a1 a2:call start a1:ret sound endp ;过程结束 voice proc near ;定义voice过程程序,使PA0口发出高低脉冲。 mov al,00h out 60h,al ;PA0输出低电平 mov cx,bx ;将bx寄存器中内容传递给cx寄存器 call delay ;调用延时程序,时长由bx寄存器中内容决定 mov al,01h out 60h,al ;PA0输出高电平 mov cx,bx call delay ;调用同样时长延时程序 ret voice endp ;过程结束 delay proc near ;定义延时过程程序。 delay1:loop delay1 ret delay endp 4.3 按键程序设计 start proc near mov al,82H ;8255A初始化,控制字寄存器为10000010, out 63h,al ;A端口0方式输出,B端口0方式输入,C端口输出 mov al,01h out 60h,al next: in al,61h ;查询B端口按键状态,进入相应发声程序。 cmp al,11111110b jz next1 cmp al,11111101b jz next2 cmp al,11111011b jz next3 cmp al,11110111b jz next4 cmp al,11101111b jz next5 cmp al,11011111b jz next6 cmp al,10111111b jz next7 cmp al,01111111b jz next8 jmp next next1:mov si,doo1 ;若K1按键按下,发do音 call fz jmp next next2:mov si,re1 ;若K2按键按下,发re音 call fz jmp next next3:mov si,mi1 ;若K3按键按下,发mi音 call fz jmp next next4:mov si,fa1 ;若K4按键按下,发fa音 call fz jmp next next5:mov si,so1 ;若K5按键按下,发so音 call fz jmp next next6:mov si,la1 ;若K6按键按下,发la音 call fz jmp next next7:mov si,xi1 ;若K7按键按下,发xi音 call fz jmp next next8:call brithday ;若K8按键按下,播放生日歌 jmp next start endp 4.4 声调定义 各音阶对应频率如表8所示 由于我们产生音频信号的方法是控制8255A芯片的A端口输出高低电平的时间来决定脉冲频率的,每次电平维持的时间由si寄存器的数值决定,通过计算得到当si寄存器中的内容为1时一次电平维持时间为3.8us,即一个周期的高低脉冲时间约为7.8us,频率约为128KHz,那么根据不同音阶的值便可计算得所需要传递的si寄存器的值。 计算公式为: doo equ 01e9h ;低音音节1对应的输入数据 re equ 01b3h mi equ 0184h fa equ 016eh so equ 0146h la equ 0122h xi equ 0103h doo1 equ 0ffh ;中音音节对应的输入数据 re1 equ 0dah mi1 equ 0c2h fa1 equ 0b7h so1 equ 0a3h la1 equ 090h xi1 equ 081h 五、系统电路的安装与调试 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 部分源程序与参考文献 doo equ 01e9h ;低音音节1对应的输入数据 re equ 01b3h mi equ 0184h fa equ 016eh so equ 0146h la equ 0122h xi equ 0103h doo1 equ 0ffh ;中音音节对应的输入数据 re1 equ 0dah mi1 equ 0c2h fa1 equ 0b7h so1 equ 0a3h la1 equ 090h xi1 equ 081h data segment data ends STACK SEGMENT STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK start proc near mov al,82H ;8255A初始化,控制字寄存器为10000010, out 63h,al ;A端口0方式输出,B端口0方式输入,C端口输出 mov al,01h out 60h,al next: in al,61h ;查询B端口按键状态,进入相应发声程序。 cmp al,11111110b jz next1 cmp al,11111101b jz next2 cmp al,11111011b jz next3 cmp al,11110111b jz next4 cmp al,11101111b jz next5 cmp al,11011111b jz next6 cmp al,10111111b jz next7 cmp al,01111111b jz next8 jmp next next1:mov si,doo1 ;若K1按键按下,发do音 call fz jmp next next2:mov si,re1 ;若K2按键按下,发re音 call fz jmp next next3:mov si,mi1 ;若K3按键按下,发mi音 call fz jmp next next4:mov si,fa1 ;若K4按键按下,发fa音 call fz jmp next next5:mov si,so1 ;若K5按键按下,发so音 call fz jmp next next6:mov si,la1 ;若K6按键按下,发la音 call fz jmp next next7:mov si,xi1 ;若K7按键按下,发xi音 call fz jmp next next8:call brithday ;若K8按键按下,播放生日歌 jmp next start endp brithday proc near ;生日歌程序 mov si,so1 call fre mov si,so1 call fre mov si,la1 call fre mov si,so1 call fre mov si,duo1 call fre mov si,xi1 call fre mov si,so1 call fre mov si,so1 call fre mov si,la1 call fre mov si,so1 call fre mov si,re1 call fre mov si,duo1 call fre mov si,so1 call fre mov si,so1 call fre mov si,mi1 call fre mov si,duo1 call fre mov si,xi1 call fre mov si,la1 call fre mov si,fa1 call fre mov si,fa1 call fre mov si,mi1 call fre mov si,duo1 call fre mov si,re1 call fre mov si,duo1 call fre brithday endp sound proc near ;定义声音过程子程序。 mov dx,200h sub dx,si ;将200h减去si寄存器中内容后送人dx寄存器 g1:mov bx,si ;si寄存器中内容送人bx寄存器,供voice使用 call voice ;调用voice程序, dec dx ;dx寄存器减一,即dx值决定调用voice次数 jnz g1 in al,61h ;查询B端口按键情况。 cmp al,11111110b ;判断K1是否有按键按下。 jnz a1 ;若无,正常执行程序。 jz a2 ;若K1按键按下,停止发声进入主函数 cmp al,11111101b ;判断K2键按下 jnz a1 ;若无,正常执行程序 jz a3 ; a3:add bx,100h ;若K2键按下,bx值加100h,使得声音变调。 jmp a1 a2:call start a1:ret sound endp ;过程结束 voice proc near ;定义voice过程程序,使PA0口发出高低脉冲。 mov al,00h out 60h,al ;PA0输出低电平 mov cx,bx ;将bx寄存器中内容传递给cx寄存器 call delay ;调用延时程序,时长由bx寄存器中内容决定 mov al,01h out 60h,al ;PA0输出高电平 mov cx,bx call delay ;调用同样时长延时程序 ret voice endp ;过程结束 delay proc near ;定义延时过程程序。 delay1:loop delay1 ret delay endp CODE ENDS END 1 _1234567897.unknown _1234567905.unknown _1234567909.vsd _1234567911.vsd 8255等芯片初始化 查询按键 获得相应键值 是 否 若1~7按键按下发出相应的do~xi音,持续时间1S 若8号按键按下,发出固定乐曲 发声结束,并再次进入查询程序循环 同时查询1,2号按键 若1号按键按下停止发声;若2号键按下,产生变调 否 是 图4 电子琴软件设计流程 _1234567913.unknown _1234567914.vsd � � � � _1234567912.vsd 音阶 1 2 3 4 5 6 7 频率(Hz) 低音 频率(Hz) 中音 261.62 293.6 349.2 391.9 440 493.8 329.6 523 587 698 784 888 988 659 表8 各音阶标称频率值 _1234567910.vsd � � � � _1234567907.unknown _1234567908.vsd 0 表4 B口工作方式选择 1 D2 A口工作方式 C口低四位为输入 方式0 方式1 B口为输入 D1 表5 B口I/O选择 输入、输出选择 0 1 B口为输出 D0 输入、输出选择 0 1 C口低四位为输出 表6 C口下半部I/O选择 _1234567906.unknown _1234567901.vsd 表1 A口工作方式选择 D6 D5 A口工作方式 00 01 1X 方式0 方式1 方式2 A口为输入 D4 表2 A口I/O选择 输入、输出选择 0 1 A口为输出 D4 输入、输出选择 0 1 C 口为高四位输出 C 口为高四位输入 表3 C口上半部I/O选择 _1234567903.unknown _1234567904.unknown _1234567902.unknown _1234567899.unknown _1234567900.unknown _1234567898.unknown _1234567893.unknown _1234567895.unknown _1234567896.unknown _1234567894.unknown _1234567891.vsd D7 D6 D5 D4 D3 D2 D1 D0 1 A组控制 B组控制 _1234567892.unknown _1234567890.vsd �
/
本文档为【电子琴2】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
热门搜索

历史搜索

    清空历史搜索