基于单片机设计一能够发出中音八个音阶的音乐信号的电子琴,能够实现弹奏和音符显示功能。
具有8个音阶按键,每按下一个按键时,所对应的LED 点亮,音符进行显示。具体要求如下:
(1)具有8个音阶按键,每按下一个按键时,扬声器发声,所对应的LED 点亮。
(2)数码管显示当前的音符(用数字表示,简谱)。
(3)可通过单片机控制音量大小,并进行音量显示。
(4)音阶频率信号由单片机产生。
玩具电子琴实验报告
摘要:玩具电子琴工程使用了AVR系列的ATmega16单片机作为系统的主控芯片,设置了八个按键作为系统的音阶选择按键,按下对应的按键后,打开定时器,给与定时器不同的初值来达到产生不同频率的作用,同时亮起对应的LED灯和将频率脉冲信号给与蜂鸣器,使其产生相应频率的声响。同时,我们设置了一个1位数码管作为当前音阶的数据显示模块,我们可以通过数码管实时观察对应音阶的编号。
关键词:ATmega16 音阶 定时器
1 设计要求
该玩具电子琴系统可以通过八个不同的音阶按键选择发出八个对应的音阶信号,当按下相对应的音阶按键时,扬声器发出对应音阶频率的声响,同时对应音阶的LED灯亮起。同时设置一个显示的数码管用于显示当前的音阶是多少,可以显示当前扬声器对应的音量。八个音阶对应的频率都不相同,需要控制单片机IO口输出对应的频率来驱动蜂鸣器发出对应音阶的声响。
2 总体设计
2.1 系统组成
根据题目中的要求,系统共分为单片机处理模块、按键控制模块、数据显示模块、音阶显示模块。系统的总体框图如图2.1所示。
图2.1 系统的总体框图
(1)、单片机处理模块:用于接收与处理按键控制模块的输入信号,以对改变定时器的定时时间,从而改变输出波形的频率;同时驱动数据显示模块进行当前音阶阶数的显示。
(2)、按键控制模块:共有八个按键对应不同的音阶,对应不同音阶按键的按下则给单片机传递选择对应音阶的传递信号。
(3)、数据显示模块:数据显示模块分为数码管显示和LED灯显示,数码管显示当前音阶的阶数,在选中对应的音阶时亮起对应位置的LED灯以作为提示。
(4)、音阶显示模块:用于显示当前音阶信号的频率和对应音量的大小。
2.2 定时器的工作原理
单片机定时器其核心部分就是一个可预置数的计数器,计数器以16位计数器居多,而计数器的计数方式可以是加法方式也可以是减法方式。ATmega16单片机配置了3个定时器,它们是8位的定时器T/C0、8位的定时器T/C2和16位的定时器T/C1,这些定时器的工作原理基本相同,我们主要以8位定时器T/C0为例说ATmega16单片机定时器使用方法。
定时器主要包括:计数单元、输出比较单元、比较匹配单元这三部分。
(1)计数单元:
计数单元是一个可编程的双向计数器,在每一个计数时钟clkT0到来时,通过逻辑控制产生的计数、清零及方向控制信号实现计数器的加1、减1或清零操作。计数单元的框图如图2.2所示。
图2.2 计数端元框图
(2)输出比较单元:
T/C0运行期间,输出比较单元持续将计数寄存器TCNT0的计数值同输出比较寄存器OCR0的内容进行比较,一旦TCNT0的值等于OCR0的值,在下一个计数时钟脉冲到达时就置位TIFR寄存器中OCF0标志位,用来产生中断申请或供程序查询。输出比较单元的框图如图2.3所示。
图2.3 输出比较单元框图
(3)比较匹配单元
在引脚的方向寄存器DDRB.3定义为输出时,当寄存器TCCR0中的标志位COM0[1:0]中任何一位为1时,或门M1输出为1,多路数据选择器S3的通道1被选中,如果端口PB.3定义为输出时,三态门F2被打开,OC0将替代引脚PB3原来的I/O功能,端口PB.3上输出的就是波形发生器产生的波形。当COM0[1:0]都为0时,选择器S3的通道0被选中,PB.3口输出的则是端口PORT之值。比较匹配单元框图如图2.4所示。
图2.4 比较匹配单元框图
3 硬件设计
3.1 单片机处理电路
单片机选型用的是AVR系列ATmega16型单片机,ATmega16有如下特点:16K字节的系统内可编程Flash,512字节EEPROM,1K字节SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,三个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,可编程串行USART,有起始条件检测器的通用串行接口,8路10位具有可选差分输入级可编程增益的ADC,具有片内振荡器的可编程看门狗定时器,一个SPI串行端口,以及六个可以通过软件进行选择的省电模式。单片机处理电路的仿真图如图3.1所示。
图3.1 单片机处理电路仿真图
3.2 按键控制电路
按键控制电路共有八组按键,每组按键都对应着不同的音阶值,连接到单片机的PC1-PC8口,不按下的时候按键传递的是高电平信号,按下的时候按键传递的是低电平信号。按键控制电路的仿真图如图3.2所示。
图3.2 按键控制电路仿真图
3.3 数据显示电路
数据显示电路包括LED灯组模块和一位数码管显示模块,LED灯组在选择对应的音阶后亮起对应的灯,数码管显示模块则是显示选择音阶的阶数,一开始默认显示为0.数据显示电路的仿真图如图3.3所示。
图3.3 数据显示电路的仿真图
3.4 音阶显示电路
音阶显示电路为一个示波器和扬声器,示波器来观察不同音阶对应的波形频率,以及波形的脉冲大小,表示对应扬声器音量的大小。扬声器用来发出对应音阶的频率声响。音阶显示电路的仿真图如图3.4所示。
图3.4 音阶显示电路仿真图
4. 程序设计
4.1 程序顶层设计
按照题目中的要求,本设计的程序算法主要分为按键检测与控制程序、主程序。
4.2主程序设计
主程序的流程图如图4.1所示,首先进行初始化,然后检测对应的音阶按键是否按下,如果按下,则对应的音阶数据信号变为所按下按键的编号数,如果没有按下,则继续等待。按键按下后,则亮起对应位置的LED灯,然后数码管亮起对应的编号数字,然后根据音阶对应的频率值推出定时器的定时值,然后改变定时器的定时时间大小;接着输出对应频率的脉冲信号,驱动扬声器发出对应频率的音响,然后程序结束。
图4.1 主程序流程图
4.2 按键检测与控制程序设计
按键检测与控制程序的流程图如图4.2所示。首先进行按键初始化,然后检测相应的音阶按键是否按下,如果按下则进入按键中断程序,如果按下,则继续等待。进入按键中断程序后,则打开定时器,然后改变定时器的定时的大小,以满足对应音阶的频率值。
图4.2 按键检测与控制程序的流程图
5 仿真测试
5.1 LED与数码管显示测试
首先点击开始仿真,一开始首先按下按键1,数码管显示为1,第一个KED灯亮起,显示的仿真图如图5.1所示;然后按下按键4,数码管显示为4,第4个LED灯亮起,显示的仿真图如图5.3所示。结果表明该部分的设计是成功有效的。
图5.1 选择音阶1的数码管和LED显示图
图5.2 选择音阶4的数码管和LED显示图
5.2 音阶信号的频率与音量的测试
将示波器的输入端与扬声器的输入端连接到一起,就可以通过示波器观察音阶信号的波形。首先选择音阶1,打开示波器,测量得到信号的周期为3.8ms,对应频率约为263.2HZ,与题目中音阶1的频率262HZ误差仅为0.5%。同时一格的幅度为5V,波形正好占一格,所以波形的赋值为5V,表示其音量强度。波形显示图如图5.3所示。
图5.3 音阶1的频率与幅度显示图
然后选择音阶4,打开示波器,测量得到信号的周期为2.85ms,对应频率约为350.9HZ,与题目中音阶1的频率349HZ误差仅为0.5%。同时一格的幅度为5V,波形正好占一格,所以波形的赋值为5V,表示其音量强度。波形显示图如图5.4所示。
图5.4 音阶4的频率与幅度显示图