南京邮电大学 通达学院 51 protues 课程设计 简易电子琴 实验报告
- 格式:doc
- 大小:215.50 KB
- 文档页数:12
电子琴的实验报告 WTD standardization office【WTD 5AB- WTDK 08- WTD 2C】单片机课程设计设计题目电子琴指导老师:苏参与实验者: moxiaoxiao专业:统本电信0801地点:3#楼北楼605电子琴一.设计目的:(1).培养综合运用知识的能力(2).朋友查阅资料,使用工程设计标准及编写设计文档的能力.(3).掌握单片机应用系统的设计方法.(4).提高计算机绘图能力二.设计任务:利用DP51PROC实验系统上的定时器/计数器,按键和蜂鸣器单元。
用单片机I/O口线控制蜂鸣器发出不同的音调,程序检测按键状态,7个按键中某一键按下时,蜂鸣器对应标称音阶.三.设计与调试环境KEIL uVision2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM ,汇编和 C 语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。
1:按下面的步骤建立一个项目:图 1-4 选取芯片图 1-5 新建程序文件(1)点击图1-5 中的 3 保存新建的程序,也可以用菜单 File-Save 或快捷键 Ctrl+S 进行保存。
因是新文件所以保存时会弹出类似图1-3 的文件操作窗口,我们把第一个程序命名为,保存在项目所在的目录中,这时程序单词有了不同的颜色,说明 KEIL 的 C 语法检查生效了。
如图1-6 鼠标在屏幕左边的 Source Group1 文件夹图标上右击弹出菜单,在这里可以做项目中增加减少文件等操作。
我们选“Add File to Group‘SourceGroup 1’”弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已加到项目中了。
这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。
基于51单片机的16键电子琴课程设计报告.docx
本课程设计旨在设计一款基于51单片机的16键电子琴,利用该电子琴进行乐器演奏
练习。
课程设计的目标是通过51单片机的控制,使乐器的按键实现发声功能,即在按下按
键后,将发出相应的音调,且声音质量较为清晰、拒绝杂音;同时,设计外设及程序使乐
器美观并能在一定程度上体现主人的个性操作习惯,体现出一定程度上的可定制性和稳定性。
课程设计使用MCS-51单片机作为核心芯片,搭建计算机与电子琴模块之间的桥梁,
通过控制要求,配备8位延时定时器、8位计数器/比较器和定时/计数器模块的硬件模块,通过定时/计数器去控制音色的发声数量,再加以PCB板设计,完成各模块的焊接、网络
接线,通过连接各功能模块,实现51单片机控制芯片,实现程序控制电子琴的具体功能。
最后,课程设计尝试完成女声、爵士电子琴等曲目,通过实验,充分验证设计的可行性,并发现一些在设计过程中的不足,如欠缺外设模块,无法实现一些特殊功能等,给出
相应的改善思路,以供设计实现。
在设计过程中,综合运用硬件电路设计、程序设计思维,构建整个系统的总体构架,
实现相应的电子琴演奏功能,使得本次课程设计取得了一定的成果。
电子琴设计报告一、实验目的1.更深刻的了解、学习8051单片机的发声原理,利用定时器可以发出不同频率的脉冲,不同频率的脉冲经喇叭驱动电路放大滤波后,就会发出不同的音调。
2.其次,定时器按设置的定时参数产生中断,这一次中断发出脉冲低电平,下一次反转发出脉冲高电平,由于定时参数不同,所以发出不同频率的脉冲。
3.进一步熟悉定时器的编程方法和定时初值的计算,进一步熟悉键盘扫描电路的工作原理和编程方法,了解单片机芯片的接口技术。
二、实验要求1.能够通过键盘演奏音符。
2.能够保存演奏的音乐,并实现回放。
3.有音调调整功能(如:C调,G调)。
4.自由发挥其他功能。
5.要求有单片机硬件系统框图,电路原理图,软件流程图。
三、实验基本原理简易电子琴有主控、蜂鸣器、键盘输入、电源四部分组成。
主控部分以AT89S52 为核心,用C 语言编程,充分运用AT89S52 的8k字节闪烁可编程可擦除只读存储器及其丰富的I/O 口,实现了对键盘数据的采集,和对蜂鸣器声音的控制;键盘输入部分采用4×4的键盘键盘输入,可以实现多个音调;供电部分可对整个电路进行供电。
经测试,整机基本实现预计功能,可以实现键盘演奏音符、调整音调、保存并回放的功能。
四、实验设计分析根据实验所要求实现的功能设计实现该项实验设计的软件电路及硬件电路。
五、实验要求实现A.电路设计1. 整体设计计划利用AT89S52 单片机的功能结合C 语言编程,实现电子琴播放音符等的简单功能,然后结合AT89S52 单片机的控制功能,利用蜂鸣器将输入表达出来,结合程序编制过程中,对各个I/O 的利用设置了键盘的扫描读入,结合电子琴需要多键位的现实,加入了4×4 键盘输入,达到了预期的效果。
2.分块设计1.控制模块AT89S52单片机是美国ATMEL公司生产的低功耗,高性能CMOS 8位单片机,片内含有8kb的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。
简易电子琴实验报告引言:本实验旨在设计和制作一台基于微控制器的简易电子琴,通过按下不同键盘上的按键产生不同音调,从而实现音乐的演奏。
电子琴采用的主要器件为微控制器、音频发声模块以及按键电路。
一、实验目的1.学习和理解数字音乐技术的基本原理;2.掌握微控制器的编程方法和音频发声的实现技术;3.熟悉电子琴的工作原理和设计过程。
二、实验器材1. 单片机:Arduino Uno;2.音频发声模块;3.面包板;4.按键;5.电阻、电容等元件;6.连线和连接器。
三、实验步骤1. 将Arduino Uno连接至音频发声模块,确保连接正确并稳定。
2.在面包板上连接按键电路,将按键与单片机的引脚相连。
3. 编写Arduino Uno的程序,实现按键按下时的音调发声。
4.上电,并测试按键是否能够产生正确的音调。
四、实验结果经过实验得到的结果如下:1.按下不同按键,电子琴会产生不同的音调。
2.通过改变程序中相应按键的频率值,可以调整音调的高低。
五、实验分析1.通过对单片机的编程,实现了按键按下时的音调发声,成功地实现了电子琴的基本功能。
2.实验中使用了音频发声模块,利用其内置的DAC(数字模拟转换器)实现了数字音频信号的模拟输出。
六、实验总结和心得体会通过本次实验,我对电子琴的工作原理和设计过程有了更深入的了解。
学习和掌握了单片机的编程方法和音频发声的实现技术,提高了我的实验能力和动手能力。
同时,也对数字音乐技术有了初步的认识。
在今后的学习和工作中,我将继续深入研究和应用这些知识,为电子音乐的发展做出自己的贡献。
一、任务目的通过电子琴的设计与制作,进一步熟悉单片机内部定时器、I/O口、中断、键盘接口二、设计要求用单片机设计一个12键的电子琴,具体要求:根据提供的单片机键盘接口模块电路,加上必要的外部电路,设计出电子琴的硬件电路,编写软件,用Proteus 进行仿真实验,然后进行实物的软硬件调试,并撰写符合要求的实训报告。
三、系统硬件电路设计该系统可分为最小系统、键盘电路、发声部分等几个单元电路1、最小系统。
最小系统包括时钟电路和复位电路。
时钟信号的产生:在MCS-51系列单片机内部有一个高增益反相放大器,其输入端引脚为XTAL1,其输出端引脚为XTAL2。
只在XTAL1和 XTAL2之间跨接晶振和微调电容,就可以构成一个稳定的自激振荡器。
复位电路,可分为上店复位电路和按键复位电路,在电子琴设计中采用的是按键复位电路。
该电路用RESET键实现复位,此时电源经两个电阻分压,在RST 端产生一个复位高电平2、按键电路12个按钮按3*4排列P2_0,P2_1,P2_2分别为第0行,第1行,第2行。
P2_3~P2_6分别为第0列~第3列。
通过软件程序进行扫描。
3、发声部分从按键部分扫描出的音频信号输出P1_0口通过三极管放大信号电流使扬声器发声。
四、软件设计#include <at89x51.h> //定义头文件unsigned char a;//定义无符号字符aunsigned int t[]={63625,63833,64019,64104,64260, 64400,64524,64580,64685,64778,64820,64898}; //定义数组t存放12个音符计数值void delay(unsigned char a)//延时函数{TH0=t[a]/256;TL0=t[a]%256; //定义定时器初值TR0=1; // 启动定时器while(!TF0); // 查询定时器是否溢出TF0=0; // 定时时间到,将T0溢出标志位TF0清零P1_0=~P1_0; // P1口即扬声器,取反}void main() // 主函数{while(1) // 设置while死循环{TMOD=0X01; //设置T0为工作方式0P2=0xff; //P2口置1{P2_0=0; //第0行置0if(P2_3==0) delay(0);// 第0列为0即第一个键按下,将音符计数代码送入延时函数if(P2_4==0) delay(1);//第1列为0即第一个键按下,将音符计数代码送入延时函数if(P2_5==0) delay(2);// 第2列为0即第一个键按下,将音符计数代码送入延时函数if(P2_6==0) delay(3);// 第3列为0即第一个键按下,将音符计数代码送入延时函数P2_0=1; //第0行置1}{P2_1=0; //第1行置0if(P2_3==0) delay(4);//第0列为0即第一个键按下,将音符计数代码送入延时函数if(P2_4==0) delay(5);//第1列为0即第一个键按下,将音符计数代码送入延时函数if(P2_5==0) delay(6);//第2列为0即第一个键按下,将音符计数代码送入延时函数if(P2_6==0) delay(7);//第3列为0即第一个键按下,将音符计数代码送入延时函数P2_1=1; //第1行置1}{P2_2=0; //第2行置0if(P2_3==0) delay(8);//第0列为0即第一个键按下,将音符计数代码送入延时函数if(P2_4==0) delay(9);//第1列为0即第一个键按下,将音符计数代码送入延时函数if(P2_5==0) delay(10);//第2列为0即第一个键按下,将音符计数代码送入延时函数if(P2_6==0) delay(11);//第3列为0即第一个键按下,将音符计数代码送入延时函数P2_2=1;//第2行置1}}}五、系统调试此次实训主要在软件仿真图上的到结果将编好的C语音程序烧入AT89C51芯片,进行调试,在发声部分加个三极管即是调试后的结果。
简易电子琴实验报告
《简易电子琴实验报告》
实验目的:通过搭建简易电子琴,了解电子琴的工作原理和基本原理。
实验材料:
1. Arduino开发板
2. 电阻
3. 电容
4. 蜂鸣器
5. 连接线
6. 电池
实验步骤:
1. 将Arduino开发板连接到电脑上,并打开Arduino IDE软件。
2. 在Arduino IDE软件中,编写一个简单的程序,使用蜂鸣器发出不同频率的声音。
3. 将电阻和电容连接到Arduino开发板上,用来调节蜂鸣器发出的声音的频率和音调。
4. 将蜂鸣器连接到Arduino开发板上。
5. 用连接线将所有部件连接起来,确保电路连接正确。
6. 将电池连接到Arduino开发板上,为电子琴供电。
实验结果:
经过以上步骤的操作,我们成功搭建了一个简易的电子琴。
通过调节电阻和电容的数值,我们可以改变蜂鸣器发出的声音的频率和音调。
通过编写程序,我
们可以让蜂鸣器发出不同的音符,从而演奏出简单的乐曲。
实验结论:
通过这次实验,我们了解了电子琴的基本原理和工作原理。
电子琴通过控制电流的频率和波形,产生不同的音符。
通过这种方式,我们可以使用电子琴演奏出各种乐曲。
同时,我们也学会了如何使用Arduino开发板和简单的电子元件搭建一个简易的电子琴。
这次实验为我们打开了电子琴的神秘面纱,让我们对电子琴有了更深入的了解。
课程设计报告题目课程名称院部名称专业班级学生姓名学号课程设计地点课程设计学时指导教师简易电子琴电路制作一实验目的1.学习调试电子电路的方法,提高实际动手能力。
2.了解由振荡电路与功率放大电路结合构成简易电子琴的电路及原理。
二实验内容【实验原理】1.简易电子琴电路是将振荡电路与功率放大电路结合的产物。
(1)RC振荡电路(如图1所示)是由RC选频网络和同向比例运算电路组成,对不同频率的输入信号产生不同的响应。
1、RC桥式振荡电路1.1、电路图RC桥式振荡电路如图1所示。
1.2、RC串并联选频网络RC桥式振荡电路可以选出特定频率的信号。
具体实现过程的关键是RC串并联选频网络,其理论推导如下:可得选频特性:即当f0=1/(2πRC)时,输出电压的幅值最大,并且输出电压是输入电压的1/3,同时输出电压与输出电压同相。
通过该RC串并联选频网络,可以选出频率稳定的正弦波信号,也可通过改变R,C的取值,选出不同频率的信号。
2、振荡条件2.1、自激振荡条件图2所示为含外加信号的正弦波振荡电路,其中A,F分别为放大器回路和反馈网络的放大系数。
图2中若去掉Xi,由于反馈信号的补偿作用,仍有信号输出,如图3所示Xf=Xi,可得自激振荡电路。
自激振荡必须满足以下条件:2.2、起振条件自激振荡的初始信号一般较小,为了得到较大强度的稳定波形,起振条件需满足|A·F|>1。
在输出稳定频率的波形前,信号经过了选频和放大两个阶段。
具体来说,是对于选定的频率进行不断放大,非选定频率的信号进行不断衰减,结果就是得到特定频率的稳定波形。
设计方案1、设计电路图设计电路图如图4所示。
图4即是八音阶微型电子琴的原理电路图,8个开关对应着电子琴8个音阶琴键,使用时只能同时闭合一个开关。
在实际电路中,为达到起振条件AF>1,常用两个二极管与电阻并联,可实现类似于热敏电阻的功效。
另外需要说明的是,理论上电路的初始信号是由环境噪声及电路本身的电压提供的。
单片机应用课程设计报告——简易电子琴电子信息科学与技术2013-2xxx单片机应用课程设计报告——简易电子琴xxx摘要本设计是一个基于AT89C52系列单片机的简易电子琴,通过硬件电路制作以及软件编译,设计制作出一个由按键电路、复位电路、数码管显示电路,定时器及蜂鸣器组成简易的电子琴。
通过键盘按键确定键号送去显示以及产生对应的频率的方波。
本次实验的难点是键盘的扫描程序设计,因为本次实验实用的键盘是通过P3.4-P3.7端口输入测试信号,从P3.0-P3.3端口进行检测的,涉及到端口的读入写出原理等问题,后来通过先送出F0数值使低四位处于读入状态,高四位处于输出状态等方法实现。
还有一个问题是如何使单片机产生确定频率的波形,后来利用定时器计时结束后的溢出信号,控制信号反转实现。
关键词:电子琴扫描式键盘数码管1、设计任务和要求1.1设计任务利用AT89C52单片机以及各种元器件自行设计编程制作一个简易电子琴。
1.2任务要求基本要求:利用查询式键盘,数字键1、2、3、4、5、6、7作为电子琴的按键,按键按下时发出Do、Re、Mi、Fa、So、La、Xi的声音。
在弹奏音乐的同时将音符显示在数码管上。
扩展要求:具备存储播放所弹奏的音乐的功能,用三个功能键进行切换状态:按一下按键控制是否进入存储状态。
;按键二控制是否进入演奏状态;按键三为复位键。
1.3方案论证(1)如何产生一定频率的方波信号首先我们知道,每一个音符都有一个固定的频率,当蜂鸣器根据不同频率的方波信号便会震动产生对应的音符。
其次要产生音频脉冲,只要算出某一音频的周期(1/f),然后将此周期除以2,即为半周期的时间,由于使用的是12MHz的晶振,所以每一个计数的脉冲长度为1us,脉冲的个数用半周期时间除以1us,用65536减去脉冲的个数便可以得到计数初值。
利用定时器计时这半个周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。
简易电子琴设计实验报告指导老师:谭建军老师班级:0309409姓名:周博学号:0309409132011-12-7摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在音乐演奏中已成为不可缺少的一部分。
单片机是一个具有功能强大和编程灵活性的控制器,它已广泛应用于现代人们的生活中,扮演着重要的角色。
本设计主要是使用AT89C51单片机及单片机C语言,在PROTEUS仿真平台上实现以单片机为核心控制元件的一个具有16个按键的电子琴,同时还增加了音乐播放功能。
本文中给出了该系统设计的硬件电路,软件设计等。
其次,详细阐述了程序的各个模块和实现过程。
本设计具有硬件电路简单、功能完善、控制可靠、运行稳定等特点,具有一定的实用性和参考价值。
关键词: 单片机;电子琴;PROTEUS;C语言一、电子琴的相关介绍1,电子琴的应用背景随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。
基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。
单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。
并且可以进行一定的功能扩展。
鉴于传统电子琴可以用键盘上的“k0”到“k16”键演奏从低So到高DO等16个音,从而可以用来弹奏喜欢的乐曲。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器,它在现代音乐扮演着重要的角色。
简易电子琴是电声乐队的中坚力量,常用于独奏主旋律并伴以丰富的和声。
还常作为独奏乐器出现,具有鲜明时代特色。
但电子琴的局限性也是十分明显:旋律与和声缺乏音量变化,过于协和、单一;在模仿各类馆、弦乐器时,音色还不够逼真,模仿提琴类乐器的音色时,失真度更大,还需要不断改进。
单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
河南理工大学《单片机应用与仿真训练》设计报告基于单片机的电子琴设计姓名:薛吉星 _____学号: 310808020825 _______专业班级:自动化08-8班指导老师:刘巍所在学院:电气工程与自动化学院2011年7月5日本设计主要研究基于AT89C52单片机的简易电子琴设计。
它是以单片机作为主控核心,设置键盘、蜂鸣器等外围器件;另外还用到一些简单器件如:两位数码管,和NPN型三极管及电阻等。
利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用NPN型三极管8550实现低音频功率放大;最后用蜂鸣器进行播放“送别”。
本设计硬件部分主要由最小系统,按键系统模块、数码管显示模块和蜂鸣器模块组成。
其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。
(1)最小系统:它是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。
(2)按键系统模块:本设计采用10个按键,其中7个按键用来显示7个音调,其它3个按键可以进行高低中音的切换,并自动播放已存歌曲。
(3)数码管显示模块:SM420562段选端接在单片机的P0口,两个位选端分别接在P2^0和P2^1。
(4)蜂鸣器模块:此电子琴发音电路是通过三极管驱动蜂鸣器发音,经过上拉电阻提高驱动能力。
本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐。
系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。
1.概述 (5)1.1设计背景 (5)1.2设计意义 (5)1.3设计任务 (5)2.系统总体方案及硬件设计 (6)2.1总体设计 (6)2.2单片机选型 (7)2.3单片机的最小工作系统 (7)2.3.1 时钟电路 (7)2.3.2复位电路 (8)2.4原理框图 (8)2.5显示部分设计 (9)2.5.1数码显示方式 (9)2.5.2八位数码管的结构 (9)2.6按键部分设计 (10)2.6.1操作键设计 (10)2.6.2键盘设计 (10)2.6.3去抖动 (11)2.7发音部分设计 (12)3.系统软件设计 (13)3.1系统分析 (13)3.1.1系统软件的组成 (13)3.1.2 系统总体功能流程图 (14)3.2参数计算 (15)3.2.1发音原理 (15)3.2.2 计算举例 (15)3.2.3 计算结果 (15)3.3程序设计 (17)3.3.1 判断音阶(高中低音)子程序 (17)3.3.2 播放子程序(包括自动播放存储音乐和按键发音) (18)4. PROTEUS软件仿真 (20)4.1硬件调试 (20)4.2软件调试 (20)4.3仿真结果(任举一例) (21)4.4结果分析 (21)5. 课程设计体会 (22)参考文献 (23)附1 源程序代码 (24)附2 系统原理图 (33)1.概述1.1设计背景随着电子科学技术的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们带来更多的生活乐趣。
通达学院
2013 /2014 学年第一学期课程设计II实验报告
模块名称PROTEUS51
专业
学生班级
学生学号
学生姓名
指导教师
一、本系统的目的
本系统设计制作一个可演奏的电子琴。
综合应用了两项设计。
(1)键盘矩阵识别,通过按键控制播放14个音阶并显示。
(2)通过控制开关完成事先写入歌曲的播放。
二、主要芯片简介
AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
8255是常用的扩展单片机IO资源的芯片,8255原理是只利用单片机的一个并行口来扩展出几个并口,使得单片机可以接入更多的设备
三、系统组成
本系统只要以51单片机为主控核心,8255IO外扩、与矩阵键盘、扬声器、LED显示管模块一起组合而成。
具体如下:
四、系统工作原理
本系统扫描键盘矩阵、显示当前状态及音阶、扬声器发出对应音符或音乐。
4X4行列式非编码键盘:键盘只简单地提供按键开关的行列矩阵。
有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。
行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。
键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。
用8255H的PC口接4×4矩阵键盘,以PC0-PC3为输出线以PC4-PB7为输入线,PA与PB与数码管相连,PA为段选,PB为位选。
五、硬件总体设计
本系统由键盘矩阵、LED显示管、扬声器这几个部分组成,LED显示管显示当前按键,扬声器发出对应音符。
硬件总体设计图如下:
具体元件使用
8LED数码管
矩阵键盘
自动播放开关、录音开关、回放开关和扬声器
六、关于音频与计数初值的选择
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式是N=fi÷2÷fr
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:T=65536-N=65536-fi÷2÷fr
例如:设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1046=65059
注:本系统值采用了期中24个音阶,通过按键来切换不同八度,半音不在考虑之内。
七、系统操作说明
(1)Keil下编译,产生目标HEX文件,Proteus下Programme Files选择产生的HEX文件,点击运行开始模拟。
(2)开启本系统autoplay开关闭合,播放预先存储的乐曲。
(3)断开开关,按任意键盘,数码管显示所按的音阶,扬声器发出相应的音符,按下时持续发声并数码管显示所按下的音的参数,释放时停止发声,数码管不显示。
(4)程序流程图:
八、单片机程序代码
完整程序见附一
(1)方波信号发生程序
通过对定时器0赋不同的初值来调整输出端的频率达到扬声器产生不同频率声音的目的。
uint code tab[]=
{
63628,63835,64021,64103,64260,64400,64524,
64580,64684,64777,64820,64898,64968,65030,
65058,65110,65157,65178,65217,65252,65283
};
void T0_time0(void)interrupt 1
{
TH0=STH0;
TL0=STL0;
SPK=!SPK;
}
(2)键盘扫描程序
PC口低4位输出低电平,检测是否有按键按下,如果有按键按下,再输出3高1低来检测是在哪一行哪一列的键按下。
第15、16键通过对scale变量值的改变来实现14键组合方式(低音7个中音7个或中音7个高音7个)PC=0x0;
if((PC&0xf0)!=0xf0)
{
PC = 0xe;
if((PC&0xfe)!=0xfe)
{
key = PC;
}
else
PC = 0xd;
if((PC&0xfd)!=0xfd)
{
key = PC;
}
else
PC = 0xb;
if((PC&0xfb)!=0xfb) {
key = PC;
}
else
PC = 0x7;
if((PC&0xf7)!=0xf7) {
key = PC;
}
switch(key)
{
case 0xee:
k = 0+scale*7;
break;
case 0xde:
k = 1+scale*7;
break;
case 0xbe:
k = 2+scale*7;
break;
case 0x7e:
k = 3+scale*7;
break;
case 0xed:
k = 4+scale*7;
break;
case 0xdd:
k = 5+scale*7;
break;
case 0xbd:
k = 6+scale*7;
break;
case 0x7d:
k = 7+scale*7;
break;
case 0xeb:
k = 8+scale*7;
break;
case 0xdb:
k = 9+scale*7;
break;
case 0xbb:
k = 10+scale*7;
break;
case 0x7b:
k = 11+scale*7;
break;
case 0xe7:
k = 12+scale*7;
break;
case 0xd7:
k = 13+scale*7;
break;
case 0xb7:
if(scale==1)
{
scale = scale-1;
};
break;
case 0x77:
if(scale==0)
{
scale = scale+1;
};
break;
default:
break;
}
}
(3)显示程序
用循环使每个数码管分别显示对应的内容,通过延迟来使视觉上产生多个数码管同时亮的效果。
while(((PC&0xf0)!=0xf0)&(key!=0xb7)&(key!=0x77))
{
for(h=0;h<8;h++)
{
PB = DSY_Index[h];
PA = DSY_CODE_Queue[k][h];
timer(50);
}
};
九、运行结果
十、设计总结
通过本次实验我对51单片机的应用更加熟悉了,也对电子琴发声有了一定的认识。
因为按键数量有限,在本次实验中通过使用16键最后两键来实现21个音,通过扩展可以实现更多音的范围,由于时间有限所以没有尝试。
在编程过程中加入了录音放音程序,但放音功能没有成功。
由于PROTUES软件对电脑运行资源消耗的原因,本打算在扬声器输出端增加音色处理电路和程控放大器来调整音量,最终因为仿真的时候软件奔溃退出没有实现。
模拟电路在仿真的时候仍存在很多问题,相对实际硬件电路,仿真的延迟很大。
实验中仍有许多问题需要解决和思考,如果将来从事相关工作,更应努力去解决这些问题。
设计成绩评定。