当前位置:
文档之家› 基于单片机的电子琴和音乐播放器设计
基于单片机的电子琴和音乐播放器设计
3
输入模块: 4*4 键盘
PIC32MX7 95F512L
芯片
输出模块: 喇叭
输出模块: 走马灯
5.1.2 硬件概述
本电路是由 PIC32MX795F512L 单片机为控制核心,具有键盘输入、液晶显示屏输出和 三极管驱动的喇叭构成的简易电子琴电路。
1.单片机
PIC32MX795F512L 型号单片机具有 USB、CAN 和以太网的高性能 32 位闪存,其所 拥有的主要资源有:
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以 2,即为半 周期的时间。利用定时器计时半周期时间,每当计时终止后就将相应的端口反相,然后重复 计时再反相。就可在各对应的引脚上得到此频率的脉冲。
我们小组利用 PIC32MX795F512L 的 80M 主频,运用 delay 函数,改变 delay 的时间以产 生不同频率的方法产生不同音阶。由于主频较高,没有一个音符的频率可以参考,于是我们 小组是利用自己的乐理知识将每个音校正。
4
RG1 RD3
RE0 RG14
RE1 RD4 RE3 RE2
3.输出模块(显示屏)
采用型号为 RT1602C 的液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字、图 形,显示多样,清晰可见, 与传统的阴极射线管相比,液晶显示屏具有占用空间小、低功耗、 低辐射、无闪烁、降低视觉疲劳等优点。字符型液晶屏是一种用 5*7 点阵图形来显示字符的 液晶显示器,根据显示的容量可以分为 1 行 16 个字、2 行 16 个字、2 行 20 个字等,最常用 的为 2 行 16 个字。
型号为 RT1602C 的液晶显示屏就是 2 行 16 个字。它有 16 个管脚,分别有电源地、电 源正、偏压信号、读写控制、使能控制、I/O 接口、背光控制等功能。它的读写操作、屏幕 和光标的操作都是通过指令编程来实现的。
VO 为显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高。为了简化电 路以及获得最好的显示效果,将 VO 端口直接接地。
4.2 音乐节拍的产生
每个音符使用 1 个字节,字节的高 4 位代表音符的高低,低 4 位代表音符的节拍,表 1-2 为节拍与节拍码的对照表。如果 1 拍为 0.4s,1/4 拍是 0.1s,只要设定延时时间就可求得 节拍的时间。假设 1/4 拍为 1DELAY,那么 1 拍应为 4DELAY,以此类推。所以只要求得 1/4 拍 的 DELAY,其余的节拍就是它的倍数,表 1-3 为 1/4 和 1/8 拍的时间设定。
PORTSetBits(IOPORT_E, BIT_1 | BIT_2 | BIT_3);
PORTSetBits(IOPORT_D, BIT_4 );delay(1);
//第一列
R0=0;R1=1;R2=1;R3=1; //第一行
if(C0==0)
//第一列
7
{ delay(10); if(C0==0) return 1;
关键词: PIC32MX795F512L 单片机,模块
一. 实验目的
1.通过学习使用单片机 PIC32,使学生增进对单片机的感性认识,加深对单片机理论方面的理 解。 2. 使学生掌握单片机的内部功能模块的功能和应用,如定时器/计数器、中断、I/O 口等。 3 使学生理解和掌握单片机应用系统的软件硬件设计过程、方法及实现,为以后设计和实现
PORTClearBits(IOPORT_E, BIT_0); delay(1);
//将C列全部设置为输入为高电平1
PORTSetPinsDigitalIn(IOPORT_E, BIT_1 | BIT_2 | BIT_3);
PORTSetPinsDigitalIn(IOPORT_D, BIT_4 );
能; (2).播放乐曲:又初始化菜单选择进入,进入后屏幕提示”SONGPLAYING”,同时事先在程序
中存入了 8 首不同的乐曲,可以一次通过键盘的按键来选择播放各首乐曲。在播放曲目中设 置了暂停键,按下即暂停,不按下则继续播放循环播放。
(3).自行弹奏:设计键盘上的 13 个键能够发出低音部 5,6,7,中音部 1,2,3,4,5,6, 7,高音部 1,2,3 总共 14 个音,要求按下按键发声,松开延时一段时间停止,中间再换按 其他键则发另一音调的声音。
每个音与 delay 时间对应如下表所示:
音符
Delay
中音 Do
8876
中音 Re
7476
中音 Mi
6456
中音 Fa
5886
中音 So
5036
中音 La
4036
中音 Xi
3236
高音 Do
3006
音符 高音 Re 高音 Mi 高音 Fa 高音 So 高音 La 高音 Xi 高音 Do
Delay 2446 1936 1666 1186 766 376 186
80MHz 的主频,1.56DMIPS/MHz,总线 32 位; USB 2.0 接口; 2 个带 1024 缓存的 CAN 2.0 接口; 8 通道 DMA 通道; 5 级流水线,哈佛架构; 1 个以太网接口; 512K 的 Flash,外加 12k 的启动 Flash; 128K 的 RAM; 可编程中断向量控制器; 16 个 10 位 AD 转换器; UART/SPI/IIC 等串行通信方式; 带 JTAG 调试口,具有休眠功能,节省能耗。
5.2 软件设计 5.2.1 程序流程图
开始
判断 LCD 按键 SW1
弹奏功能
SW3 播放功能
键盘扫描
键盘扫描
根据按键值在相应 数组中寻找对应键 值的音符频率
根据按键值含有七首 曲子的二维数组中寻 找对应键值的曲目
喇叭播放对 应音符
相应曲目节拍与音调通 过同一参数一一对应
喇叭播放相应
曲子
6
结束
5.2.2 各模块具体软件实现
1.键盘模块
运用行扫描的方式来判断是否有键按下及按下的是哪一键。首先令行都为输出并置为
零,列为输入且都为高电位,则只要有一列为低就是有键按下。再依次令每一行为低电平其
他行为高电平,检查每一列是否为低电平,行和列均为低电平所对应的交汇处即为按键按下
的地方。
#include "KEYBOARD.h"
//时延函数
PORTSetPinsDigitalOut(IOPORT_D, BIT_3 );
PORTSetPinsDigitalOut(IOPORT_E, BIT_0 );
PORTClearBits(IOPORT_G, BIT_14 | BIT_1 );
PORTClearBits(IOPORT_D, BIT_3);
R/W 为读写信号线,高电平时进行读操作,低电平时进行写操作。 GND 接电源,VDD 接正电源。 RS 为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。源代码中 write_cmd 函数为向 LCD 写入指令的函数,因此会有 RS=0;write_date 函数为向 LCD 写入 数据的函数,因此会有 RS=1。 E 端为使能端,当 E 端由高电平跳变成低电平,也就是下降沿时,LCD 模块进行命令执 行。 BL1 和 BL2 为设置 LCD 背光,分别接了电源与地。 DO~D7 八个为数据 I/O 口,按照表格内的接法相连。
脚号 1 2 3
符号 GND VDD V0
引脚功能以及接法 电源地 电源正 显示偏压信号
脚号 9 10 11
符号 D2 D3 D4
引脚功能以及接法 RF13 RB12 RB13
5
4
RS
数据/命令控制 RA7 12
D5
RB14
5
R/W
读/写控制 RA6
13
D6
RB8
6
E
使能信号 RF4
14
D7
RB9
7
D0
数据 I/O RF5
15
BL1 背光源正
8
D1
RF12
16
BL2 背光源负
4.输出模块(喇叭) 将一固定端口通过三极管 PNP 放大再连接喇叭构成我们的输出音频模块。喇叭一端接电
源一端接发射极,当有方波送入时,喇叭便发出相应频率的响声。
5.输出模块(走马灯) 将四个发光二极管与四个端口相连,另外一端通过小电阻接地,通过控制四个端口依次为高 电平使得四个灯依次点亮,实现走马灯的效果。
而键盘应具有以下几个基本功能: (1)去抖动:每个按键在按下或松开时,都会产生短时间的抖动。抖动的持续时间与键 的质量相关,一般为 5—20mm。所谓抖动是指在识别被按键是必须避开抖动状态,只有处 在稳定接通或稳定断开状态才能保证识别正确无误。去抖问题可通过软件延时或硬件电路解 决。 (2)被按键识别:如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方 法完成。常用的方法有行扫描法和线反转法两种。行扫描法的基本思想是,由程序对键盘逐 行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方 法在微机系统中被广泛使用。本实验采用扫描法。 (3)键码产生:为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建 立一个键盘编码表,通过查表获得被按键的键码。
2
四.实验原理
4.1 音频脉冲的产生
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利 用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非 常方便,我们可以利用单片机的定时/计数器来产生这样方波频率信号,因此,我们只要把 一首歌曲的音阶对应频率关系弄正确即可。
本小组的节拍是由 while 函数实现的,在每个节拍 delay 的时间中播放对应的音符,1/8 为 1,1/4 为 2,以此类推。而 while 循环的时间为节拍*310,这是我们经过反复试验确定的 最佳的节拍延时。