单片机设计-简易电子琴2

合集下载

单片机电子琴的设计

单片机电子琴的设计

单片机电子琴的设计单片机电子琴的设计随着科技的发展,单片机技术在电子领域的应用已经非常广泛。

其中,单片机电子琴是一种非常受欢迎的DIY 电子产品。

通过使用单片机,我们可以实现各种各样的功能,比如手风琴、钢琴、鼓等模拟音乐乐器。

那么,本文将详细讲解单片机电子琴的设计方法和实现过程。

一、硬件设计1.主板设计在单片机电子琴的设计中,主板是最核心的部件,因为它能够控制整个电子琴的运转。

主板设计所需要的元器件如下:(1)单片机:根据需要,选择一款传统型单片机或者ARM 处理器。

(2)输入输出模块:据需要选择合适的硬件平台,比如DAC/ADC、芯片集成的PWM 或外加的DAC 等。

(3)显示模块:可以选用LCD 模块或其它显示模块。

(4)驱动模块:选择一款合适的驱动模块,比如H 桥驱动器、音频功率放大器等。

2.键盘设计键盘设计是单片机电子琴中最为重要的元部件,因为它是与用户进行交互的部分。

键盘设计可能有不同的方法,但是本文所展示的方法采用的是与传统钢琴相似的电容式设计方式。

电容式键盘设计思路是这样的:在钢琴键盘下方安装一组与钢琴键盘平行的电容板。

当按下钢琴键时,会压缩键盘下方的电容板,导致电容板之间的电容值发生变化,这样就可以识别每个键位的编号。

作为键盘电容板有很多种选择,但选择正确的条件是符合设计条件。

在这里,我们用金属箔板作为电容板,每个键位产生的电容值被电路板上面的片式电容器取样。

所以,我们使用红外线LED 与光敏二极管来驱动键盘,金属箔板放在二者之间。

在不按键的情况下,光敏二极管可以检测到被金属箔板反射的红外线,导致电容板上的电容值稳定。

当按下键时,电容板之间的电容值发生变化,此时光敏二极管检测到的红外线信号也将会变化,通过这个变化可以确定该键是否被按下。

3.音频输出在单片机电子琴的设计中,音频输出也是非常重要的。

音频输出通常使用功率放大器和喇叭来完成,我们也可以通过DAC/ADC 或PWM 来实现音频输出。

简易电子琴设计(单片机课程设计)

简易电子琴设计(单片机课程设计)

简易电子琴设计用单片机控制扬声器,弹奏出一段音乐。

一、预备知识:乐曲由不同音符组成,各音符都有对应的频率,频率不同的方波加在扬声器上,就产生一个持续的音符。

利用不同的音符、音高、音长组合,就可产生想要的音乐。

对于单片机来说,利用其定时器产生不同频率的方波非常方便,以11.0592、22.1184MHz 晶振(实验箱)为例,列出高中低音符与单片机定时器初值如下表所示注意:1、一个音段常见由7个标准音组成(1do、2ri、3mi、4fa、5sol、61a、7si),但实际乐曲中还有一些介于2个标准音之间的音,即半度音,有 1.5、2.5、4.5、5.5、6.5共5个,所以完整的1个音段有12个音。

2、选择简谱时,尽量选用只含7个标准音的乐曲,而且要选C大调的(简谱左上角标着1=C X/4 ),否则各音符的频率要做相应的变化。

10二、设计目的了解扬声器的发声原理,进一步熟悉定时器、键盘扫描、LED 显示电路的工作原理及编程方法。

三、设计内容1 、设计键盘、LED 显示、扬声器驱动电路原理图;2、设计程序流程图;3 、编程调试,利用按键作为琴键,按下不同的键发出相应的音调,同时在LED 最右位显示对应键号值。

四、参考接线扬声器的SPK+ 端接VCC,SPK 负端连接到某一I/O 口。

五、设计步骤程序:KEYBUF EQU 30HSTH0 EQU 31HSTL0 EQU 32HTEMP EQU 33HORG 0000LJMP MAINORG 000BHLJMP INT_T0MAIN:MOV TMOD,#01HSETB ET0SETB EAWAIT:MOV P3,#0FFHCLR P3.4MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY1MOV A,P3ANL A,#0FHCJNE A,#0EH,NK1MOV KEYBUF,#0LJMP DK1NK1:CJNE A,#0DH,NK2MOV KEYBUF,#1LJMP DK1NK2:CJNE A,#0BH,NK3MOV KEYBUF,#2LJMP DK1NK3:CJNE A,#07H,NK4MOV KEYBUF,#3LJMP DK1NK4:NOPDK1:MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK1A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK1ACLR TR0NOKEY1:MOV P3,#0FFHCLR P3.5MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY2MOV A,P3ANL A,#0FHCJNE A,#0EH,NK5MOV KEYBUF,#4LJMP DK2NK5:CJNE A,#0DH,NK6MOV KEYBUF,#5LJMP DK2NK6:CJNE A,#0BH,NK7MOV KEYBUF,#6LJMP DK2NK7:CJNE A,#07H,NK8MOV KEYBUF,#7LJMP DK2NK8:NOPDK2:MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK2A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK1ACLR TR0 NOKEY2:MOV P3,#0FFHCLR P3.6MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY3MOV A,P3ANL A,#0FHCJNE A,#0EH,NK9MOV KEYBUF,#8LJMP DK1NK9:CJNE A,#0DH,NK10MOV KEYBUF,#9LJMP DK1NK10:CJNE A,#0BH,NK11MOV KEYBUF,#10LJMP DK1NK11:CJNE A,#07H,NK12MOV KEYBUF,#11LJMP DK3NK12:NOPDK3:MOV A,KEYBUFMOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK3A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK3ACLR TR0NOKEY3:MOV P3,#0FFHCLR P3.7MOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4LCALL DELAYMOV A,P3ANL A,#0FHXRL A,#0FHJZ NOKEY4MOV A,P3ANL A,#0FHNK13:NK14: NK15:NK16: DK4: CJNE A,#0EH,NK13 MOV KEYBUF,#12 LJMP DK4CJNE A,#0DH,NK14 MOV KEYBUF,#13 LJMP DK4CJNE A,#0BH,NK15 MOV KEYBUF,#14 LJMP DK4CJNE A,#07H,NK16 MOV KEYBUF,#15 LJMP DK4NOPMOV A,KEYBUF MOV B,#2MUL ABMOV TEMP ,AMOV DPTR,#TABMOVC A,@A+DPTRMOV STH0,AMOV TH0,AINC TEMPMOV A,TEMPMOVC A,@A+DPTRMOV STL0,AMOV TL0,ASETB TR0DK4A:MOV A,P3ANL A,#0FHXRL A,#0FHJNZ DK4ACLR TR0NOKEY4:MOV DPTR,#LED_TABMOV A,KEYBUFMOVC A,@A+DPTRMOV P1,ALJMP MAINDELAY:MOV R6,#10 D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1RETINT_T0:MOV TH0,STH0MOV TL0,STL0CPL P2.0RETITAB:DW 62018,62401,62743,62895DW 63185,63441,63670,63774DW 63966,64138,64216,64360DW 64489,64603,64655,64752 LED_TAB:DB ;低1,2,3,4;低5,6,7 ,中1;中2,3,4,5;中6,7 ,高1,2至9 共阴3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0DB 77H, 7CH, 39H, 5EH, 79H, 71H;A 至F END原理图:EXFJldlVTAll■匚AIE:pc.ii*r 1 ■HM口1 店MinPE.MiAE.-iF匚ar屋理ix傅?1 ALVEffSviC rzarti*i"Pl.1吒灯血fl J叭孑n1)r i J raji'TITIf irf ri.hTC和止■Fl?mfio。

单片机应用课程设计--简易电子琴设计

单片机应用课程设计--简易电子琴设计
{
delay(5);
if (key1 == 0)
{
key_in_flag = 0;
key_value = 4;
}
}
else
{
key_in_flag = 1;
}
key8 = 1;
key7 = 0;
if (key4 == 0)
{
delay(5);
if (key4 == 0)
{
key_in_flag = 0;
参考文献
[1] 赵鑫,蒋亮,齐兆群.数字电路设计[M].北京机械工业出版社,2005年6月第一版
[2] 苏家健,曹柏荣,汪志锋.单片机原理及应用技术[M].高等教育出版社
[3] 李朝青.单片机原理及接口技术[M].北京:北京航天航空大学出版色,2001
[4] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004
{
key_in_flag = 0;
key_value = 2;
}
}
else
{
key_in_flag = 1;
}
if (key2 == 0)
{
delay(5);
if (key2 == 0)
{
key_in_flag = 0;
key_value = 3;
}
}
else
{
key_in_flag = 1;
}
if (key1 == 0)
方案二: 采用AT89C51单片机进行控制,由于AT89C51不具备ISP功能, 因此Atmel公司已经停产在市面上已经不常见,况且其ROM只有4K在系统将来升级方面没有潜力。
方案三:采用AT89S52单片机进行控制,由于其性价比高,完全满足了本作品智能化的要求,它的内部程序存储空间达到8K,使软件设计有足够的内部使用空间并且方便日后系统升级,使用方便,抗干扰性能提高。

单片机简易电子琴课程设计

单片机简易电子琴课程设计

单片机简易电子琴课程设计简易电子琴实验一、课程设计目的与要求1、掌握蜂鸣器的使用方法;2、掌握蜂鸣器的不同发音的方法;3、通过本次课程设计加深对单片机课程的认识和掌握,对单片机的应用做进一步了解。

二、课程设计设备STAR 序列试验仪一套、PC 机一台三、课程设计内容1、简易电子琴原理(1)蜂鸣器输入不同频率的方波,会发出不同的声音;(2)通过按键,由单片机控制产生不同频率的方波,从而发出不同的声音。

2、课程设计过程(1)通过单片机,是G6区的1-7号键由低到高发出1-7的音阶。

四、课程设计原理图1234567P1.0P1.1P1.2P1.3P1.4P1.5P1.6VccBuzzerLS12KR15.1KR28550Q60.01uFC40Ctrl100R11P1.7五、课程设计框图主程序:节拍1子程序(手动按键时用) 节拍2子程序(手动按键时用)0FFH->P1 开始 播放一段音乐 P1.0=0调用节拍1子程序 N Y 调用节拍2子程序 Y调用节拍3子程序Y 调用节拍4子程序 调用节拍5子程序 调用节拍6子程序 调用节拍7子程序P1.1=0P1.2=0N P1.3=0Y Y Y P1.4=0P1.5=0N P1.6=0Y N N N 0->P1.7 延时180us 1->P1.7 延时190us开始 返回0->P1.7 延时200us 1->P1.7 延时200us开始 返回节拍3子程序(手动按键时用)节拍4子程序(手动按键时用)开始0->P1.7延时180us1->P1.7延时170us返回开始0->P1.7延时160us1->P1.7延时160us返回节拍5子程序(手动按键时用)节拍6子程序(手动按键时用)开始0->P1.7延时150us1->P1.7延时150us返回开始0->P1.7延时140us1->P1.7延时140us返回节拍7子程序(手动按键时用)节拍1子程序(自动放音时用,时间约0.2s )节拍2子程序(自动放音时用,时间约0.2s ) 节拍3子程序(自动放音时用,时间约0.2s )0->P1.7 延时220us 计数器-1 1->P1.7 延时210us 1100->计数器 N计数器-1=0返回Y 0->P1.7 延时130us 1->P1.7 延时130us开始 返回开始节拍4子程序(自动放音时用,时间约0.2s ) 节拍5子程序(自动放音时用,时间约0.2s )节拍6子程序(自动放音时用,时间约0.2s ) 节拍7子程序(自动放音时用,时间约0.2s )NY 0->P1.7 延时170us 计数器-1 1->P1.7 延时170us开始 1300->计数器 计数器-1=0返回Y N0->P1.7 延时180us 计数器-1 1->P1.7 延时180us 开始 1250->计数器 计数器-1=0返回0->P1.7 延时185us 计数器-1 1->P1.7 延时180us开始 1200->计数器 Y N计数器-1=0返回NY 0->P1.7 延时190us 计数器-1 1->P1.7 延时190us 开始 1150->计数器 计数器-1=0返回六、课程设计步骤1、主机连线说明D1区:Ctrl — A3区:P1.7 G6区:JP74 —A3区:JP51(P1口)2、运行程序,按G6区的1-7号键,输出7种音阶。

基于单片机的电子琴设计

基于单片机的电子琴设计

基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。

(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。

1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。

2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。

3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。

4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。

5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。

三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。

时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。

(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。

将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。

(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。

为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。

(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。

(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。

四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。

简易电子琴单片机课程设计

简易电子琴单片机课程设计

简易电子琴单片机课程设计一、课程目标知识目标:1. 让学生掌握简易电子琴单片机的基本原理和组成结构,理解其工作流程。

2. 使学生了解并掌握电子琴音阶与音符的关系,能够识别常见音符及其对应的单片机程序编写方法。

3. 帮助学生掌握基础编程知识,能够使用相关软件编写简易电子琴程序。

技能目标:1. 培养学生运用单片机进行音乐创作的能力,能够编写并演奏简单曲目。

2. 提高学生动手实践能力,能够独立完成简易电子琴单片机的组装和调试。

3. 培养学生团队协作和问题解决能力,能够在团队中共同完成课程项目。

情感态度价值观目标:1. 培养学生对电子琴音乐创作的兴趣和热情,激发学生探索音乐世界的欲望。

2. 培养学生勇于尝试、不断探索的精神,增强面对困难的勇气和信心。

3. 培养学生环保意识和创新精神,关注科技发展,认识到科技进步对音乐产业的影响。

本课程针对高年级学生,结合学科特点,以实用性为导向,将理论知识与实践操作相结合。

课程目标旨在让学生在学习过程中,既能掌握电子琴单片机的基本知识,又能提高动手实践和团队协作能力,同时培养对音乐的热爱和科技创新意识。

通过分解课程目标为具体学习成果,为后续教学设计和评估提供明确方向。

二、教学内容1. 简易电子琴单片机原理及结构- 了解单片机的基本概念及功能- 学习简易电子琴单片机的组成结构及工作原理- 教材章节:第三章 单片机原理及其应用2. 音阶与音符关系- 掌握音阶与音符的基本概念及对应关系- 学习简易电子琴音阶与单片机程序编写方法- 教材章节:第四章 音乐基础与编程3. 编程知识与软件应用- 学习基础编程知识,如C语言基本语法、数据类型等- 掌握相关编程软件的使用,如Keil、Proteus等- 教材章节:第五章 单片机编程与仿真4. 动手实践与项目制作- 完成简易电子琴单片机的组装、调试与演奏- 课程项目:团队协作完成一首简单曲目的电子琴演奏- 教材章节:第六章 单片机项目实践5. 回顾与拓展- 对所学知识进行总结回顾,巩固学习成果- 探讨简易电子琴单片机的拓展应用,如与其他智能硬件的结合- 教材章节:第七章 单片机拓展应用教学内容根据课程目标制定,保证科学性和系统性。

单片机课程设计--简易电子琴设计

单片机课程设计--简易电子琴设计

单片机课程设计--简易电子琴设计郑州轻工业学院计算机与通信工程学院单片机与接口技术课程设计总结报告设计题目:简易电子琴设计学生姓名:毛二松系别:计算机与通信工程学院专业:电子信息科学与技术班级:09-01学号:540907020127指导教师:韩雪琴杨永双2011年12月26日简易电子琴设计电子琴概述这次设计的电子琴与市场上的电子琴相比虽然音色逊了一点,但是其物美价廉,功能强大,携带方便,深受大家喜欢。

此次课程设计的电子琴是有4*4矩阵键盘来实现发音,其中4个键是功能键,剩下的12键实现真正的发音。

此外在电子琴的功能上又加上了音乐播放功能、选择歌曲、暂停以及录音回放功能,使电子琴变得更强大。

让电子琴不再是简单的弹出音调简单的电子琴,而是一个功能齐全的电子琴。

本设计功能1.通过矩阵键盘能够弹出美妙的音乐。

2.通过功能切换,能够切换到音乐播放器功能3.能够把弹出的音乐录制下来,并且还能够回放出来。

本设计的仿真图引脚描述:矩阵键盘接的是P3口,显示部分的段控制口接的是P0口,位控制口接的是P2.0、P2.1、P2.2、P2.4、P2.5,蜂鸣器接的P2.3口。

各种功能键如图所示。

设计的流程图开始初始化功能选择进入电通过键盘弹音乐是否录音是否回放返回进入音乐播放是否选是否暂停返回我负责的模块主程序:也就是本程序的整体构造、功能构造。

主程序程序:void main(){init();//初始化while(1){keyscan();//调用键盘扫描display();//显示if(key_function==1)//如果选择音乐播放{switch(count){case 1:play(music1,music1_L);break;//播放第一首case 2:play(music2,music2_L);break;//播放第二首case 3:play(music3,music3_L);break;//播放第三首}}else //否则选择为电子琴{if(key_record==2)//判断是否回放replay(record,record_L);}}}录音功能。

基于单片机的电子琴设计

基于单片机的电子琴设计

基于单片机的电子琴设计电子琴是一种常见的乐器,通过电子元件和技术实现各种声音效果和音调的变化。

基于单片机的电子琴设计,使用单片机作为核心控制芯片,可以实现各种音色的生成、乐曲演奏和音调调整等功能。

一、基本原理1.音源生成:通过单片机的计算和控制,生成各种音色的数字波形信号。

可以使用PWM波形发生器,通过控制占空比实现不同音调的发声。

2.按键输入:通过按键进行音符的选择和演奏,按键可以通过矩阵键盘或编码器等方式实现,通过单片机的GPIO口读取按键输入信号。

3.音量控制:通过调节音量电阻或数字控制器,调整输出音量大小。

4.音色调整:通过改变生成波形的参数和算法,实现不同音色效果的切换和调整。

二、硬件设计1.单片机:选择合适的单片机,如STC89C52或ATmega328P等,作为控制核心。

2.键盘:选择合适的键盘结构和按键数量,如矩阵键盘或编码器。

3.音源:可以选择合适的音源模块或芯片,如AD9833,用于生成各种音色的波形信号。

4.音量控制:将数字音频信号通过运放进行放大,通过音量电位器或数字控制器调节输出音量大小。

5.音箱:选择合适的音箱,用于放大和放出音频信号。

三、软件设计1.按键扫描:通过单片机的GPIO口读取按键输入信号,实现按键的扫描和检测。

2.音符和音调处理:将按键输入映射为相应的音符号,通过生成不同的波形并控制频率实现不同音调的发声。

3.音量控制:通过改变音源模块的输出幅度或控制运放的增益,实现音量的调节。

4.音色调整:通过改变生成音色的参数和算法,实现不同音色效果的切换和调整。

5.乐曲演奏:通过编写相应的乐曲和音符的编码和播放算法,实现各种乐曲的演奏功能。

6.界面显示:可以通过液晶显示屏或LED显示器,实现界面的显示和操作。

四、功能扩展1.录音和播放:在单片机上添加存储模块(如SD卡或FLASH芯片),实现录音和播放功能,可以录制和回放演奏的音乐。

2.MIDI接口:添加MIDI接口,通过MIDI合成音源模块,实现与其他乐器和设备的互联。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

九、心得体会
在理论课上,我们学习了一些关于 51 单片机的知识。这次实验课,把课本 上的知识拿到实际中去应用, 其中还是遇到了很多之前想象不到的问题。但是通 过自学,我们完成了不少课堂上并没有掌握的内容。不论是程序上的,还是硬件 电路连接上的。从自己亲自动手实践的过程中,我们团队成员都能尽自己的一份 力,大家共同协作,共同发现问题,解决问题。 这次实验中,从知识上,对 51 单片机的应用有了更深入的了解,对汇编编 软件(keil,wave6000)以及烧录软件 Superpro 的应用有了基本的了解和实践; 从个人,很大程度上锻炼了自己的动手能力,熟练焊接技术,布线技术以及对万 用表,示波器,剥线钳等的使用;从团队,极大的锻炼了我们团队协作的能力, 每个人的分工与协调,共同进步。通过这次实验课,我们不仅有拿到作品的成就 感,又增加了团队意识。希望以后能有更多这样的机会,能充分的将知识转化为 物质财富。是一种很美妙的享受。
a=shengri_tone[m]; s=shengri_beat[m]; tone1=yinfu[2*a-2]; tone2=yinfu[2*a-1]; EA=1; while(s--) { delay(); LED=1; m++; if(m>=33) return; } } /*****演奏子程序2*****/ void play2(void) { unsigned char m=0; unsigned char s; unsigned char a=1; while(1) EA=0; LED=0; a=yanshi_tone[m]; s=yanshi_beat[m]; tone1=yinfu[2*a-2]; tone2=yinfu[2*a-1]; EA=1; while(s--) { delay(); LED=1; m++; if(m>=32) return; } } /*****按键检测*****/ void check_key(void) { P2=0xff; P3=0xff; switch(P2) } { }
二、作品功能:
★可以演奏出基本的8种音调:Do、Re、Mi、Fa、SO、La、Si、高音Do; ★演奏的同时会以数字显示出当前的音调,利于培养乐感; ★可以自动演示这8个音调; ★可以演奏内置生日快乐歌。 ★自动演奏时,LED进行节拍指示。使用方法:通过按下方的8个音调键演奏 乐曲;按演示按钮可以自动演奏这8种音调;按奏乐按钮可以演奏生日快乐 歌;在自动演示和奏乐的过程中按停止键则中断演奏;音量调节按钮可以选 择音量大和小。
三、基本原理:
一定频率产生声音,频率高低决定音调。利用单片机输出脉冲信号经放大后 送给喇叭,便可发出声音。本制作中巧妙地利用了单片机的定时器,让定时器中 断一次就对改变喇叭的状态一次,即形成矩形方波,这也是数字电路产生声音的 方法。 本作品使用AT89S52型单片机,ISP在线下载使得修改芯片里面的内容相当 简单,便于作品的升级与优化。 由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这 样我们可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单 片机来产生不同的频率非常方便, 我们可以利用单片机的定时/计数器 T0 来产生 这样方波频率信号, 因此, 我们只要把一首歌曲的音阶对应频率关系弄正确即可。 本次设计中单片机晶振为 12MHZ,那么定时器的计数周期为 1MHZ,假如 选择工作方式 1,那 T 值便为 T= 216--5﹡105/相应的频率 ,那么根据不同的频 率计算出应该赋给定时器的计数值,列出不同音符与单片机计数 T0 相关的计数 值如下表所示: 音符 中 1 DO 中 2 RE 中 3 M 中 4 FA 中 5 SO 中 6 LA 频率(HZ) 523 587 659 698 784 880 简谱码(T 值) 64580 64684 64777 64820 64898 64968
中 7 SI
988
65030
采用查表程序进行查表时, 可以为这个音符建立一个表格,有助于单片机通过查 表的方式来获得相应的数据: TABLE DW 64580,64684,64777,64820,64898,64968,65030
四、实验目的:
(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的 认识,独立对其进行测试与检查。 (2)熟悉 8051 单片机的内部结构和功能,合理使用其内部寄存器,能够完 成相关软件编程设计工作。 (3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能 故障进行分析,及时修改相关软硬件。 (4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面 得到较全面的锻炼和提高。
0x00,0x00 //音符间隔,只要间隔时间小于65ms时,用作拍子之间的短暂停顿
24,1,24,48,48,48,72,5, 24,1,24,48,48,48,48,72,5, 24,1,24,48,48,48,72,5 /*****自动演示音调表*****/ unsigned char code yanshi_tone[]={ 8,0,7,0,6,0,5,0,4,0,3,0,2,0,1,0}; /*****自动演示节拍表*****/ unsigned char code yanshi_beat[]={ 48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,2, 48,1,48,1,48,1,48,1,48,1,48,1,48,1,48,2}; /*****15ms延时子程序,用于节拍*****/ void delay(void) { unsigned char n=15; while(n--) { unsigned char i; for(i=0;i<125;i++); } } /*****定时器0初始化*****/ void initTimer(void) { TMOD=0x01; TH0=tone1; TL0=tone2; } /*****定时器0中断服务程序*****/ void timer0(void) interrupt 1 { TH0=tone1; TL0=tone2; SPK=~SPK; } /*****演奏子程序1*****/ void play1(void) { unsigned char m=0; unsigned char s; unsigned char a=1; while(1) { EA=0; LED=0; //取反,以产生方波 //定时器0,工作方式1;定时器1,工作方式1 1,0,2,0,3,0,4,0,5,0,6,0,7,0,8,0, //节拍, 即tone表各音调的延时};
五、硬件电路:
1.八颗独立按键加上两颗功能键,按键需接上拉电阻。S1~S8 为音调按钮,S9、 S10 为演奏按钮:
2.喇叭驱动电路,speaker接单片机的P1.0口,喇叭安装在箱体中:
3.LED电路,led接单片机的P1.1口。注意,这里的LED是那种通电自己会闪的, 这样才能有视频中的效果:
我们完成了软件的设计。用仿真软件进行模拟没有错误。OK~ 2010 年 3 月 29 日星期一 我们将程序考到了 51 单片机上,进行产品测试,但是没有成功。喇叭不响…… 然后我们将单片机的输出端接示波器,当键位按下后可看波形改变,说明单片机 没有问题。对电路检查没有发现错误,分析原因可能是电路的电压问题。经过讨 论决定放弃该电路,重新焊接功放电路。 2010 年 4 月 1 日星期四 我们重新焊接了电路,测试后成功。但是无法完成放音功能。调试程序…… 2010 年 4 月 日星期五 进行最后调试,预期功能可以实现。设计成功! !
八、调制日志
2010 年 3 月 22 日星期一 我们领了实验装置,并对已安装好的键盘进行上电( +5v)测试,发现其为低电 平触发。并对七段 LED 显示管进行引脚测试。晚上上网查了一下 LM386 的外部 接口电路。 2010 年 3 月 24 日星期三 按照 LM386 的接口电路图,在实验板上进行焊置安装,但是发现其供压为+16v 而实验要求是 5v,不知道能否工作。 2010 年 3 月 27 日星期六 我们对 LM386 功放电路进行加压(+5v)测试发现,其能工作:即输出端可看到 余弦波形,但是振幅比较小,而且不够稳定。 这天时间充裕我们又把七段 LED 显示器进行焊接,加压测试,可以正常工作。 2010 年 3 月 28 日星期日
4.数码管电路,选用共阳数码管,A~DP依次接单片机P0.0~P0.7:
六、软件设计 /**************多功能电子琴 简要说明:P1.0口输出各音调的频率方波 本程序可方便地更改内置音乐的内容 编写:FengShuo,Esen 更新时间:10/03/39晚****************/ #include<reg52.h> #define SPK P1_0 LED P1_1#define shumaguan P0 unsigned int tone1,tone2; unsigned char code yinfu[]={0xfb,0xe9, 0xfc,0x5c, 0xfc,0xc1, 0xfc,0xef, 0xfd,0x45, 0xfd,0x92, 0xfd,0xd0, 0xfd,0xee, }; /*****生日快乐歌音调表*****/ unsigned char code shengri_tone[]={ 1,0,1,2,1,5,4,0, 1,0,1,8,6,4,3,2,0, 7,0,7,6,4,5,4,0 /*****生日快乐歌节拍表*****/ unsigned char code shengri_beat[]={ 24,1,24,48,48,48,72,5, //0代表不发声,即停顿;数字即为音调}; 1,0,1,2,1,4,3,0, /*Re*/ /*Mi*/ /*Fa*/ /*So*/ /*La*/ /*Si*/ /*Do*/ /*Do*/ //定义方波输出口#define //定义数码管段码输出
相关文档
最新文档