




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 项目名称项目名称 简易电子琴设计简易电子琴设计 姓名: 学号: 班级: 日期: 2 第一部分第一部分 设计任务设计任务.3 第二部分第二部分 设计原理设计原理.3 第三部分第三部分 硬件设计硬件设计.4 1硬件设计方案.4 相关硬件结构及原理说明:.6 2、硬件设计方案论证 .8 第四部分第四部分 软件设计软件设计.9 1、软件设计思想 .9 2. 软件流程图.9 系统测试结果分析:.16 第六部分:结论第六部分:结论.20 附录:.21 (1)参考资料.21 (2)元件清单.21 (3)遇到的问题与解决方法.21 (4)程序清单.22 (5) 课程体会 .30 3 第一部分第一部分 设计任务设计任务 基于汇编语言,设计出一个有菜单栏的方便使用的电子琴程序,使得软 件用起来即舒适又方便。本次硬件课程设计的任务和要求是通过居于 8255A 芯片和 8253 芯片上的电路设计和电路连接并通过对它们进行编程实 现一个具有可播放音乐和弹奏电子琴的基本功能的小器件。该器件不仅具 有基本的弹奏功能(输入不同的键能发出不同频率的声音即音符) ,还可以 根据用户的喜好播放歌曲。 软件的基本功能: a.设计 dos 界面的基本菜单,为用户提供可视化界面。 b.以计算机键盘模拟真实琴键,发出标准 8 个低音。 c.自动播放音乐,让用户选择不同的音乐进行播放。 第二部分第二部分 设计原理设计原理 现实生活中音乐的每一个音频都有其对应的频率,如“1”对应的发音频 率有 262 (低音),524(高音)两种频率。基于上述原理,我们将 8255A 芯片的 A 端口作为输出端口,而 8253 的时钟输入引脚 CLK0 与相应的时钟发生器相连接, 8253 的 0 通道的 OUT0 信号与 8255A 的 PC1 通过与门以后与蜂鸣器相连接,从 而驱动并控制蜂鸣器发音的发音和终端:当 PC1 为“1”时蜂鸣器连通,能够发 出声音;当 PC1 为“0”时蜂鸣器被中断,不能发出声音。这样,我们在硬件上 实现了通过 8255A 芯片输入设备的输入信号并通过它传送给 8253,让 8253 进 行相应的处理后输出给蜂鸣器的功能。 我们要通过对 8255A 的初始化和编程控制它的相关工作,使其能够实现上 4 面提到的相应功能。然后,我们对 8253 进行编程,使其初始化,并根据从 8255A 芯片传递来的信息的种类为 8253 的运行编写不同的程序段,使其在运行 中根据 8255A 芯片传递来的信息的不同执行不同的程序(输出不同的音频) 。 相关频率对应表如下所示: 键值 01H02H03H04H05H06H07H08H 音符 1234567 中止 频率(高) 5245886606987848809881048 频率(低) 262294330347392 440494524 第三部分第三部分 硬件设计硬件设计 1硬件设计方案硬件设计方案 5 PA4 PA5 PA6 PA7 WR RESET D0 D1 D2 D3 D4 D5 D6 D7 VCC PB7 PB6 PB5 PB4 PB3 Vcc WR RD CS A1 A2 CLK2 OUT2 GATE2 CLK1 GATE1 OUT1 D7 D6 D5 D4 D3 D2 D1 D0 CLK0 Out0 GATE 0 GND D0 D1 D2 D3 D4 D6 D7 IOR IOW 280H 288H 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 PA3 PA2 PA1 PA0 RD CS GND A0 A1 PC7 PC6 PC5 PC4 PC0 PC1 PC2 P3 PB0 PB1 PB2 1 2 3 4 5 6 7 8 9 10 11 12 24 23 22 21 20 19 18 17 16 15 14 13 8253 PC 总线 与门 . . 8255A 扬声器 1MHZ 6 总体线路图 相关硬件结构及原理说明相关硬件结构及原理说明: 8255A 的内部结构 A 组控 制 B 组控 制 端口 A 端口 C(上半部 分) 端口 C(下半部 分) 端口 B 数据 缓冲 器 读/写 控制逻 辑 1 D6 D5 D4 D3 D2 D1 D0 方式选择控制 字标志 00=方式 0 01=方式 1 1x=方式 2 端口 A:1=输 入,0=输出 C 口高位:1= 输入,0=输出 B 组方式: 0=方式 0 1=方式 1 端口 B:1= 输入,0=输 出 C 口低位: 1=输入,0= 输出 7 8255 的方式选择控制字 8253 内部结构图 WR CLK GATE 数据总线缓冲 器 读/写逻辑 控制字寄存器 ggggggg 计数器#0 计数器#1 计数器#2 内 部 总 线 WR A0 RD D0D7 A1 CS CLK0 GATE0 OUT0 GND VCC 8 OUT4 2 4 2 4 8253 方式 3 下的波形 8253 工作方式控制字 2、硬件设计方案论证硬件设计方案论证 1.8255A 和 8253 配合构成音频发生器。8255A 的 PA0 口控制扬声器的开关,8253 控制 扬声器的发声频率。 2. PC 机的键盘数字键对应电子琴的 8 个琴键和 2 功能键(q退出 , p音乐播放 键) 。 SC1 SC0 RL1 RL0 M2 M1 M0 BCD D7 D6 D5 D4 D3 D2 D1 D0 计数器选择 1- BCD 计数 0- 二进制计数 工作方式选择: 000-方式 0 001-方式 1 X10-方式 2 X11-方式 3 100-方式 4 101-方式 5 计数长度选择 00- 将计数器中的数据所存与缓冲器 01- 只读写计数器低 8 位 10-计数器高 8 位 11-计数器低 8 位,在读写计数器高 8 位 9 3. 8255A 门控信号与 8253 的频率控制信号经与门后驱动扬声器发出各种音频和音长声 音。 第四部分第四部分 软件设计软件设计 1、软件设计思想软件设计思想 通过 8255 和 8253 来实现电子琴模拟,主要可以分成两部分,分别为输入 部分和发音部分。 输入部分:主要是由 8255 和 8 个常开型开关来完成。 发音部分:CUP 通过对 定时器的通道进行编程,使其 I/O 寄存器接收一个控制声音频率的 16 位计数值, 端口 61H 的最低位控制通道 2 门控的开断,以产生特殊的音响。当定时器接收 的计数值为 533H 时,能产生 896Hz 的声音,因此产生其他频率的计数值就可 由下式计算 计数值=533H*896/f=1234DCH/f 当通道 2 用于发声时,采用的是模式 3,在模式 3 下,输出线为“1”和为 “0”的时间各占计数时间的一半,因而产生一系列间隔均匀的脉冲。 从定时 器输出的方波信号,经功率放大和滤波后驱动扬声器。送到扬声器的信号还受 到了从并行接口芯片 8255(端口地址为 61H)来的双重控制,端口 61H 的最低 位控制通道 2 的门控开断,以产生特殊的音频信号,端口 61H 的 PB1 位和定时 器的输出信号同时作为与门的输入,PB0 和 PB1 位可由程序决定为 0 还是为 1。显然只有 PB0 和 PB1 都是 1 时,才能使扬声器发出声音。控制音长的时间 可以简单地通过调用延时子程序来控制,这样就可以轻松地控制发音的时间长度 了。 10 2. 软件流程图软件流程图 程序主要实现的是弹奏以及自动播放音乐两个简单功能,程序运行时的流程图 如下。 图 4-1 主程序流程图 弹奏功能的实现:程序初始化之后按 18 数字键可以直接运行弹奏功能,其功能实现流程 图如下 开始 从键盘读入字符 是q键? 是p键? 是 18 数字键?调用 output 发声子程 序 跳转 play 代 码段执行 11 数字 18 输入 8253 初始化为方式 3 8253 赋计数初值 设置 8255A 口输出 开扬声器,发声 延时 关扬声器 Output 发声子程序 12 图 4-2 弹奏功能实现流程图 p键按下 提示选择播放的音乐或退出 调用 makesound2 播放音乐 2 q键按下? 1/2 键 调用 makesound1 播放音乐 1 音乐结束 q键是否按下? 回到主菜单界面 13 图 4-3 音乐播放功能实现流程图 图 8-4 makesound1 发声子程序功能实现流程图 (makesound2 类似) 6.软件关键语句分析 主程序运行后,等待用户输入数据,然后根据用户输入的数据执行相应的功能。 sss: mov ah,7 int 21h ;等待键盘输入数据 cmp al,q;若为q则突出程序 je exit 计数寄存 器 CL+1 CL 里的数大于 歌曲 1 长度? 调用 output 发声 子程序, 回到“提示选 择播放的音乐 或退出”菜单 14 cmp al,p ;若为p则跳到音乐播放功能子程序 jne next1 call play next1:cmp al,1;若为 18 则为弹奏功能 jl sss cmp al,8 jg sss call makesound jmp sss 选择音乐播放功能段的代码如下:用户按下p键后,菜单显示提示用户输入要播放 的歌曲(此程序中有两首) ,然后根据用户输入的选择播放对应的歌曲。 play proc near false: mov dx,offset enter1 mov ah,9 int 21h mov dx,offset msg4 ;提示选择要播放的歌曲 mov ah,9 int 21h mov ah,7 int 21h xor cx,cx ;循环计数寄存器 CX 清零 cmp al,1 ;若输入数字为 1,播放第一首歌曲 jne next call makesound1 jmp go next: cmp al,2 ;若输入数字 2,播放第二首歌曲 15 jne false call makesound2 go: mov dx,offset enter1 mov ah,9 int 21h mov dx,offset msg3 ;提示歌曲播放完毕 mov ah,9 int 21h go1: mov ah,7 int 21h cmp al,q;若输入q,退出放歌程序 je over1 cmp al,s;输入s ,重新选择歌曲播放 je false jne go1 发声功能 output 段的代码如下,当子程序被调用时,会在计数值送 8253 前,先对 8253 进行初始化,使其选用通道 2,工作在方式 3 下。 mov dx,io8253b ;设置 8253 计时器 0 方式 3, mov al,B ;先读写低字节, 再读写高字节 计算计数初值,计数值送到 8253,用以产生需要的发音频率利用定时器发声。这里是 通过硬件即 8253 定时器产生声音。初始值的计算过程如下:计数初值 = / 频率, mov bh,0 mov ax,4240H ;计数初值 = / 频率 mov dx,0FH ;字除 DX:AX ,DX 保存除数高位,AX 保存除数低 位 div word ptrsong2+bx mov bx,ax ;结果 保存到 AX 送到扬声器的信号还受到了从并行接口芯片 8255 PA 口输出和定时器的输出信号同时 作为与门的输入,PA0 和 PA1 位可由程序决定为 0 还是为 1。显然只有 PA0 和 PA1 都是 1 时, 才能使扬声器发出声音。 16 mov dx,io8255b ;设置 8255 A 口输出 mov al,B out dx,al mov dx,io8255a mov al,03h out dx,al ;开扬声器 延时子程序的作用是控制音长的时间,可以简单地通过反复执行指令来得 到。 mov ax,25 ;设置 ax 的初始值为 25 次 x1: mov cx,0ffffh;每一次执行 0ffff 条 dec cx 指令 x2: dec cx jnz x2 dec ax jnz x1 第五部分系统测试与性能分析第五部分系统测试与性能分析 系统测试结果分析:系统测试结果分析: 初始化界面后,等待用户输入字符。如图所示: 17 判断其值,若是在 1-8 之间则相应输出 1-8 对应的音阶。如图所示: 跳到 makesound 子程序。如图所示: 18 若输入 p,则跳到播歌子程序。如如下图所示: 进入播歌子程序后,判断用户输入,1 代表第一首歌,2 代表第二所示:首歌。 如下图 19 若输入 q,则返回主界面,并且等待输入。如图所示: 若是用户输入字符 q,跳到 exit 标号,调用 INT 21H 功能。如下图所示: 20 程序退出。如图所示: 21 运行结果完全符合预想的结果。 第六部分:结论第六部分:结论 结果以上从实验原理,软件设计,到编程实现,软件测试各个阶段的测试, 可以得知我们的程序达到了我们初期的预定目的,软件各个功能都能实现。有 了菜单的辅助,在使用的过程中更为方便,在软件运行的各个间断都有提示, 让软件的使用更为人性化。由于原始的软件只有弹奏功能,经过我们的改进之 后,假如了菜单,提示,音乐播放功能,使得软件功能更加丰富。程序的实现, 证明了 8253 的计时,8255 的控制输入输出功能相结合能够模仿音乐发声的不同 频率,并通过扬声器播最终放出相应的音调,以此来模仿乐器发音。这些都是 我们小组人员的努力取得的小小的成果。但是我们的软件仍然存在许多缺陷, 比如延时固定,以至于发音的时间长度一致,实现功能过于简单,未能实现储 存音乐再次播放的功能等,这些都是我们日后应该努力去改进的地方。 附录:附录: (1)参考资料)参考资料 1微型计算机原理与接口技术/吕林涛主编 北京:科学出版社,2005 版 2汇编语言与计算机系统组成/李心广编著. 北京:机械工业出版社, 2009.5 3TPC-USB 教师实验指导书 22 (2)元件清单)元件清单 1.电子实验箱 2.8253 定时/计数器 3.8255 可编程并行接口 8255A 4.扬声器 5.频率发生器(附置于电子试验箱) 6.实验电线若干 (3)遇到的问题与解决方法)遇到的问题与解决方法 1. 音乐播放时有杂音。 解决方法:经过我们的讨论分析,得出问题的根源在于地址计算过程 有误,因此得重新修改程序,调试程序。 2.跳转超出范围。 解决方法:因为简单的跳转指令 jmp,je 等最多可以跳转 128 个字节的 指令长度,由于我们的程序过长,因此出现了此种问题。解决方法是利用 子程序调用。 3.基础薄弱,编程、设计程序的能力差。 解决方法:只有埋头钻研相关的软件、硬件知识。 (4)程序清单)程序清单 源程序: data segment io8255a equ 288h io8255b equ 28bh io8253a equ 280h io8253b equ 283h 23 CR equ 0dh LF equ 0ah N equ 2 DUP( ) table1 dw 262,294,330,347,392,440,494,524;低音的 song1 dw 440,440,494,440,440,494,440,494 dw 262,494,440,494,440,347,330,262 dw 330,347,330,330,262,494,440,494 dw 262,494,440,494,440,347,330,262 dw 330,347,330,330,262,494,440,440 dw 494,440,440,494,330,347,494,440 dw 347,330 song2 dw 440,262,440,392,440,262,440,440 ;读书郎 dw 440,262,294,330,294,262,440,440 dw 262,330,330,262,330,392,330,440 dw 440,440,440,392,330,262,440,440 dw 440,440,440,392,330,262,262,330 dw 392,330,392,440,392,330,294,330 dw 294,262,440 msg1 byte WELCOME TO SOFEWARE CREATED BY US! ,CR,LF ,$ L1 BYTE N, MENU ,CR,LF BYTE N, 888,CR,LF BYTE N,88 q. RETURN 88 ,CR,LF BYTE N, 88 p. PLAY THE MUSIC AUTOMATICALLY 88 ,CR,LF BYTE N, 88 IF YOU WANT TO PLAY IT YOURSELF ,PRESS 1,2,3,4,5,5,7,8 88 ,CR,LF BYTE N, 888 ,CR,LF ,$ L7 BYTE N, SELECT YOUR CHOICE(q,p,e): ,CR,LF ,$ msg4 db chose 1/2 to play the song ,CR,LF,$ 24 msg3 db press s to player the song again or q to quit.,cr,lf ,$ enter1 db CR,LF,CR,LF,$ CNT2 EQU 52 ;歌曲长度 2 CNT1 EQU 51 ;歌曲长度 1 data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset msg1 ;欢迎信息 mov ah,9 int 21h order:mov dx,offset L1 ;菜单显示 mov ah,9 int 21h mov dx,offset L7;选择提示 mov ah,9 int 21h sss: mov ah,7 int 21h cmp al,q ;比较输入的数据,为q则退 出 je exit cmp al,p ;为p则跳到自动播放音乐 子 jne next1 ;程序 call play 25 next1:cmp al,1 ;若为 18 则为弹奏功能 jl sss cmp al,8 jg sss call makesound jmp sss exit:mov ax,4c00h int 21h play proc near false: mov dx,offset enter1 mov ah,9 int 21h mov dx,offset msg4 ;选择要播放的歌曲 mov ah,9 int 21h mov ah,7 int 21h xor cx,cx ;计数器清零(用于判断歌曲是 cmp al,1;否播放完毕) jne next call makesound1 ;播放第一首歌曲 jmp go next: cmp al,2 jne false call makesound2 ;播放第二首歌曲 go: mov dx,offset enter1 mov ah,9 int 21h 26 mov dx,offset msg3 ;歌曲播放完毕 mov ah,9 int 21h go1: mov ah,7 int 21h cmp al,q ;歌曲播放完毕,若按下q则推出 je over1 cmp al,s;按下s则继续播放歌曲 je false jne go1 over:mov ah,7 int 21 cmp al,q jne over over1:mov dx,offset L1;退出到主菜单 mov ah,9 int 21h mov dx,offset L7 mov ah,9 int 21h mov dx,offset enter1 mov ah,9 int 21h ret play endp 27 makesound proc near sub al,31h shl al,1 ;转为查表偏移量 mov bl,al ;保存偏移到 bx mov bh,0 mov ax,4240H ;计数初值 = / 频率, 保存到 AX mov dx,0FH div word ptrtable1+bx mov bx,ax call output ret makesound endp makesound1 proc near ad1: inc cl ;计数器 getkey: mov ah,0bh int 21h or al,al ;al jz return1 cmp cl,CNT1;是否播放完毕 je return1 ;播放完则跳回到开始 xor ax,ax; mov al,cl sub al,01h shl al,1 ;转为查表偏移量 28 mov bl,al ;保存偏移到 bx mov bh,0 mov ax,4240H ;计数初值 = / 频率, mov dx,0FH ;保存到 AX; div word ptrsong1+bx mov bx,ax call output jmp ad1 return1: ret makesound1 endp makesound2 proc near ad: inc cl ;计数器 getkey1: mov ah,0bh ; int 21h or al,al ;al jz return cmp cl,CNT2 je return ;播放完则跳回到开始 xor ax,ax; mov al,cl sub al,01h shl al,1 ;转为查表偏移量 mov bl,al ;保存偏移到 bx mov bh,0 mov ax,4240H ;计数初值 = / 频率, 保存到 AX mov dx,0FH 29 div word ptrsong2+bx mov bx,ax call output jmp ad return: ret makesound2 endp output proc near mov dx,io8253b ;设置 8253 计时器 0 方式 3, 先读写低字 节, 再读写高字节 mov al,B out dx,al mov dx,io8253a mov ax,bx out dx,al ;写计数初值低字节 mov al,ah out dx,al ;写计数初值高字节 mov dx,io8255b ;设置 8255 A 口输出 mov al,B out dx,al mov dx,io8255a mov al,03h out dx,al ;置 PA1PA0 = 11(开扬声器) call delay ;延时 30 mov al,0h out dx,al ;置 PA1PA0 = 00(关扬声器) ret ;子程序返回 output endp delay proc near ;延时子程序 push cx push ax mov ax,25 x1: mov cx,0ffffh x2: dec cx jnz x2 dec ax jnz x1 pop ax pop cx ret delay endp code ends end start (5) 课程体会课程体会 吴建波: 此次实验为本学其最后一次实验课,是一次检查我们这个学期的学习成果的实验,意义十分 重大,因此,把握好此次的实验机会十分重要。在选题的时候我们小组就选择了电子琴这一 个课题,一是因为有趣,我们竟然可以用已经掌握得知识自己设计出一款“电子产品” ,实 在是太有趣了。二是因为课题的难度比较适合我们小组组员的能力,因为兴趣问题, (都比 较喜欢软件,害怕硬件)我们在大二时汇编语言知识学的实在平庸。 因此在拿到了课题之后我们就讨论了并确立我们的目标,并开始着手准备汇编语 31 言编程方面的知识,不久后我们就开始程序的修改了。一开始时,由于基础知识不牢固的 原因,我们的进展很慢,几乎到了举步维艰的境地,很多语句都看不懂,因此看一句就要 查看书本,问同学,上网搜索相关的知识介绍。这样的日子持续了好一段时间,令我们欣 慰的是,慢慢的我们对汇编语句比较熟悉了,已经可以看懂大部分的命令,这时我们的进 展就顺利多了。在离老师规定的最后期限还有 5、6 天的时候,我们编好的程序第一次可以 发声了,但是依然有很多问题,播放音乐有杂音,改了程序之后没有声音,于是我们改程 序,调试,再改程序,再调试往复了不知道多少遍,才把所有的问题解决。后来,有 别的同学指出我们组的程序没有结构,过程繁琐,不易看懂,与其他人的相比较之后,我 们发现果然是事实,因此我们尝试去将我们的程序改得有结构,易读懂的程序。于是有了 现今的这个程序。 以上就是我们的程序编写与调试过程,在这个过程中,我们遇到了许多,同时也解决 了很多难题,在解决这
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 树之歌教学课件一等奖
- 山西小学三年级教学课件
- 教学课件结尾 结语
- 2025年长沙市中考物理试卷真题(含答案)
- 体育设施信托产品与消费者权益保护分析考核试卷
- 儿童玩具行业消费者购买决策因素研究考核试卷
- 公证员跨文化谈判技巧培训考核试卷
- java继承与多态面试题及答案
- 浙江省pcr上岗证考试试题及答案
- 环境成本会计在企业管理中的应用探讨考核试卷
- 2025年中国乐器网数据监测研究报告
- 西方文化导论试题及答案
- 2025-2030中国毛衣市场调研及重点企业投资评估规划分析研究报告
- 2025江苏省惠隆资产管理限公司招聘30人易考易错模拟试题(共500题)试卷后附参考答案
- 试车员安全培训
- ARK年度重磅报告:2024年重大创新-BIGIDEAS2024(中文)
- 危重病例管理制度和报告制度
- 除臭系统操作培训
- 2025年南外小升初测试题及答案
- 幼儿园一日活动保教细则培训
- GB/T 45236-2025化工园区危险品运输车辆停车场建设规范
评论
0/150
提交评论