基于单片机的简易电子琴正确版
(完整版)基于51单片机的简易电子琴设计
(完整版)基于51单⽚机的简易电⼦琴设计基于51单⽚机的简易电⼦琴设计⼀.问题提出为什么选择简易电⼦琴设计?1.对于⾳乐的兴趣我们对⾳乐都有着浓厚的兴趣,喜欢听钢琴曲,如理查德·克莱德曼演奏的《思乡曲》《星空》《秋⽇的私语》等,⾳乐在我们的⽣活中扮演着很重要的⾓⾊。
有⼈曾说,喜欢⾳乐的⼈不会向恶。
以前不以为然,可是随着这些年来慢慢喜欢上阴郁,听了越来越多的钢琴曲之后,觉得这句话⾮常有道理。
⾳乐是⽤艺术家⽤⾳符记录世界,传达情感的⼀种艺术形式,⾳乐⾥有⼀种和谐之美,听⾳乐可以让⼈⼼情舒畅,与外界和谐统⼀。
⾳乐现在已经成为我⽣活中很重要的⼀部分,我们每周都会抽些时间去欣赏世界名曲,作为对精神的洗礼。
2.对于电⼦琴的好奇好奇是⼈的天性,⼈类对于⾃然的认识,对于科学的探索,⽆不始于好奇。
我们对电⼦琴如何实现其功能,如⾳⾊选择、声⾳强弱控制、节拍器、⾃动放⾳功能等等也很好奇,想通过学习单⽚机这个机会,深⼊了解电⼦琴的功能实现原理。
3.对于51单⽚机强⼤功能的信赖51单⽚机有基本特性:(1)⾯向控制的8位CPU和指令系统(2)4K字节的程序存储器(ROM或EPROM)(3)128字节的数据存储器(4)可编程的并⾏I/O⼝P0~P3,有32位双向输⼊/输出线(5)⼀个全双⼯串⾏⼝(6)两个16位定时器/计数器(7)五个中断源,两个优先级的中断结构(8)⼀个⽚内时钟振荡器和时钟电路(9)可以寻址64K字节的程序存储器和64K字节的外部数据存储器51单⽚机功能强⼤,性能⽇趋完善,在⼯业测控、智能仪器仪表、机电⼀体化产品、家电领域中应⽤⼴泛,因此基于51单⽚机设计简易的电⼦琴可⾏性⾮常⼤。
⼆.功能需求1.能够实现基本的琴键功能即每按下⼀个琴键,单⽚机能够检测到键盘的按键,并根据按键的位置,通过程序来控制,使蜂鸣器发出不同频率(⾳调)的声⾳,声⾳延迟⼀段时间,等到按键放开后,声⾳停⽌。
然后再继续扫描,看是否有键按下,如此循环下去,即可实现基本的琴键功能。
基于单片机电子琴设计
基于单片机的简易电子琴设计一、设计目的本方案设计数码管显示音符的实验,使用基于AT89C51单片机,在数码管上显示按键所代表音符的数字,通过键盘可以调节低音,中音,高音的音符,按下数据蜂鸣器会发出相应音符发出的声音。
二、摘要:通过数码管显示音符的数字,按下键盘,蜂鸣器会发出声音进行提示关键词:单片机,键盘,蜂鸣器,数码管硬件电路设计1、单片机模块设计2、本次设计采用的是单片机AT89C51。
芯片共有40个引脚,引脚的排列顺序为从靠芯片的缺口,如图3.1所示。
左边那列逆时针数起,依次为1,2,3.....40,其中芯片的1脚顶上有一个凹点。
在单片机的40个引脚中,电源引脚2根,外接晶体振荡器引脚2根,控制引脚4根以及4组8位可编程I/O引脚32根。
3、4、图AT89C51管脚图5、AT89C51单片机共有4组8位可编程I/O口,分别为P0、P1、P2、P3口,每个口有8位,共32根。
每一根引脚都可以编程,比如用来控制电机、交通灯等,开发产品时就是利用这些可编程引脚来实现我们想要的功能。
6、P0口:8位双向I/O口线,名称为P0.0-P0.7;7、P1口:8位准双向I/O口线,名称为P1.0-P1.7;8、P2口:8位准双向I/O口线,名称为P2.0-P2.7;9、P3口:8位准双向I/O口线,名称为P3.0-P3.7。
10、本文单片机模块如图所示,主要是由单片机芯片与晶振和复位电路组成的。
是由单片机来控制整个系统,让我们的系统可以正常的运行。
2、数码管显示模块设计LED(Light Emitting Diode)发光二极管缩写。
LED数码管是由发光二极管构成的。
常见的LED数码管为“8”字型的,共计8段。
它由七个条形发光二极管和一个小圆点发光二极管组成,每一段对应一个发光二极管。
一般来说分共阳极和共阴极两种接法,如图4所示为八段LED数码管结构及外形。
共阳极LED数码管的发光二极管的阳极连接在一起,公共阳极接正电压,当某个发光二极管的阴极接低电平时,发光二极管被点亮,相应的段被显示。
基于51单片机的简易电子琴设计
基于51单⽚机的简易电⼦琴设计基于51单⽚机的简易电⼦琴设计⼀、设计任务及要求1、在该简易电⼦琴设计中,设置8个按键,8个按键可以发出do、re、mi、fa、sol、la、si、Do 8个⾳阶。
2、设计三个拨码开关,三个拨码开关可以调节⾼⾳、中⾳、低⾳三个⾳调。
3、画出电路的总体⽅框图和电路原理图。
⼆、设计原理⾳乐由许多不同的⾳阶组成的,⽽每个⾳阶对应着不同的频率,这样,我们就可以利⽤不同的频率组合,构成我们想要的⾳乐。
简易电⼦琴是摁下拨码开关时,单⽚机AT89C51会发出声⾳,声⾳从P1.0端⼝经过LM386,经过放⼤以后传⼊喇叭。
声⾳主要是经过单⽚机4×4矩阵键盘的按键产⽣,这⾥只⽤到8个按键来产⽣⾼中低的8个⾳阶,来产⽣do re mi fa sol la si Do。
下⾯是计数初值:三、设计⽅案本次设计的电⼦琴主要是利⽤AT89C51单⽚机为核⼼控制元件,同时还包括键盘、拨码开关和扬声器等控制模块,由键盘选择⼋个⾳阶。
1、电路原理图的总体设计总体电路需要c51单⽚机⼀⽚,⾳乐按键及喇叭等外围电路,要进⾏⾳调控制和⾳频放⼤,设计好的电路图如下图所⽰:2、键盘控制模块的设计矩阵按键部分由8个轻触按键按照2⾏4列排列,连接到P3端⼝。
将⾏线所接的单⽚机的I/O⼝作为输出端,⽽列线所接的I/O,则作为输⼊。
⾏线输出是低电平,有健按下,则输⼊线就会被拉低,这样,通过读输⼊线的状态就可得知是否有键按下。
3、键盘消抖当⽤⼿按下⼀个键时,如图所⽰,往往按键在闭合位置和断开位置之间跳⼏下才稳定到闭合状态的情况;在释放⼀个键时,也回会出现类似的情况。
这就是抖动。
抖动的持续时间随键盘材料和操作员⽽异,不过通常总是不⼤于10ms。
⽤软件⽅法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,此后再读⼊键盘码。
⼀个单⽚机⼯作于12M晶振,它的时钟周期是1/12(微秒)。
它的⼀个机器周期是12*(1/12)也就是1微秒。
基于单片机的简易电子琴毕业设计参考word
(2015 届)毕业设计题目:基于单片机的简易电子琴设计姓名:林初丰专业:电气工程及其自动化班级:电气N111学号: 201145679226 指导教师:程海玉导师职称:讲师嘉兴学院南湖学院教学事务管理中心年月日诚信声明我声明,所呈交的设计是本人在老师指导下进行的研究工作及取得的研究成果。
据我查证,除了文中特别加以标注和致谢的地方外,设计中不包含其他人已经发表或撰写过的研究成果,也不包含为获得嘉兴学院南湖学院或其他教育机构的学位或证书而使用过的材料。
我承诺,设计中的所有内容均真实、可信。
设计作者签名:签名日期:年月日授权声明学校有权保留送交设计的原件,允许设计被查阅和借阅,学校可以公布设计的全部或部分内容,可以影印、缩印或其他复制手段保存设计,学校必须严格按照授权对设计进行处理,不得超越授权对设计进行任意处置。
设计作者签名:签名日期:年月日基于单片机的简易电子琴设计摘要本设计核心内容是关于基于AT89C51单片机的简易电子琴设计。
系统由单片机AT89C51、独立键盘模块、功率放大模块、扬声器、数码管所组成。
其软件部分主要有主程序模块、播放模块、按键模块、显示程序。
本设计首先要对AT89C51单片机有一定的认识,继而按照电子琴功能制作出硬件电路并编写源程序,最后对其进行仿真调试。
系统带有10个独立按键,其中8个独立按键分别代表8个音符,8个按键每个按键在数码管也会对应一个字符来指示用户所按下的按键,还有两个为功能按键按键。
同时本系统还带有一个存储播放音乐的功能,使用者可以通过按下功能按键来播放存储的歌曲,系统会把用户程序内存储的音符进行播放,在自动播放的过程中如果按下另外一个功能按键则中断播放歌曲。
本次设计的主要优点有硬件电路结构简单易实现,电子琴所需功能基本具备,系统稳定可靠.关键词:at89c51,电子琴,弹奏Design of a simple electronic organ based on single chipmicrocomputerABSTRACTThis design is the core content of simple electronic organ based on AT89C51 is designed. System by single chip microcomputer AT89C51, independent keyboard module, power amplification module, speaker, digital tube. Its software part mainly has the main program module, the module, keys module, display applications.This design must first have a certain understanding of AT89C51, then according to the electronic organ functions produce hardware circuit and the programs are the source, finally carries on the simulation debugging. System with 10 independent key, including eight independent keys represent the eight notes, each key eight buttons in the digital tube will also corresponds to a character to indicate the user press the button, and two for the key button. Simultaneously this system also comes with a storage play the function of music, the user can press the function button to good songs, storage system will store the user program in the notes to play, in the process of automatic playback if press buttons on another function is the interrupt play songs. The design of the main advantage of the hardware circuit structure is simple to implement, electronic organ function basically, the system is stable and reliable.Keywords: At89c51, electronic organ, playing, recording.目录1绪论 (4)1.1单片机背景 (4)1.2单片机电子琴应用 (5)2 电子琴方案设计 (6)2.1 设计要求 (6)2.2 电子琴设计方案 (6)3 硬件设计 (8)3.1 单片机 (8)3.1.1 AT89C51简介 (8)3.1.2 主要的功能特性 (8)3.1.3 I/O端口介绍 (8)3.1.4 定时/计数器的应用 (8)3.2 按键设计 (10)3.3 LED数码管 (10)3.3.1 数码管的驱动方式 (10)3.3.2 数码管的选择 (11)3.4扬声器 (12)4 软件设计 (14)4.1程序流程图 (14)4.2程序语言的选择 (14)5 仿真调试 (16)5.1 Proteus 简介 (16)5.2 keil 简介与教程 (16)5.3利用keil与Proteus进行的调试 (19)6 总结与展望 (22)参考文献 (23)附录 (25)附录1主要电路原理图 (25)附录2主要程序 (25)1绪论1.1单片机背景单片机是经典的嵌入式微控制器(Microcontroller Unit),缩写为MCU,最早是被利用于工业控制领域。
单片机课设设计论文:基于STC89C51单片机的简易电子琴设计
单片机课程设计论文题目:基于单片机的简易电子琴设计学院:机电工程学院专业:电气工程及其自动化姓名: ### ### ###指导教师:完成日期: 2012-12-27目录摘要 (1)绪论 (2)1方案论证 (3)1.1原理图 (3)1.2主体方案 (3)1.3系统方案设计绍 (4)1.3.STC89C51简介 (5)1.3.1单片机工作原理 (8)1.3.2数码管 (13)2实现过程 (14)2.1.1 程序设计内容 (14)2.1.2 I/O并行口直接驱动LED显示 (14)2.2 音乐产生的方法 (15)2.2.1 原理 (15)2.2.2 程序框图 (16)3全文总结 (17)3.1结束语 (18)参考文献 (19)附录 (20)1.电路原理图 (20)2.程序框图 (21)3.系统流程图 (22)4.语言源程序 (23)摘要在现代各种生活中,电子琴作为一种音乐型玩具,广泛用于与人们的日常生活中。
市场上有各种各样的电子琴。
特别是日本产的,音质优美,它是有专门的音乐控制芯片制造的。
由于其价格较贵,无法大面积普及,且功能单一。
用89c51作为主控中心,研制一种简易的微型电子琴,尽可能地体现较好的音质来,是一种可做的尝试。
以单片机为核心设计的简易电子琴系统,由按键扫描电路、声音产生驱动电路、复位电路、等模块组成的,是一种比较实用、廉价的电子玩具。
本论文所设计的简易电子琴,它分为两大部分,硬件电路的设计和软件的设计。
硬件电路的设计以AT89S51单片机为控制主板,辅以外围的扩展设备蜂鸣器、矩阵键盘、共阳数码管,形成一个可被控制的显示系统。
软件设计通过控制单片机内部的定时器T0来产生不同频率的方波,驱动喇叭发出不同音节的声音.再利用延迟来控制发音时间的长短,即可控制音调中的节拍.把乐谱中的音符对应的频率转换为定时常数,把相应的节拍变换为定时常数,然后作成表格存放在储存器中,由程序查表得到定时常数和延时常数,分别用以控制定时器产生方波的频率和该频率方波的持续时间.当延迟常数到时,再查下一个音符的定时常数和延迟常数.依次进行下去,就可演奏悦耳动听的音乐.主要实现 1》能够发出1.2.3.4.5.6.7等七个音符。
基于51单片机的电子琴完整版
基于51单片机的电子琴完整版#include<reg52.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit feng = P0^7; // 蜂鸣器uint FTemp;uint code tab[] = { //定时半周期的初始值64021,64103,64260,64400, //低音3 4 5 664524,64580,64684,64777, //低音7,中音1 2 364820,64898,64968,65030, //中音4 5 6 765058,65110,65157,65178}; //高音1 2 3 4//用扫描法读P1 外接4×4 键盘uchar Keyscan(void){uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};for(j = 0; j < 4; j++) //循环四次,扫描四行{P1 = Buffer[j]; //在低四位分别输出一个低电平_nop_();temp = 0x80; //计划先读出P1.7位for(i = 0; i < 4; i++) //循环四次,检查四列{if(!(P1& temp)) //从高四位,截取1位{return (i + j * 4); //返回取得的按键值}temp >>= 1; //换右边一位}}return 16; //没有键按下就返回16}void Main(void){uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值 TMOD = 0x01; //T0定时方式1ET0 = 1; //允许T0中断EX0 = 1; //允许INT0中断EA = 1;//开总中断while(1){TR0 = 0; //T0工作停,暂不发音Key_Temp1 = Keyscan(); //第一次读入按键if(Key_Temp1 != 16){ //有键按下Key_Temp2 = Keyscan(); //再读一次if (Key_Temp1 == Key_Temp2) //两次相等{Key_Value = Key_Temp1; //就确认下来FTemp = tab[Key_Value]; //根据键值,取出定时半周期的初始值TR0 = 1; //启动定时器T0,发音while (Keyscan() < 16); //等待释放feng = 1; //停止发音}}}}//========================================================= =====void T0_INT(void) interrupt 1{TL0 = FTemp; //载入定时半周期的初始值TH0 = FTemp >> 8;feng = ~feng; //发音。
基于单片机的简易电子琴的设计正文
第一章设计要求1.1 基本要求1.设计一简易电子琴,要求能够发出1,2,3,4,5,6,7等7个音符,具有一般演奏功能。
2.具有自动重载歌曲功能1.2 电子琴的基本介绍1.按键模块:利用按键是否按下控制P口的是否为高低电平,从而驱动单片机系统发出相应频率的响声。
2.轰鸣器模块:利用P口与放大器连接,从而放大信号,放大的信号通过轰鸣器发出相应频率的声音。
3.自动重载模块:利用P口与按键连接,通过高低电平判断按键是否按下,从而实现将频率加载到定时器TH0和TL0。
1.3 电子琴设计原理电子琴由以下几个部件组成:单片机89C51、电源、按钮、音频放大模块、复位模块,数码管,LED显示模块、晶振模块。
第二章系统组成及工作原理2.1 系统组成框图简易电子琴由独立按键模块、自动加载音乐模块、轰鸣器模块、复位模块等几部分功能模块组成,每一个模块完成特定的模块功能。
在把每个模块有机的结合在一起组成一个单片机系统。
单片机系统框图如2-1所示:图2-1 单片机系统框图2.2 工作原理及分析一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P0.0反相,然后重复计时再反相。
就可在P0.0引脚上得到此频率的脉冲。
利用AT89S51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
单片机设计-简易电子琴
电子设计报告——基于51单片机的多功能电子琴队别:地方生系一大队一队组长:冯硕组员:易森 20075401004冯硕 20075401086程远文 20075401046刘爽 20075401628一、作品简介:漂亮的外观,清澈洪亮的声音,闪闪发亮的彩灯,相信早已吸引住你的眼球!这是一款纯手工打造的电子琴,实为接近MM、生日礼物必备佳品。
二、作品功能:★可以演奏出基本的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相关的计数中7 SI 988 65030采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:TABLE DW 64580,64684,64777,64820,64898,64968,65030四、实验目的:(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
完整版基于51单片机简易电子琴设计
中国信息大学设计(论文)说明书第1页共14页电子琴的设计1课题背景单片微型计算机室大规模集成电路技术发展的产物,属于第四代电子计算机它拥有高性能、高速度、体积小、价格廉价、牢固可靠、应用广泛的特点。
他的应用必然以致传统的控制技术从根本上发生改革。
因此,单片机的开发应用已成为高科技和工程领域的一项重要课题。
电子琴是现代电子科技与音乐结合的产物,是一种新式的键盘乐器。
它在现代音乐扮演重要的角色,单片机拥有富强的控制功能和灵便的编程实现特点,它已经溶入现代人们的生活中,成为不可以取代的一部分。
本文的主要内容是用 AT89S52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘扬声器等模块组成核心主控制模块,在主控模块上设有 8 个按键,和一个复位按键。
主要对使用单片机设计简单电子琴进行了解析,并介绍了鉴于单片机电子琴硬件的组成。
利用单片机产生不同样频率来获得我们要求的音阶,最后可随意弹奏要表达的音符。
而且分别从原理图,主要芯片,个模块原理及各莫奎的程序的调试来详细阐述。
一首音乐是好多不同样的音阶组成的,而每个音阶对应着不同样的频率,这样我们就可以利用不同样的频率的组合,组成我们想演奏的那首曲目。
自然对于单片机来产生不同样的频率特别方便,我们可以利用单片机的准时 / 计数器 T0 来产生这样的方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系编写正确就可以达到我们想要的曲目。
一 .任务要求与整体设计方案设计任务与要求利用所给键盘的 1,2,3,4,5,6,7,8 八个键,可以发出 7 个不同样的音调,而且有一个按键可以自动播放歌曲,要求按键按下时发声,松开延时一小段时间,中间再按其余键则发别的一音调的声音,当系统扫描到键盘按下,则快速检测出是哪一个按键被按下,尔后单片机的准时器启动,发出必然频率的脉冲,该频率的脉冲经喇叭驱动电路放大滤波后,就会发出相应的音调。
若是在前一个按下的键发声的同时有另一个按键被按下,则启动中断系统。
基于单片机简易电子琴设计
创新制作报告简易电子琴设计学校:深圳职业技术学院2013年11月12日摘要本设计主要研究基于STC90C51单片机的简易电子琴设计。
它是以单片机作为主控核心,键盘、电脑音响、led等外围器件构成;本设计硬件部分主要由最小系统,按键系统模块、led显示模块和发声模块组成。
其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。
(1)最小系统:它是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计等。
(2)按键系统模块:本设计采用24个按键,其中21个按键用来显示21个音调,其它3个按键可以进行功能的切换。
(3)LED显示模块:八个LED,七个红色LED来显示音符,1个绿色LED指示。
(4)发声模块:此电子琴发音是用现成的电脑音响。
本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐,同时还有保存兵播放已按下的音符。
系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠.目录1.概述 41.1设计背景 41.2设计意义 41.3 设计任务 42.系统总体方案及硬件设计 42.1总体设计 42.2硬件设计 62.3单片机的最小工作系统 62.4电源设计:2.5按键设计:2.6LED灯设计:2.7发声模块:3.系统软件的的编写 73.1电子琴基本原理 73.2主程序 93.3播放音乐模块 163.4录音模块 204.1硬件调试 234.2软件调试 235课程设计体会附1 源程序代码 241.概述1.1设计背景由于本课程要做一个创新制作,而老师给的参考题中觉得电子琴这课题不错,因为电子琴能陶冶人的情操,同时使人更快乐,他能真正影响人的心情,因此决定做。
单片机设计-简易电子琴.
电子设计报告——基于51单片机的多功能电子琴队别:地方生系一大队一队组长:冯硕组员:易森 20075401004 冯硕 20075401086 程远文 20075401046 刘爽 20075401628一、作品简介:漂亮的外观,清澈洪亮的声音,闪闪发亮的彩灯,相信早已吸引住你的眼球!这是一款纯手工打造的电子琴,实为接近MM、生日礼物必备佳品。
二、作品功能:★可以演奏出基本的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相关的计数采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:TABLE DW 64580,64684,64777,64820,64898,64968,65030四、实验目的:(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。
基于51单片机的简单电子琴代码
基于51单⽚机的简单电⼦琴代码#include <AT89X52.h>sbit P10=P1^0;//⾼⾳阶,红灯sbit P11=P1^1;//中⾳阶,黄灯sbit P12=P1^2;//低⾳阶,绿灯sbit P13=P1^3;//蜂鸣器控制端⼝sbit P31=P3^0;//低⾳阶按键⾏sbit P32=P3^1;//中⾳阶按键⾏sbit P33=P3^2;//⾼⾳阶按键⾏sbit P35=P3^4;//播放⾳乐按键unsigned int i,j,k=0,l=0;unsigned char count1=0xff,count0=0x50;/*********************************数码管码表(P0)***********************************/unsigned char Tab[]={0XBF,0X06,0X5B,0X4F,0X66,//数码管0~40X6D,0X7D,0X07,0X7F,0X6F,//数码管5~90X77,0X7C,0X39,0X5E,0X79,0X71,0X00};//数码管A~F/************************************⾳阶控制**************************************/music_data_high[]={0xf8,0xf9,0xfa,0xfa,0xfb,0xfb,0xfc,//数组0~6 低⾳0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfe,//数组7~13 中⾳0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xff};//数组14~20 ⾼⾳music_data_low[]= {0xf3,0xb8,0x15,0xb9,0x4a,0xcf,0x0c,//数组0~6 低⾳0x44,0xac,0x09,0x34,0x82,0xc8,0x05,//数组7~13 中⾳0x4c,0x6d,0x94,0xad,0xd2,0xf3,0x02};//数组14~20 ⾼⾳/******************************************************函数名:delayms*参数:n 延时毫秒数*功能:延时N毫秒*****************************************************/void delayms(unsigned char n){unsigned char a,b;for(a=100;a>0;a--)for(b=10*n;b>0;b--);}/******************************************************函数名:key_check*参数:⽆*功能:扫描按键并运⾏对应功能*****************************************************/void key_check(void){P2=0xff;P3=0xfe;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=1;P11=1;P12=0;switch(P2){case 0xfe:EA=1;count1=0xf8;count0=0xf3;P0=Tab[1];delayms(50);break; case 0xfd:EA=1;count1=0xf9;count0=0xb8;P0=Tab[2];delayms(50);break; case 0xfb:EA=1;count1=0xfa;count0=0x15;P0=Tab[3];delayms(50);break; case 0xf7:EA=1;count1=0xfa;count0=0xb9;P0=Tab[4];delayms(50);break; case 0xef:EA=1;count1=0xfb;count0=0x4a;P0=Tab[5];delayms(50);break; case 0xdf:EA=1;count1=0xfb;count0=0xcf;P0=Tab[6];delayms(50);break; case 0xbf:EA=1;count1=0xfc;count0=0x0c;P0=Tab[7];delayms(50);break;defaule:break;}}}//else {EA=0;P13=1;}P2=0xff;P3=0xfd;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=1;P11=0;P12=1;switch(P2){case 0xfe:EA=1;count1=0xfc;count0=0x79;P0=Tab[1];delayms(50);break; case 0xfd:EA=1;count1=0xfc;count0=0xbc;P0=Tab[2];delayms(50);break; case 0xfb:EA=1;count1=0xfd;count0=0x09;P0=Tab[3];delayms(50);break; case 0xf7:EA=1;count1=0xfd;count0=0x44;P0=Tab[4];delayms(50);break; case 0xef:EA=1;count1=0xfd;count0=0xa2;P0=Tab[5];delayms(50);break;case 0xdf:EA=1;count1=0xfd;count0=0xd8;P0=Tab[6];delayms(50);break; case 0xbf:EA=1;count1=0xfe;count0=0x05;P0=Tab[7];delayms(50);break; // defaule:break;}}}//else {EA=0;P13=1;}P2=0xff;P3=0xfb;if(P2!=0xff){ delayms(20);if(P2!=0xff){P10=0;P11=1;P12=1;switch(P2){case 0xfe:EA=1;count1=0xfe;count0=0x4c;P0=Tab[1];delayms(50);break; case 0xfd:EA=1;count1=0xfe;count0=0x6d;P0=Tab[2];delayms(50);break; case 0xfb:EA=1;count1=0xfe;count0=0x9f;P0=Tab[3];delayms(50);break; case 0xf7:EA=1;count1=0xfe;count0=0xad;P0=Tab[4];delayms(50);break; case 0xef:EA=1;count1=0xfe;count0=0xd2;P0=Tab[5];delayms(50);break; case 0xdf:EA=1;count1=0xfe;count0=0xf3;P0=Tab[6];delayms(50);break; case 0xbf:EA=1;count1=0xff;count0=0x02;P0=Tab[7];delayms(50);break; // defaule:break;}}}if(P2==0xff) {EA=0;P13=1;}}/******************************************************函数名:play_music*参数:⽆*功能:播放⾳乐*****************************************************/void play_music(void){count1=music_data_high[0];count0=music_data_low[0];EA=1;delayms(50);EA=0;delayms(5);}/******************************************************函数名:TIM0_init*参数:⽆*功能:定时器0初始化*****************************************************/ void TIM0_init(void){TMOD=0x01;TH0=count1;TL0=count0;EA=1;ET0=1;TR0=1;}void timer0(void) interrupt 1 using 0{TH0=count1;TL0=count0;P13=!P13;}/***************************************************** *函数名:main*参数:⽆*功能:开跑程序*****************************************************/ void main(void){ P35=1;TIM0_init();//play_music();//while(1){ if(P35==0) {delayms(20);P35=1;play_music();} key_check();}}。
基于51单片机的简易电子琴汇编程序实验报告
单片机应用课程设计报告——简易电子琴电子信息科学与技术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脚上得到此频率的脉冲。
基于51单片机实现简易电子琴
2012年-2013年第二届“萌芽计划”报告题目名称:简易电子琴2013年3月目录一.问题重述 (3)二.方案比较 (3)1. 方案说明 (3)2. 方案比较 (3)三.原理简述 (4)1. 用单片机产生音频脉冲 (4)2. 音频功放 (4)四.电路原理图和说明以及主要元件说明 (5)1. 硬件结构框图 (5)2. 仿真电路原理图及说明 (5)3. 主要元件及说明............................... -61) .STC89C52单片机 (6)2) 丄M386 (7)3) .矩阵式键盘 (8)4. 软件设计 (8)五.实现的功能 (9)六.附件 (11)问题重述(一)任务设计一个简易的电子琴,实现发不同音调的功能。
(1)采用555做振荡器。
(2)通过扬声器(喇叭)发出不同频率的声音。
(二)要求方案比较1.方案说明用NE555做振荡器,产生不同频率发声。
万案二.用51单片机产生音频脉冲,通过扩音器发声;a. 用独立链接式键盘做发声的按键;b. 用矩阵式键盘做发声的按键;c. 用三极管8050做音频功放电路;d. 用LM386做音频功放电路;e. 用蜂鸣器发声;f. 用喇叭发声。
2方案比较对于方案一,如果用555振荡器,则实现不了许多发挥的功能。
对于方案二,单片机功能强大,能实现许多的功能,再加上本身也在学习单片机知识,所以我们就选择了方案二而在是用独立链接是键盘还是用矩阵式键盘上,我们看到,独立链接是键盘需要占据单片机的I/O 口数量多,而且不好排版,考虑到矩阵式键盘只需接单片机8个I/O 口,而且有16个按键,可以实现的音调较多,所以我们选择了用矩阵式键盘在用8050还是用LM386的问题上,刚开始还没有很清晰的决定。
但是我们倾向于用LM386,虽然用8050做功放电路相对于LM386来说电路相对简单,但是用8050三极管不是太了解,再网上搜索资料后,我们感觉,用LM386显得高端一些,而且功放的电压增益在20~200V之间,可供选择的空间大,所以我们选择了用LM386.对于是用蜂鸣器发声还是用喇叭发声,之前买的开发板上有蜂鸣器,感觉那个声音太难听了,所以我们就选用了音色好一点的喇叭。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//简易电子琴#include<> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为引脚sbit P15=P1^5; //将P15位定义为引脚sbit P16=P1^6; //将P16位定义为引脚sbit P17=P1^7; //将P17位定义为引脚unsigned char keyval; //定义变量储存按键值sbit sound=P3^6; //将sound位定义为unsigned int C; //全局变量,储存定时器的定时常数unsigned int f; //全局变量,储存音阶的频率//以下是C调低音的音频宏定义#define l_dao 262 //将“l_dao”宏定义为低音“1”的频率262Hz #define l_re 286 //将“l_re”宏定义为低音“2”的频率286Hz #define l_mi 311 //将“l_mi”宏定义为低音“3”的频率311Hz #define l_fa 349 //将“l_fa”宏定义为低音“4”的频率349Hz #define l_sao 392 //将“l_sao”宏定义为低音“5”的频率392Hz #define l_la 440 //将“l_a”宏定义为低音“6”的频率440Hz #define l_xi 494 //将“l_xi”宏定义为低音“7”的频率494Hz//以下是C调中音的音频宏定义#define dao 523 //将“dao”宏定义为中音“1”的频率523Hz #define re 587 //将“re”宏定义为中音“2”的频率587Hz#define mi 659 //将“mi”宏定义为中音“3”的频率659Hz#define fa 698 //将“fa”宏定义为中音“4”的频率698Hz#define sao 784 //将“sao”宏定义为中音“5”的频率784Hz #define la 880 //将“la”宏定义为中音“6”的频率880Hz#define xi 987 //将“xi”宏定义为中音“7”的频率53//以下是C调高音的音频宏定义#define h_dao 1046 //将“h_dao”宏定义为高音“1”的频率1046Hz #define h_re 1174 //将“h_re”宏定义为高音“2”的频率1174Hz #define h_mi 1318 //将“h_mi”宏定义为高音“3”的频率1318Hz #define h_fa 1396 //将“h_fa”宏定义为高音“4”的频率1396Hz #define h_sao 1567 //将“h_sao”宏定义为高音“5”的频率1567Hz #define h_la 1760 //将“h_la”宏定义为高音“6”的频率1760Hz #define h_xi 1975 //将“h_xi”宏定义为高音“7”的频率1975Hz /**************************************************************函数功能:软件延时子程序**************************************************************/void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/*******************************************函数功能:节拍的延时的基本单位,延时200ms******************************************/void delay(){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);/*******************************************函数功能:输出音频入口参数:F******************************************/void Output_Sound(void){C=(46083/f)*10; //计算定时常数TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法 TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法 TR0=1; //开定时T0delay(); //延时200ms,播放音频TR0=0; //关闭定时器sound=1; //关闭蜂鸣器keyval=0xff; //播放按键音频后,将按键值更改,停止播放}/*******************************************函数功能:主函数******************************************/void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1; //定时器T1中断允许TR1=1; //定时器T1启动,开始键盘扫描TMOD=0x10; //分别使用定时器T1的模式1,T0的模式0TH1=(65536-500)/256; //定时器T1的高8位赋初值TL1=(65536-500)%256; //定时器T1的高8位赋初值while(1) //无限循环{switch(keyval){case 1:f=dao; //如果第1个键按下,将中音1的频率赋给fOutput_Sound(); //转去计算定时常数break;case 2:f=l_xi; //如果第2个键按下,将低音7的频率赋给fOutput_Sound(); //转去计算定时常数break;case 3:f=l_la; //如果第3个键按下,将低音6的频率赋给fOutput_Sound(); //转去计算定时常数break;case 4:f=l_sao; //如果第4个键按下,将低音5的频率赋给fOutput_Sound(); //转去计算定时常数break;case 5:f=sao; //如果第5个键按下,将中音5的频率赋给fOutput_Sound(); //转去计算定时常数break;case 6:f=fa; //如果第6个键按下,将中音4的频率赋给fOutput_Sound(); //转去计算定时常数break;case 7:f=mi; //如果第7个键按下,将中音3的频率赋给fOutput_Sound(); //转去计算定时常数break;case 8:f=re; //如果第8个键按下,将中音2的频率赋给fOutput_Sound(); //转去计算定时常数break;case 9:f=h_re; //如果第9个键按下,将高音2的频率赋给fOutput_Sound(); //转去计算定时常数break;case 10:f=h_dao; //如果第10个键按下,将高音1的频率赋给fOutput_Sound(); //转去计算定时常数break;case 11:f=xi; //如果第11个键按下,将中音7的频率赋给fOutput_Sound(); //转去计算定时常数break;case 12:f=la; //如果第12个键按下,将中音6的频率赋给fOutput_Sound(); //转去计算定时常数break;case 13:f=h_la; //如果第13个键按下,将高音6的频率赋给fOutput_Sound(); //转去计算定时常数break;case 14:f=h_sao; //如果第14个键按下,将高音5的频率赋给fOutput_Sound(); //转去计算定时常数break;case 15:f=h_fa; //如果第15个键按下,将高音4的频率赋给fOutput_Sound(); //转去计算定时常数break;case 16:f=h_mi; //如果第16个键按下,将高音3的频率赋给fOutput_Sound(); //转去计算定时常数break;}}}/**************************************************************函数功能:定时器T0的中断服务子程序,使引脚输出音频方波**************************************************************/void Time0_serve(void ) interrupt 1 using 1{TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法sound=!sound; //将引脚取反,输出音频方波}/**************************************************************函数功能:定时器T1的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time1_serve(void) interrupt 3 using 2 //定时器T1的中断编号为3,使用第2组寄存器{TR1=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下 {delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接引脚的列线为低电平“0”keyval=10; //可判断是S10键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(输出低电平“0”)if(P14==0) //如果检测到接引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下}}TR1=1; //开启定时器T1TH1=(65536-500)/256; //定时器T1的高8位赋初值TL1=(65536-500)%256; //定时器T1的高8位赋初值}。