当前位置:文档之家› 51单片机简易单音轨音乐播放器课设报告

51单片机简易单音轨音乐播放器课设报告

示,实验中用八位排线将 JP5 口与 51 单 片机芯片的 P3 口进行连接,每一个按键 便对应 P3 口的一个位,无需使用 8255 芯 片进行 IO 口拓展,编程控制较为容易。
四.I2C 总线的通信协议* 51 单片机可以通过 I2C 串行总线进行设备拓展,本次课设所使用的开发板上集成
的 DA 数模转换模块芯片便是通过 I2C 进行通信,使用前有必要掌握其基本协议。 I2C 串行总线只有两条信号线,一条是数据线 SDA,一条是时钟线 SCL,所有连接
A1 440 A2 880 A3 1762 A4 3525
#A4 466 #A3 933 #A2 1866 #A1 3734
B1 493 B2 988 B3 1799 B4 3957
二. 蜂鸣器发声原理: 蜂鸣器分两类,一类为有源蜂鸣器,只需加上一定
的电压即可发声;另一类为无源蜂鸣器,必须赋予一定 频率的脉冲才能发声。本次课设所采用的蜂鸣器为无源 蜂鸣器,电路连接如右图所示。
设计原理概述:
一. 电声原理基础:
声音拥有三大属性,即音阶(亦称音调)、音量与音色,其中音阶与音量的控制
较为简单。乐理中的每一个音阶都对应着一个固定频率,我们只需控制声波的频率即
可调整其音阶;音量则由声波的幅值决定,理论上也容易实现;音色的处理则要复杂
许多,不同于音阶和音量的调节只需对现有波形进行简单的尺度或幅值变换即可,音
3
保护现场
当前音阶演奏完毕?
N
是否处于暂停状态?
N
Y
7
调用获取乐谱子程序
N
Y
是否处于倒放模式?
乐谱指针 DPTR 地址增 2
乐谱指针低八位减 2 对 DPTR 减法进行补正
播放进度缓存单元更新
乐谱数据高八位送 A
拆取乐谱数据,音长倍率 信息存 A,音级信息存 B
N
Y
音长倍率为 00H?
音长倍率置 10H
控制字
│ └┬┘
│ └┬┘



└──── A/D 模式下通道选择


└──────── 自动增量标记位

└────────────── A/D 信号输入方式控制位
└────────────────── 模拟信号输出控制位
向 PCF8591P 发送的第二个字节为控制字字节,如上图所示,本课设的目标是让
C1、D2 以及半音阶的 C#1、D#2
等)。
乐谱数据音阶信息送 A
设置存放音阶频率信息的 寄存器单元首地址
8
调用音级处理子程序
由于每个乐谱单元需要有两个字节来储 存,因此在调整音乐播放的进度时,指 向乐谱地址的 DPTR 必须一次性连续增 加或减少两个单元,否则可能会出现将 存储音长和音级信息的数据被当做音阶 进行处理的情况。
I2C 总线在每传输一个字节的数据后都必须伴随有一个应答信号(A)。应答信号 由接收机向 SDA 数据线发出低电平信号产生,而与应答信号对应的时钟信号由主发送 机产生,且此时的 SDA 数据线必须处于高电平状态,为接收来自于接收机的应答信号 做准备。若此刻从机未向 SDA 发出低电平的应答信号,则被发送机识别为非应答信号 (A*),说明接收机并未成功接收前一字节的数据,主机应当重发一遍。
其工作与 D/A 转换模式下,因此只需给模拟信号输出控制位送 1 即可。
发送给 PCF8591P 的第三个字节数据才被存入 DAC 数据寄存器,通过改变输入的
二进制数据大小来调节其输出电压,起到数模转换的效果。
系统设计流程框图
主程序流程
开始
调用初始化子程序
1
2
调用键盘扫描子程序
调用进度控制子程序
3
1
色与声波的波形形状有关,即需要对输出波形本质的内容修改,处理起来难度较大。
附:各级音阶所对应的频率表如下:
C1 262 C2 523 C3 1047 C4 2095
#C1 278 #C2 554 #C3 1109 #C4 2219
D1 294 D2 587 D3 1175 D4 2351
#D1 311 #D2 622 #D3 1245 #D4 2492
而 AT89C51 的 IO 口只能输出方波的数字信号,因此需要调用数模转换模块对波形数 据进行处理。
PCF8591P 是单片、单电源低功耗的 CMOS 数据采集器 件,其引脚结构如右图所示,具有 4 个模拟输入 (AIN0~AIN3),一个模拟输出(AOUT)和一个串行 I2C 总 线接口(SCL、SDA);三个地址引脚 A0、A1、A2 用于编 程硬件地址;VDD 和 VSS 分别为正负电源电压输入,VREF 和 AGND 则分别连接参考电压和系统模拟地;EXT 控制选用内 部或外部的振荡器,OSC 则根据 EXT 的电平切换外部振荡 器信号输入/内部振荡器信号输出。
信息科学与工程学院 《微机应用设计与实践》
课程设计说明书
课题:单片机音乐播放器
班 级: 电科 1201 学 号: 3110209511 姓 名: 林焕膨 指导教师: 张国安 日 期: 2015.03.19
单音轨简易音乐播放器
课程设计目标
一.基础目标:通过汇编语言编程 51 单片机实现简单的单音轨音乐播放功能。 二.功能拓展:编程调用开发板的 8 位独立键盘实现对音乐播放中的曲目切换、暂停/播
到总线的设备的数据线都连接到 SDA 上,时间线都连接到 SCL。如下图所示:
不同于 SPI 总线结构,I2C 总线仅用一条数据线实现地址选择与主从机双向传输的 多重任务,因此虽然硬件结构简单,但使用起来的步骤较为繁琐,传输速率也因此略 逊于 SPI 总线结构。
I2C 总线上数据传送的信号由起始信号(S)、终止信号(P)、应答信号(A)和 非应答信号(A*)及总线数据位组成
设置堆栈底 设置中断开关 设置定时器 其他缓存位初始化 设置乐谱地址缓存
1
2
保护现场
获取 P3 口键盘信息
调用键盘检查子程序
4
Y
N
是否有按键按下?
储存当前按键信息
是否是松开瞬间?
Y N
执行对应按键事件地址
5
恢复现场
2
4
P3 口数据为 0FFH?
Y
N
清零 00H 标记位
将全部键盘标记位置 1
5
4
程序中用可位寻址单元 00H 和 01H
放、加速/减速、正放/倒放以及升降 Key 的功能。 三. 性能优化:尝试改善蜂鸣器发声的音色(未完成)
实验硬件设备
1. 戴尔灵越 15 7000 笔记本
一台
2. 普中 HC6800 EM3 单片机
一套
实验软件工具
1. Keil Vol 2.37 2. PZ-ISP 自动下载软件 V1.48 3. MyEclipse 2014 4. Guagle_wave 波形发生器
的组合共同记录键盘状态。
(00H)= 1 为有按键按下时的标记
(01H)= 0 为无按键动作时的标记
详细组合如下:
00H
01H
保持松开
0
0
保持按下
1
1
松开瞬间
0
1
按键 1 事件?
N
Y
按键 2 事件?
N
调用选曲
Y
子程序
按键 3 事件?
N
Y
6
EA = 1?
按键 4 事件?
N
F0 = 1?
Y N
Y
F0 = 1?
首尾地址写入缓存单元
N
R1 = 3?
N
6
1.选曲后将乐谱首尾地址分别放入当前播放进度 缓存位; 2.EA 直接作为暂停标记位,由于向蜂鸣器输送脉 冲的程序由定时器完成,即可通过开/关总中断 位来轻易控制音乐播放/暂停; 3.F0 作为正/倒放标记位,(F0)= 0 为正放, (F0)= 1 为倒放,在进度控制子程序中对该位 进行判断后决定播放状态; 4.播放音乐时每一拍持续时长由 T1 的延时子程 序控制,设 4AH 作为缓存单元,在 T1 中断程序 中将其送延时循环控制寄存器 R4,即可在键盘事 件中通过增减 4AH 的值来调节音乐播放速度; 5.在进度控制子程序中将根据 5AH 的值进行升降 Key 的操作,只需在键盘事件中对 5AH 的值进行 增减即可实现播放音阶的调节。
I2C 中将 SCL 处于高电平期间,SDA 线由高电平向低电平的变化瞬间定义为起始信 号(S),SDA 线由低电平向高电平的变化瞬间定义为终止信号(P)。只有在起始信 号与终止信号之间传送的其他信号才被视作有效,除了起始信号与终止信号之外,其 他信号的发送或接收时刻 SDA 线都应保持稳定,即信号必须在 SCL 线处于低电平期间 产生(SDA 线发生跳变),然后在 SCL 线处于高电平期间进行传送。
Y
第二级音阶
第一级音阶 地址送 DPTR
第四级音阶
第三级音阶 地址送 DPTR
地址送 DPTR
地址送 DPTR
乐谱低八位存入 4FH
按键 5 事件?
N
Y N
从乐谱首
播放继续
Y N
设置倒放
上调播放 速度
Y
下调播放
按键 7 事件?
Y
N
地址播放
播放暂停
速度
升 Key
降 Key
从乐谱尾 地址播放
设置正放
将全部键盘标志位置 0
6
5
选曲标记单元 R1 增1
R1 = 0?
Y
R1 置 0 Y
N
R1 = 1?
Y
N
R1 = 2?
Y
将 R1 的值所对应的乐谱
跳转音阶处理程序地址
9
AT89C51 中没有直接对 DPTR 进行递减
相关主题