- 9
- 0
- 约1.85万字
- 约 35页
- 2023-11-11 发布于江苏
- 举报
目 录
TOC \o 1-3 \h \z \u 设计1:简易电子琴 1
1. 设计任务 1
2. 设计目标 1
3. 设计原理 1
4. 设计实现 2
4.1. 硬件实现 2
4.2. 软件实现 3
5. 设计结果 6
6. 设计心得与改进方法 6
设计2:LED 16×16点阵 7
1 设计任务 8
2 设计目标 8
3 设计原理 8
3.1 A2区 9
3.2 A3区 9
3.2.1 CPU总线 10
3.2.2 片选区 10
4 设计实现 10
4.1 硬件实现 10
4.2 软件实现 11
4.2.1 示例代码分析 13
4.2.2 重构代码分析 14
5 设计结果 15
6 设计心得与改进方法 17
附录A 19
附录B 28
PAGE 2
设计1:简易电子琴
设计任务
掌握蜂鸣器的使用方法;掌握蜂鸣器的不同发音的方法。
设计目标
借助可编程并行接口芯片8255,通过PC机编程在SUN ES86PCIU+实验仪平台上实现了一个简易的电子琴。
设计原理
对蜂鸣器输入不同频率的方波,会发出各个音阶的声音;
通过编程设定或按键,由8255芯片控制发出不同频率的方波,即产生不同音阶的声音。
我们主要采用了可编程并行接口芯片8255,通过8255的PAD,使实验仪F5区的1?7号键由低到高发出1-7的音阶。
设计有关的原理图如图3.1所示。
图 STYLEREF 1 \s 3. SEQ 图 \* DBCHAR \s 1 1简易电子琴实验原理图
主机连线说明如表3.1所示,连线的目的是编程或按键控制F5区的按键使F8区的蜂鸣器发出不同音阶的声音。
表 STYLEREF 1 \s 3. SEQ 表 \* DBCHAR \s 1 1简易电子琴连线说明
D3 区:CS、AO、Al
A3 区:CS1、AO、A1
D3 区:PC7
F8 区:Ctrl
D3 区:JP23 (PA 口)
F5 区:JP37 (A)
Cl 区:GND
F5 区:KL1
设计实现
硬件实现
我们按照原理图与实验连线说明在实验仪上连线,具体如图4.1所示。
图 STYLEREF 1 \s 4. SEQ 图 \* DBCHAR \s 1 1实验仪连线
软件实现
本次设计的系统流程图如图4.2所示。
图 STYLEREF 1 \s 4. SEQ 图 \* DBCHAR \s 1 2 简易电子琴系统执行流程
本次设计所用代码放在附录A中以供查阅,接下来对代码做一些必要的说明。
程序首先定义了最终可执行文件的格式,由于本次实验的代码行数较少、访存空间较小,因此采用了tiny格式。接着设置控制口地址、输入口地址与输出口地址,需要注意的是,不同类型的实验仪的口地址不一定相同,在编程时应予以注意。程序所用的栈空间为100(dw),数据段定义了由各函数组成的《两只老虎》的乐谱。程序的功能部分主要由以下七个部分组成:
调用初始化8255芯片以及播放默认乐曲的函数。显然,为了8255芯片可以正常工作,我们需要根据实验的实际情况,编程决定8255芯片的方式选择控制字与工作方式。本部分主要由两个函数调用组成:
call init8255 ;8255 初始化
call demo ;播放一段音乐
按键查询有关的一系列操作。我们的设计是先由CPU发送一段默认的乐谱給8255芯片,使之控制蜂鸣器演奏乐曲,再允许操作者做其他演奏。本部分主要由start1~start7等7个分支组成,其中start1完成有无按键按下的查询并检测所按键是否为1,其余6个语句块完成的功能基本相同:查询对应的按键是否按下。
自动播放乐曲的主函数。为了实现自动播放的功能,我们实现了一个函数demo,主要定义了歌曲的节拍数并顺序发出各个音阶。值得一提的是,我们使用寄存器CX来保存节拍数,为了避免在函数调用时其值被覆盖,因此需要提前压入堆栈中保护。
响应按键的一系列函数。这个部分主要由music1~music7等7个函数组成,它们的功能基本相似,区别仅在于为了能够区别不同的音阶而设置的延时,即蜂鸣器在一定时间内震荡的频率。为了保证音阶可以方便地被识别,我们应当取各震荡周期基本一致。
响应自动播放的一系列函数。本部分代码结构与上一部分在形式上具有很大的相似性,主要由m1~m7等7个不同函数组成,所不同的是此部分代码的功能是响应自动播放。不得不说的是,各个函数为了使其对应的音阶更明显,通过寄存器CX设置LOOP循环的次数,即延时时间。另外,上部分与本部分的延时如何调整才能使音阶达到更好的效果需要一定的音乐知识,并加以调试修改。
初始化8255芯片与读
原创力文档

文档评论(0)