单片机+电子琴设计+八个音调+三首歌+歌词显示

合集下载

基于单片机的带音乐播放的电子琴设计

基于单片机的带音乐播放的电子琴设计

课题名称、主要内容和基本要求:进度安排:指导教师签名:评阅教师签名:毕业设计(论文)成绩:答辩委员会主任签名:摘要电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有10个按键和扬声器。

本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。

众所周知,由于一首音乐是由许多不同的音阶组合而成的,而每个音阶则对应着不同的频率,因此我们可以利用不同的频率来进行音阶的组合,即可产生美妙的音乐了。

对于单片机来说,产生不同的频率非常方便,只要算出某一音频的周期,然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后,就将输出脉冲的I/O反相,然后重复计时,此半周期再对I/O反相,即可在I/O脚上得到此频率的脉冲。

因此我们可以利用单片机的定时器,使其工作在计数器模式MODE1下,改变计数值TH0及TL0来产生不同频率的信号。

从而产生不同的音符[1]。

关键词:音阶,频率,单片机AbstractElectronic organ is a modern electronic music technology and the product is a ne w type of keyboard instruments. It played an important role in modern music. SCM ha s powerful control functions and flexible programming characteristics. It has converge d with modern people's lives, become an irreplaceable part. The main content is AT89 S51 control of the core components, design of a electronic organ. SCM as a host to th e core, with the keyboard, speaker and other core modules. In the main control modul e has 16 keys and a speaker. The system is steady, its simple hardware circuits, softwa re functions, reliability of control system and high cost performance is its advantages. It also has certain practical and reference value.Well-known, the music is made up by many different scales, and each scale corresponds to different frequency, so we can use different frequency to make combination of scales, and then produce wonderful music.As for single-chip microcomputer, it is very convenient to produce different frequency, we just calculate an audio cycle, then this cycle divided by 2, namely half cycle time, using timer to time the half cycle time.Whenever timing, it will output pulse I/O reverse phase, and repeat the timing, the half cycle again to the I/O reversed-phase, then can get this frequency pulse from the I/O feet. So we can use microcontroller timer to make it work in the counter mode and generate different frequency signal. Thus produce different notes. Keywords: scales,frequency, single-chip microcomputer目录第一章绪论 (1)1.1电子琴的特点及研究意义 (1)1.2系统介绍 (1)第二章方案论证 (2)2.1单片机选择 (2)2.2键盘选择 (2)2.3功放电路选择 (3)第三章系统设计 (4)3.1单片机的介绍 (4)3.1.1单片机AT89S52基本知识 (4)3.1.2单片机AT89S52产品特点 (4)3.1.3单片机AT89S52的使用 (5)3.1.4单片机AT89S52的特性 (6)3.1.5AT89S52引脚功能与封装 (7)3.2LED数码管 (9)3.2.1LED数码管主要技术参数 (9)3.2.2LED数码管的引脚说明 (10)3.2.3数码管编码说明 (11)3.3LM386 (12)3.3.1LM386简介 (12)3.3.2LM386特性 (12)3.3.3LM386应用特点 (12)3.3.4LM386引脚图 (12)3.3.5LM386注意事项 (12)第四章硬件设计 (13)4.1总体电路设计 (13)4.2单片机最小系统电路 (14)4.3LM386功放电路 (14)4.4数码管显示电路 (15)4.5按键电路 (16)4.6按键指示灯电路 (17)4.7音乐产生方法 (17)第五章软件设计 (19)5.1程序流程图 (19)5.2S1-S8按键识别程序 (20)5.3S9键识别电路程序 (21)5.4音乐产生程序 (22)第六章调试过程 (26)6.1数码管显示乱码 (26)6.3按键处理问题 (26)结论 (26)参考文献 (27)谢辞 (28)附录 (29)附录一程序源代码 (29)附录二电路图 (41)第一章绪论1.1电子琴特点及研究意义本论文设计的为电子琴,电子琴又称作电子键盘,属于电子乐器(区别于电声乐器),发音音量可以自由调节。

课程设计报告书之八音电子琴的设计-精品

课程设计报告书之八音电子琴的设计-精品
ENTITY TONE IS
PORT(INDEX: IN STD_LOGIC_VECTOR(7 DOWNTO 0);--音符输入信号
CODE: OUT STD_LOGIC_VECTOR(6 DOWNTO 0);--音符显示信号
HIGN: OUT STD_LOGIC;--高低音显示信号
TONE0: OUT INTEGER RANGE 0 TO 2047);--音符的分频系数
WHEN 4=>INDEX0<="00010000"; --5
WHEN 5=>INDEX0<="00010000"; --5
WHEN 6=>INDEX0<="00010000"; --5
WHEN 7=>INDEX0<="00100000"; --6
WHEN 8=>INDEX0<="10000000"; --8
TONE1: IN INTEGER RANGE 0 TO 2047;--音频分频系数
SPKS: OUT STD_LOGIC);--驱动扬声器的音频信号
END ENTITY FENPIN;
ARCHITECTURE ART OF FENPIN IS
SIGNAL PRECLK:STD_LOGIC;
SIGNAL FULLSPKS:STD_LOGIC;
END AUTO;
ARCHITECTURE BEHAVIORAL OF AUTO IS
SIGNAL COUNT0:INTEGERRANGE0 TO 31;
BEGIN
PULSE0:PROCESS(CLK,AUTO)
VARIABLE COUNT:INTEGERRANGE0 TO 8;

基于51单片机的简易电子琴设计

基于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微秒。

单片机+电子琴设计+八个音调+三首歌+歌词显示

单片机+电子琴设计+八个音调+三首歌+歌词显示

系统功能说明:1、通过八个按键是否按下发出相应的1234567i这8个音调2、实验中可以播放三首歌曲,通过开关控制3、播放歌曲时,液晶屏显示播放歌曲号及歌词附录1:晶振为12M的音乐频率表音符频率(Hz)简谱码(T值)低1DO 262 63628 TH0=F7H TL0=24H #1DO# 277 63731 TH0=F8H TL0=F3H 低2RE 294 63835 TH0=F9H TL0=5BH #2RE# 311 63928 TH0=F9H TL0=B8H 低3M 330 64021 TH0=FAH TL0=15H 低4FA 349 64103 TH0=FAH TL0=67H #4FA# 370 64185 TH0=FAH TL0=B9H 低5SO 392 64260 TH0=FBH TL0=04H #5SO# 415 64331 TH0=FBH TL0=4BH 低6LA 440 64400 TH0=FBH TL0=90H #6 466 64463 TH0=FBH TL0=CFH 低7SI 494 64524 TH0=FCH TL0=0CH 中1DO 523 64580 TH0=FCH TL0=44H #1DO# 554 64633 TH0=FCH TL0=79H 中2RE 587 64684 TH0=FCH TL0=ACH #2RE# 622 64732 TH0=FCH TL0=DCH 中3M 659 64777 TH0=FDH TL0=09H 中4FA 698 64820 TH0=FDH TL0=34H #4FA# 740 64860 TH0=FDH TL0=5CH 中5SO 784 64898 TH0=FDH TL0=82H #5SO# 831 64934 TH0=FDH TL0=A6H 中6LA 880 64968 TH0=FDH TL0=C8H #6 932 64994 TH0=FDH TL0=E2H 中7SI 988 65030 TH0=FEH TL0=06H 高1DO 1046 65058 TH0=FEH TL0=22H #1DO# 1109 65085 TH0=FEH TL0=3DH 高2RE 1175 65110 TH0=FEH TL0=56H #2RE# 1245 65134 TH0=FEH TL0=6EH 高3M 1318 65157 TH0=FEH TL0=85H 高4FA 1397 65178 TH0=FEH TL0=9AH #4FA# 1480 65198 TH0=FEH TL0=AEH 高5SO 1568 65217 TH0=FEH TL0=C1H #5SO# 1661 65235 TH0=FEH TL0=D3H 高6LA 1760 65252 TH0=FEH TL0=E4H #6 1865 65268 TH0=FEH TL0=F4H 高7SI 1967 65283 TH0=FFH TL0=03H 休止符用TH0=FFH ,TL0=FFH表示附录2:LCD相关资料两行液晶显示的地址:(均为十六位计数)0 1 2 3 4 5 6 7 8 9 A B C D E F40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F命令格式要求,设置地址指针的时候第8位为1,后边为地址,即AC0~AC6,就是对应上表的地址。

电子琴设计八音阶

电子琴设计八音阶

目录摘要 (2)关键字 (2)第一章系统设计 (2)1.1 设计要求 (2)1.1.1 根本局部 (2)1.1.2 发挥局部 (2)1.2总体设计方案 (2)1.2.1 设计思路 (3)1.2.2 方案比拟 (3)1.2.3 系统组成和工作原理 (3)第二章单元电路设计 (4)2.1顶层模块(top)的设计 (4)2.2自动演奏模块〔automusic〕的设计 (4)2.3音调发生模块〔tone〕的设计 (4)2.4数控分频模块〔speaker〕的设计 (4)第三章软件设计 (5)3.1VHDL语言简介 (5)3.2软件设计 (5)第四章系统测试 (6)4.1测试使用的仪器 (6)4.2测试方法 (6)4.3指标测试和测试结果 (6)第五章完毕语 (6)第六章参考文献 (6)第七章附录 (7)电子琴的设计摘要:用可编程逻辑器件〔PLD〕来完成该设计。

核心是一数控分频器,对输入的脉冲进展分频,得到每个音阶对应的频率,由此实现简易电子琴的发音功能。

电子琴可演奏由键盘输入的音阶或切换到自动演奏存储在电子琴的乐曲。

本设计基于超高速硬件描述语言VHDL 在Xilinx公司的SpartanⅡ系列的XC2S2005PQ-208芯片上编程实现;经仿真,硬件测试和调试根本能够到达技术指标,实验结果和仿真结果根本一致。

关键词:PLD,VHDL,数控分频,电子琴The Design of Electrical OrganCao Xueke Tan Xianfeng Tian Dandan〔Nanhua University HengYang Hunan 421001〕Teacher:Wang YanAbstract:The design is acplished with Programmable-Logic-Device(PLD).The core of it is anumerical control frequency divider, which can divide the input pulse into the corresponding frequency to the musical scale, so that it can achieve the sounding function of simple electronic organ. The organ can play the musical scale put in with a keyboard or switch to auto play the melody stored in it. The design is programmed with VHDL and realized in the chip of XC2005PQ-208 Xilinx series. It can basically reach the technique index after simulating, hardware debugging.The experiment result is consonant with the simulating result.Keywords:PLD, VHDL, numerical control frequency divider, electrical organ第一章系统设计1.1 设计要求1.1.1 根本局部设计一八音电子琴,由键盘输入来控制其对应的音响。

单片机课程设计--电子音调发生器

单片机课程设计--电子音调发生器

单片机课程设计报告电子音调发生器电子信息工程学院一、题目电子音调发生器二、设计的任务及要求利用JD51开发板上的按键S1~S4和蜂鸣器设计电子音调发生器,要求:(1)利用JD51开发板上的按键S1~S4进行音调选择,即按下不同的开关产生不同的音调,依次按动S1~S4及组合按键,蜂鸣器发出1234567i八个音调;并在数码管上显示。

(2)编写2支歌曲,并可进行选择播放。

三、工作原理及设计思路工作原理:音节由不同频率的方波产生,音节与频率的关系通过查表可得。

要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。

利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。

在JD51单片机上,产生方波的I/O脚选用P2.4,通过跳线选择器将单片机的P2.4与蜂鸣器的驱动电路相连。

这样P2.4输出不同频率的方波,蜂鸣器便会发出不同的声音。

另外,音乐的节拍是由延时实现的,如果1拍为0.4秒,1/4拍是0.1秒。

只要设定延时时间,就可求得节拍的时间。

延时作为基本延时时间,节拍值只能是它的整数倍。

每个音节相应的定时器初值X可按下法计算:(1/2)*(1/f)=(12/fosc)*(256-x)即x=256-(fosc/24f)其中f:音调频率,当晶振fosc=11.0592MHz时,音节“ 1 ”相应的定时器初值为x,则可得x=63777D=F921H其它的可同样求得。

表1设计思路1.总体框图2.蜂鸣电路模块由蜂鸣器驱动电路和89C51组成。

选择一只压电式蜂鸣器,压电式蜂鸣器工作时约需要100MA驱动电流。

当89C51输出为低电平时蜂鸣器产生蜂鸣音,89C51输出为高电平时,蜂鸣器不发声。

硬件图播放音调四、软件设计流程及描述根据要实现的功能,流程图如下:熟悉定时器和键盘扫描电路的工作原理及编程方法。

基于51单片机的电子八音盒详细设计步骤

基于51单片机的电子八音盒详细设计步骤

一、设计目的利用8052单片机结合内部定时器设计一个八音盒,按下单键可以演奏预先设置的歌曲旋律。

二、设计要求其基本功能为:1,使用LED显示器来显示目前演奏的歌曲编号;2,具有8个按键操作来选择演奏哪一首歌曲;3,内建8首歌曲旋律,按下单键可以演奏歌曲。

三、设计器材T89C52单片机、晶振、八个按键、二位一体共阳极数码管、电阻电容若干、导线。

四、设计方案及分析设计思路:(1)选择8052单片机,通过T0定时中断,并配合P2.0引脚输出音频频率。

(2)P2.0引脚输出接蜂鸣器。

(3)通过P0口接LED。

(4)P1口接键盘,输入歌曲号。

音符产生方法:不同的音调有不同的频率。

频率不同,音调也就不同。

利用定时器,使其工作在模式1,定时中断,然后控制P2.0引脚的输出每次取反,就可以在P2.0的引脚输出相应的方波频率。

改变计数初值,就改变了频率。

定时器的定时时间等于半个周期,定时时间到就输出脉冲取反,重复此过程,就可在P2.0引脚得到一音频的脉冲。

如:中音1的频率=523HZ,周期T=1/523=1912us;定时器的定时时间为:T/2=1912/2us=956us;计算得TH0,TL0的计数初值THTL=64580下面是个音符计数初值节拍产生方法:音乐中的节拍用延时时间产生。

假设1/4拍执行一次延时程序,这1/2拍就执行两次延时程序,所以只要求出1/4延时时间,其余的节拍就是他的倍数。

为方便记谱,将节拍数也进行编码,如下:建立曲谱编码表:编谱用8位编码,高4位代表音符,低4位代表节拍。

如5 6中音5,中音6,都是1/2拍,则编码为:82H 92H程序清单:#include <reg52.h>#define uchar unsigned char#define uint unsigned int#define ulong unsigned longsbit SPEAK = P2^0;//接蜂鸣器管脚uchar th0_f;uchar tl0_f;uchar code SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};uchar code jie8[8]={12,14,16,17,19,21,23,24};/**************************中断函数*******************************************/ timer0() interrupt 1{TL0=tl0_f;TH0=th0_f;SPEAK =~SPEAK; //取反音乐输出IO}/********************T0的值,及输出频率对照表***********************************/ uchar code freq[36*2]={0xA9,0xEF,//00220HZ ,1 //00x93,0xF0,//00233HZ ,1#0x73,0xF1,//00247HZ ,20x49,0xF2,//00262HZ ,2#0x07,0xF3,//00277HZ ,30xC8,0xF3,//00294HZ ,40x73,0xF4,//00311HZ ,4#0x1E,0xF5,//00330HZ ,50xB6,0xF5,//00349HZ ,5#0x4C,0xF6,//00370HZ ,60xD7,0xF6,//00392HZ ,6#0x5A,0xF7,//00415HZ ,70xD8,0xF7,//00440HZ 1 //120x4D,0xF8,//00466HZ 1# //130xBD,0xF8,//00494HZ 2 //140x24,0xF9,//00523HZ 2# //150x87,0xF9,//00554HZ 3 //160xE4,0xF9,//00587HZ 4 //170x3D,0xFA,//00622HZ 4# //180x90,0xFA,//00659HZ 5 //190xDE,0xFA,//00698HZ 5# //200x29,0xFB,//00740HZ 6 //210x6F,0xFB,//00784HZ 6# //220xB1,0xFB,//00831HZ 7 //230xEF,0xFB,//00880HZ `10x2A,0xFC,//00932HZ `1#0x62,0xFC,//00988HZ `20x95,0xFC,//01046HZ `2#0xC7,0xFC,//01109HZ `30xF6,0xFC,//01175HZ `40x22,0xFD,//01244HZ `4#0x4B,0xFD,//01318HZ `50x73,0xFD,//01397HZ `5#0x98,0xFD,//01480HZ `60xBB,0xFD,//01568HZ `6#0xDC,0xFD,//01661HZ `7 //35};/***************************音乐符号串解释函数****************************/ //入口:要解释的音乐符号串,输出的音调串,输出的时长串changedata(uchar *song,uchar *diao,uchar *jie){uchar i,i1,j;char gaodi; //高低+/-12音阶uchar banyin;//有没有半个升音阶uchar yinchang;//音长uchar code jie7[8]={0,12,14,16,17,19,21,23}; //C调的7个值*diao=*song;for(i=0,i1=0;;){gaodi=0; //高低=0banyin=0;//半音=0yinchang=4;//音长1拍if((*(song+i)=='|') || (*(song+i)==' ')) i++; //拍子间隔和一个空格过滤switch(*(song+i)){case ',': gaodi=-12;i++;//低音break;case '`': gaodi=12;i++; //高音break;}if(*(song+i)==0) //遇到0结束{*(diao+i1)=0; //加入结束标志0*(jie+i1)=0;return;}j=*(song+i)-0x30; i++; //取出基准音j=jie7[j]+gaodi; //加上高低音yinc: switch(*(song+i)){case '#': //有半音j加一个音阶i++;j++;goto yinc;case '-': //有一个音节加长yinchang+=4;i++;goto yinc;case '_': //有一个音节缩短yinchang/=2;i++;goto yinc;case '.': //有一个加半拍yinchang=yinchang+yinchang/2;i++;goto yinc;}*(diao+i1)=j; //记录音符*(jie+i1)=yinchang; //记录音长i1++;}}/******************************奏乐函数***************************************/ //入口:要演奏的音乐符号串void play(uchar *songdata){uchar i,c,j=0;uint n;uchar diaodata[48]; //音调缓冲uchar jiedata[48]; //音长缓冲changedata(songdata,diaodata,jiedata); //解释音乐符号串TR0=1;while(P1=0xff){for(i=0;diaodata[i]!=0;i++) //逐个符号演奏{tl0_f=freq[diaodata[i]*2]; //取出对应的定时值送给T0th0_f=freq[diaodata[i]*2+1];for(c=0;c<jiedata[i];c++) //按照音长延时{for(n=0;n<29500;n++); //29500if(P1!= 0xff)//((!K1)||(!K2)||(!K3)||(!K4))//发现按键,立即退出播放{TR0=0;return;}}TR0=0;for(n=0;n<460;n++); //音符间延时TR0=1;}}TR0=0;}//茉莉花uchar code molihua[]={"33_5_6_`1_`1_6_|55_6_5-|33_5_6_`1_`1_6_|55_6_5-|""5553_5_|665-|32_3_53_2_|11_2_1|"//"3_2_1_3_2.3_|56_`1_5-|23_5_2_3_1_,6_|,5-,61|"//"2.3_1_2-1_,6_|,5--"};//世上只有妈妈好uchar code mamahao[]={"6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3_2-|""2.3_55_6_|321-|5.3_2_1_,6_1_|,5--"};//小毛驴uchar code xiaomaolv[]={"1_1_1_3_|5_5_5_5_|6_6_6_`1|5-|""4_4_4_6_|3_3_3_3_|2_2_2_2_|5-"};//我是一只菠萝uchar code boluo[]={"1-|2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_`1_7_6_|5_4_2_3_11|""2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_5_2_3_|1---|"};//小星星uchar code xiaoxingxing[]={"1155|665-|4433|221-|""5544|332-|5544|332-|""1155|665-|4433|221-|"};//春天在哪里uchar code chuntian[]={"3_3_3_1_|,5,5_|3_3_3_1_|3-|5_5_3_1_|,5_,5_,5|,6_,7_1_3_|2-|" "3_3_3_1_|,5,5_|3_3_3_1_|3-|5_6_5_6_|5_4_3_1_|,5_3_|2_1_"};//两只老虎uchar code laohu[]={"1231|1231|345-|345-|""5_6_5_4_31|5_6_5_4_31|""151-|151-"};//就是爱你uchar code jiushiaini[]={"3_2_3_4_5,7_1_|1`1_7_7 5_6_|66_5_5_3_2_1_3_|4_,6_,7_1_32|" "3_2_3_4_5,7_1_|1`1_7_7_`3_|3-6_|5_4_.4_5_5-|4_,6_ ,7_1_32._1_|"};//黑白配uchar code heibai[]={"32345-|1,7123-|3,5,611-|"};//找朋友uchar code zhaopeng[]={"5_6_5_6_|5_6_5|5_`1_7_6_|5_6_5"};//数鸭子uchar code shuya[]={"313_3_1|3_3_5_6_5-|6_6_5_5_4_4_4|2_3_2_1_2"};//欢乐颂uchar code huanle[]={"3345|5432|1123|322-|3345|5432|1123|211-|"};//一分钱uchar code yifen[]={"5`1|6_`1_5|3_5_2_3_|5|3_5_6_`1_|5_6_5_3_|5_13_2"};//乐谱方式输入的音乐播放/*******************************主函数****************************************/ void main(void){P1=0xff;P0=SEG[0];TMOD = 0x01; //使用定时器0的16位工作模式TR0 = 0;ET0 = 1;EA = 1;while(1){switch(P1){case 0xfe:while(P1==0xfe){;}P0=SEG[1];play(molihua);SPEAK=0;break;//0 按下相应的键显示相对应的码值case 0xfd:while(P1==0xfd){;}P0=SEG[2];play(yifen);SPEAK=0;break;//1case 0xfb: while(P1==0xfb){;}P0=SEG[3];play(mamahao);SPEAK=0;break;//2case 0xf7: while(P1==0xf7){;}P0=SEG[4];play(xiaomaolv);SPEAK=0;break;//3case 0xef: while(P1==0xfe){;}P0=SEG[5];play(laohu);SPEAK=0;break;//4case 0xdf: while(P1==0xdf){;}P0=SEG[6];play(huanle);SPEAK=0;break;//5case 0xbf: while(P1==0xbf){;}P0=SEG[7];play(chuntian);SPEAK=0;break;//6case 0x7f: while(P1==0x7f){;}P0=SEG[8];play(zhaopeng);SPEAK=0;break;//7default: break;}TR0 = 0;}}五、问题分析与解决方法问题一:仿真问题仿真图画好之后,开始运行,数码管和发光二极管都没有反应。

单片机实现电子琴并可播放歌曲

单片机实现电子琴并可播放歌曲
0xC0,0xF9,0xA4,0xB0,
0x99,0x92,0x82,0xF8,
0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8e};
//中音1-7和高音1-7对应频率列表
uint16 code NoteFrequ[] = {
523,587,659,698,784,880,988, //中音1-7
for(i=0;i<4;i++)
{
P2=buff[i];
temp=P2;
temp&=0xf0;//取P2的高四位;
while(temp!=0xf0)
{
delay5ms(5);//延时5ms去除抖动;
temp=P2;
temp&=0xf0;
while(temp!=0xf0)
{
switch(temp)
{
case 0xe0:num=i*4+0;break;//获取键值;
}
if(num==8)
{
T0LoadH = 0xff;
T0LoadL = 0x00;
TR0 = 1;
flag = 0;
ADDR0 = 0;
ADDR1 = 1;
ADDR2 = 1;
P0 = 0x00;
for(i=0;i<10000;i++);//闪烁灯全亮
PlayTwoTiger();
}
}
void PlayTwoTiger()
//计算发生时间,为总时间的0.75
/***********去除抖动********************/
while(temp!=0xf0)
{
temp=P2;

八音自动播放电子琴设计

八音自动播放电子琴设计

八音自动播放电子琴设计首先,我们来介绍一下八音自动播放电子琴的设计原理。

该电子琴通过使用一个专门设计的芯片来控制音色的输出。

这个芯片包含了多个音源,每个音源都能够产生特定的音调。

通过控制这些音源的输出,可以实现不同的音调组合,从而产生各种曲调。

接下来,我们来看一下八音自动播放电子琴的硬件架构。

整个硬件架构通常包括音源模块、控制模块和音箱模块。

音源模块主要负责产生音调,并将其输出给控制模块。

控制模块则负责接收用户的输入指令,并根据指令控制音源模块的输出。

最后,音箱模块负责将产生的声音放大,从而使得音乐可以被听到。

在软件方面,八音自动播放电子琴的设计需要考虑到音调的控制以及音乐的编码。

音调的控制可以通过编程实现,将不同的音调对应到不同的控制指令上。

音乐的编码可以采用MIDI(Musical Instrument Digital Interface)标准,通过将音乐的各个元素进行编码,可以实现对音乐的控制和演奏。

实现八音自动播放电子琴的关键技术主要包括音源的设计和控制模块的编程。

在音源的设计方面,需要考虑到音色的产生和输出。

通常可以采用数字合成技术(Digital Sound Synthesis),通过数学算法模拟不同乐器的音色。

在控制模块的编程方面,需要设计一个用户友好的界面,方便用户选择和控制不同的音调和曲调。

接下来,我们来介绍一下八音自动播放电子琴的使用方法。

用户可以通过控制模块上的按钮选择不同的音调和曲调。

同时,用户也可以通过外部设备(如电脑或手机)将自己编写的音乐文件导入到电子琴中进行演奏。

通过简单的操作,用户就可以轻松地演奏出各种曲调。

总结一下,八音自动播放电子琴是一种能够自动演奏八种不同音调的电子琴。

它的设计原理是通过内置程序以及特殊的装置,实现对音调的控制和演奏。

在硬件方面,需要考虑到音源模块、控制模块和音箱模块的设计和连接。

在软件方面,需要考虑到音调的控制和音乐的编码。

实现八音自动播放电子琴的关键技术包括音源的设计和控制模块的编程。

(完整word版)基于51单片机的电子琴设计

(完整word版)基于51单片机的电子琴设计

摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。

我们都会抽空欣赏世界名曲,作为对精神的洗礼。

本论文设计一个基于单片机的简易电子琴。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经融入现代人们的生活中,成为不可替代的一部分。

本文的主要内容是用AT89C51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有8个按键和扬声器。

本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高,具有一定的实用和参考价值。

关键词:AT89C51单片机;数码管;电子琴目录1 系统方案设计 (1)1.1 设计指标 (1)1.2 系统方案综述 (1)1.3 系统设计思路 (1)2 硬件设计 (2)2.1 电路图 (2)2.2 单片机AT89C51简介 (2)2.3 单片机的工作过程 (4)2.4 键盘电路 (5)2.5 显示电路 (6)2.6 声音电路 (7)3 系统软件设计 (8)3.1延时程序设计 (9)3.2定时器初始化及其中断函数 (10)3.3示例音乐播放程序 (10)3.4单独按键中断处理函数 (11)4 实验结果与分析 (11)4.1 Proteus软件简介 (11)4.2仿真调试 (12)5 设计心得 (14)6 参考文献 (14)附录 (15)附录A 元件清单、器件识别与检测 (15)附录B 程序源代码 (16)1 系统方案设计1.1 设计指标①设计一个简易的八音符电子琴,它可通过按键输入来控制音响。

②演奏时可以选择是手动演奏(由键盘输入)还是自动演奏已存曲目,并且在演奏完已存曲目后可自动复位。

1.2系统方案综述从系统实现的功能上来看,电子琴的设计主要利用所给键盘的1,2,3,4,5,6,7,8八个键,能够发出八个不同的音调,并且要求按下按键发声,松开延时一段时间停止,中间再按别的键再发出另外一种音调的声音。

单片机-电子琴演奏

单片机-电子琴演奏

目录目录 0一、设计内容 (1)二、方案讨论 (1)三、电路原理图 (2)四、程序设计 (5)五、电子琴发声原理 (8)六、调试结果 (8)七、电子琴程序 (9)八、参考文献 (17)一、设计内容(一)设计题目:电子琴演奏(二)目的要求1)使用4×4矩阵式键盘设计出16个音符,随意弹奏。

2)用功能键可转换成3首不同的歌曲演奏。

二、方案讨论(一)方案一:用4×4矩阵式键盘控制16个音符,用三个独立按键作为功能键,实现三首不同歌曲的演奏。

方案二:通过一个开关控制4×4矩阵式键盘的功能转换,同时控制16个音符和歌曲的演奏。

方案一虽然用的按键相对较多,但是整体结构简单明了,便于理解和编程,而且音符和歌曲两部分不易产生干扰;方案二结构紧凑,电路简单,但程序较为繁琐,易产生干扰。

故采用第二种方案。

(二)方案图(三)面板布置图(四)设计任务1)电路结构设计在PROTEUS中绘制电子琴各部分的电路,能量流要正确。

2)软件设计用汇编语言编写程序,实现电子琴的功能3)调试仿真将编译生成的.hex文件导入芯片,进行仿真。

三、电路原理图(一)时钟电路(二)复位电路(三)功放驱动电路及LM386(四)4×4矩阵式键盘电路(五)三个控制自动音乐播放的独立按键电路(六)整体电路(二)16音阶程序框图(三)T0中断服务程序框图(四)自动音乐播放程序框图YYNN返回五、电子琴发声原理一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

现在以单片机12MHZ晶振为例,例出高中低音符与单片机计数T0相关的计数值如下表所示:音符频率(HZ)简谱码(T值)音符频率(HZ)简谱码(T值)低1 DO 262 63628 # 4 FA# 740 64860#1 DO# 277 63731 中 5 SO 784 64898低2 RE 294 63835 # 5 SO# 831 64934#2 RE# 311 63928 中 6 LA 880 64968低 3 M 330 64021 # 6 932 64994低 4 FA 349 64103 中 7 SI 988 65030# 4 FA# 370 64185 高 1 DO 1046 65058低 5 SO 392 64260 # 1 DO# 1109 65085# 5 SO# 415 64331 高 2 RE 1175 65110低 6 LA 440 64400 # 2 RE# 1245 65134# 6 466 64463 高 3 M 1318 65157低 7 SI 494 64524 高 4 FA 1397 65178中 1 DO 523 64580 # 4 FA# 1480 65198# 1 DO# 554 64633 高 5 SO 1568 65217中 2 RE 587 64684 # 5 SO# 1661 65235# 2 RE# 622 64732 高 6 LA 1760 65252中 3 M 659 64777 # 6 1865 65268中 4 FA 698 64820 高 7 SI 1967 65283六、调试结果在Keil软件中进行了程序的编写、调试以及编译,软件显示程序没有错误。

手把手教你用51单片机DIY音乐频谱显示_稿件 - V3

手把手教你用51单片机DIY音乐频谱显示_稿件 - V3








图二

MCU 部分的原理图





图三 (三) 编程思路 1)
点阵驱动电路图
在主函数中,单片机通过 AD 对音频数据采样,然后存放到数据缓存区进行预处理,完成 AD 滤波 处理, 自动增益控制信息扫描以及其他信息处理。 接着, 将缓存区数据送入 快速傅立叶变换 (FFT) 处理子函数进行运算。 处理完后, 从缓存区取出运算结果, 根据得到幅值计算出点阵的显示数据, 并存储到显示缓存区。 在中断函数中,根据显示缓冲区的内容对点阵显示屏进行实时刷新点亮。
根据傅立叶分析,任何声音可以分解为数个甚至无限个正弦波,而它们往往又包含有无数多的谐 波分量。而它们又往往是时刻在变化着。所以一个声音的构成其实是很复杂的。将声音的频率分量绘 制成曲线,就形成了频谱。 对频谱进行分析的仪器就是频谱分析仪,早期频谱仪都是模拟分析的。频谱仪的原理就是将声音
信号通过一系列不同中心频率的模拟带通滤波器。每个带通滤波器相当于一个共振电路,其特性由中 心频率(步进的) 、频带宽度及响应时间表示。在声音信号通过滤波器后,经过平方检波器,并进行平 均之后,在每个频率上测定所传输的功率,从而得到信号的频谱。然而,传统的频谱仪受到滤波器性 能的制约,因为模拟电路本身的特性所局限,滤波器的带宽和响应时间成反比,也就是说模拟滤波器 的频率分辨力与时间分解能力之间存在矛盾。因为频谱仪所测量的往往都是非稳态声,一般来说,都 是使用若干个滤波器来覆盖整个频率范围,并将信号同时并联地输入到这些滤波器上去。或者使用中 心频率能够从低到高连续变化的滤波器。 随着科学技术的不断进步,现在我们所使用的基本不再是那些笨重而不准确的模拟仪器的频谱仪, 取而代之的是基于处理器的软件分析法。它分析的数据来源其实是经过了 ADC(模数转换器件)转换 后得出的数字信号,所以频谱仪软件所测量的信号准确度,很大程度取决于数模转换电路的性能。比 起模拟滤波器,数字滤波器应该要更加迅速和精确。 2) 你问:那什么是均衡器和音乐频谱显示?在我们欣赏音乐的过程中有什么样的作用? 我答:对于录音棚等专业级别的音乐制作来说,通常都需要对录制的音频信号进行频谱分析来辅助音 频的加工制作。当然对于我们普通的爱好者来说,不需要那么精确的频谱分析,我们更多的是用来略 显音乐节奏,美化环境,增添气氛。于是,大多数的音乐播放软件(如图一),手机,mp3,高档的音箱 设备等,都有了音乐频谱显示。

毕业设计:基于AT89S52单片机的玩具电子琴设计

毕业设计:基于AT89S52单片机的玩具电子琴设计

基于AT89S52的玩具电子琴设计摘要:随着电子技术的发展,数字系统正朝着速度快、容量大、体积重量轻的方向发展。

在其推动下,现代电子产品几乎渗透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一步提高,产品更新换代的节奏也越来越快。

其中尤其单片机技术的不断发展,使得单片机在日用生活用品中的应用越来越广泛。

本文利用AT89S52单片机,设计了一种玩具电子琴,该电子琴除了可以演奏1-8八个音符以外,还可以自动播放两首歌曲,是单片机的又一扩展应用。

本文详细介绍了电子琴的工作原理及硬件软件设计,并制作了实物,测试结果显示,系统运行良好。

关键词:单片机蜂鸣器音乐Abstract:With the development of electronic technology, digital system is moving fast, large capacity, the volume and the weight of the light direction. Under its impetus, the modern electronic products penetrated almost every field of the society, a strong impetus to the development of social productivity and the improvement of social information-based degree, simultaneously also makes the modern electronic products to further improve the performance, product upgrading are increasingly fast pace. Development especially computer technology, the microcomputer applications in daily life supplies more and more widely in the. In this paper, using AT89S52 microcontroller, design a toy electronic organ, the organ, in addition to playing eight notes, can also automatically play two songs, is an extended application of mcu. This paper introduces the working principle and hardware and software design of the electronic organ, and create a physical, test results show that, the system runs wellKeyword: MCU buzzer music目录第1章绪论 (1)1.1 概述 (1)1.2 研究内容 (3)1.3 理论基础 (5)第2章硬件设计 (1)2.1 方案论证及系统设计 (1)2.2 系统硬件分析 (1)2.2.1 单片机小系统 (25)2.2.2 供电模块 (25)第3章软件设计 (1)3.1 KEIL软件介绍 (1)3.2 系统流程 (1)3.2.1 系统主流程 (25)3.2.2 中断初始化流程 (25)第4章仿真测试 (25)4.1 PROTEUS软件介绍 (25)4.2 系统主要仿真图 (25)4.3 测试 (25)致谢 (59)参考文献 (60)附录代码 (63)第1章绪论1.1 概述目前单片机的应用渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

8键电子琴的设计

8键电子琴的设计

简易电子琴设计说明一、方案选择1、任务要求1)、任务:设计并制作一个能完成电子琴基本功能的电路。

2)、技术要求:①发生器件为8Ω、0.25W动圈式扬声器;②设置至少八个音符的按键;③+5V稳压电源供电。

3)、发挥要求:①增加演奏三首固定乐曲的按键;②增加其他音乐效果;③固定乐曲演奏计时。

2、设计方案用AT89C51单片机为核心控制元件,设计一个简易的电子琴. 本方案以AT89C51单片机作为主控核心,并与键盘、扬声器等模块组成,设有16个按键和一个扬声器.根据使用者的操作随意弹奏想要表达的音乐。

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,其中T0用来产生音频频率,T1用来产生音调。

,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

通过对单片机系统的学习和认识,我们可以通过AT89C51可以完成此建议电子琴的任务,因为我们学过并且有很多的资料里,但是使用AT89C51单片机做此电子琴是我们的不二选择,因为我们的了解和接触最多的就是AT89C51,别的型号的芯片我们不熟,所以AT89C51是个很好的选择。

AT89C51单片机有128B的数据存储器RAM,对于一般的小型应用系统已经够用,对需要存放大量数据的系统,就需要扩展数据存储器。

作为数据存储器的使用有静态读/写存储器SRAM,动态读写存储器DRAM和E²PROM存储器等。

单片机一般用SRAM扩展数据存储器。

本次设计共有十六个键,由于在音阶中“0”不代表任何音阶,所以,没有使用“0”键。

其余15个键是发生键,按键时间长发生长,按键时间短发生短;按“唱歌键”后,再按“1”键或“2”建….“14”键,可播放14个键所代表的14首歌曲;按“1”到“F”键后,可发出低、中音哆、来、咪、发、梭、拉、西、哆。

51单片机电子琴,支持弹奏14音、播放21音、支持重放弹奏曲目、支持节拍显示和音调显示资料

51单片机电子琴,支持弹奏14音、播放21音、支持重放弹奏曲目、支持节拍显示和音调显示资料

矩阵按键分布:K0 K1 K2 K3K4 K5 K6 K7K8 K9 K10 K11K12 K13 K14 K15按键功能介绍:弹奏模式下:K0:录制按键。

按下后,开始录制接下来弹奏的歌曲,再次按下录制结束。

按右下角的播放按键,播放刚才弹奏的歌曲。

K1~K3:低5音~低7音K4:0音K5~K11:中1音~中7音K12~K15 :高1音~高4音。

播放模式下:K12:上一首歌曲K13:暂停、再次播放K14:下一首歌曲K15:播放模式时功能是,退出播放程序:#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define PSMG P0 //数码管IO口#define PKEY P1 //定义4x4按键接的IO口行扫描#define PLED P2 //LED接的IO口sbit PLAY = P3^1;sbit SPK = P3^0;#define ALLSONG 3 //歌曲总数按实际写#define CODEMAX 30 //最大音符数uchar tone_h;uchar tone_l;uchar t1_flag = 0; //用于记录定时器1进入中断的次数uchar PressTime = 0; //按键按下的时间(节拍)uchar code chuzhi[3][16]={ //音调对应的计数初值0xff,0xff, //用任意值占0位,因为音调从1开始0xf8,0x8c,//低10xf9,0x5b,// 20xfa,0x15,// 30xfa,0x67,// 40xfb,0x04,// 50xfb,0x90,// 60xfc,0x0c,//低70xff,0xff,//占0位0xfc,0x44,//中10xfc,0xac,// 20xfd,0x09,// 30xfd,0x34,// 40xfd,0x82,// 50xfd,0xc8,// 60xfe,0x06,//中70xff,0xff,//占0位0xfe,0x22,//高10xfe,0x56,// 20xfe,0x85,// 30xfe,0x9a,// 40xfe,0xc1,// 50xfe,0xe4,// 60xff,0x03 //高7};//共阴数码管段码表uchar code YDTAB[23]={0x00, //各段全灭【0】0x77,0x7c,0x39,0x5e,0x79,0x71,0x3d, //a - g 【1~7】0x3f, //0 【8】0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, //1 - 7 【9~15】0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87 //1. - 7. 【16~22】};//发光二极管闪烁表uchar code LEDTAB[9]={0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};//****** 生日快乐******uint code srkl[] = {205,205,406,405,411,807,205,205,406,405,412,811,205,205,415,413,411,407,406,314,114,413,411,413,812,305,105,406,405,411,807,305,105,406,405,412,811,305,105,415,413,411,407,406,314,114,413,411,412,811,410,0xffff};//*******恋曲1990*******uint code lq1990[] = {613,213,412,411,613,213,412,411,613,213,412,411,1213, 110, //前奏215,215,215,215,413,412, //乌溜溜的黑眼珠613,211,211,212,413,1206, //和你的笑脸212,213,212,213,415,213,212, //怎么也难忘记612,211,211,206,405,1213,110, //你容颜的转变215,215,215,215,213,212, //轻飘飘的旧时613,211,211,212,213,1206, //光就这么溜走212,213,212,213,415,213,212, //转头回去看看612,205,213,212,413,1211,110, //时已匆匆数年215,215,215,215,413,412, //苍茫茫的天涯613,211,211,212,413,1206, //路是你的漂泊212,213,212,213,415,213,212, //寻寻觅觅长相612,211,211,206,405,1213,110, //守是我的脚步215,215,215,215,213,212, //黑漆漆的孤枕613,211,211,212,213,1206, //边是你的温柔212,213,212,213,415,213,212, //醒来时的清晨612,205,213,212,413,1211,110, //里是我的哀愁215,215,215,215,413,412, //轰隆隆的雷雨613,211,211,212,413,1206, //声在我的窗前212,213,212,213,415,213,212, //怎么也难忘记612,211,211,206,405,1213,110, //你离去的转变215,215,215,215,213,212, //孤单单的身影613,211,211,212,213,1206, //后寂寥的心情212,213,212,213,415,213,212, //永远无怨612,205,213,212,413,1211,110, //的是我的双眼615,213,415,416, //或许明日621,216,421,416, //太阳西下415,415,415,416,1213, //倦鸟已归时212,213,212,213,415,413, //你将已经踏上612,211,411,413,1212,210, //旧时的归途613,213,412,413, //人生难得615,213,415,416, //再次寻觅421,421,421,422,1216, //相知的伴侣221,221,221,221,416,415, //生命终究难舍212,412,212,412,413,1215,1610, 1610, //蓝蓝的白云天0xFFFF,};//==========================//粗略延时函数//==========================void delayms(uint ms)//延时?个ms{uchar a,b,c;while(ms--){for(c=1;c>0;c--)for(b=142;b>0;b--)for(a=2;a>0;a--);}}//======================//定时器1 测量按键持续的节拍数//======================void Timer1_Init(void){EA = 1;ET1 = 1;TMOD &= 0x0F;TMOD |= 0x10;TH1 = (65536-25000)/256;TL1 = (65536-25000)%256; //25ms中断一次}void timer1() interrupt 3{TH1 = (65536-25000)/256;TL1 = (65536-25000)%256; //25ms中断一次t1_flag++;if(t1_flag == 5) //125ms{t1_flag = 0;if(PressTime < 16) //最多16 即最长4秒PressTime++;//8个LED显示节拍if(PressTime <= 8)PLED = LEDTAB[PressTime];else PLED = LEDTAB[8];}}//======================//按键扫描函数【行扫描】//低4位接行,高4位接列/*键值分布0 1 2 34 5 6 78 9 10 1112 13 14 15*///======================uchar keyScan(void){uchar hang;uchar key;uchar temp;for(hang = 0;hang < 4;hang++){PKEY = ~(1<<hang);temp = PKEY&0xF0; //取高4位的值temp >>= 4; //将高四位右移到低四位if(temp != 0x0F) //有按键按下{switch(temp){case 14: key = 4*hang+0;break; //temp:1110case 13: key = 4*hang+1;break; //temp:1101case 11: key = 4*hang+2;break; //temp:1011case 7: key = 4*hang+3;break; //temp:0111 }break; //有键按下,获取键值后,终止扫描}else //没有按键按下返回255key = 255;}return key;}//======================//节拍延时//======================void delay125ms(uint pai) //延时?*125ms 即?个节拍{uchar a,b,c;while(pai--){for(c=239;c>0;c--)for(b=104;b>0;b--)for(a=1;a>0;a--);}}//======================//定时器0 产生音调//======================void Timer0_Init(void){EA = 1;ET0 = 1;TMOD &= 0xF0;TMOD |= 0x01;PT0 = 1;TH0 = 255;TL0 = 255;}//======================//定时器0中断每进入一次,SPK取反//======================void timer0() interrupt 1{TH0 = tone_h;TL0 = tone_l;SPK = ~SPK;}//======================//存储弹奏的歌曲//0xffff代表歌曲结束//千位与百位表示节拍//十位:低中高音[分别是0,1,2]//个位:音调[0~7] [0代表不发声]//======================uint music[CODEMAX] ={215,215,215,215,413,412, //乌溜溜的黑眼珠613,211,211,212,413,1206, //和你的笑脸212,213,212,213,415,213,212, //怎么也难忘记612,211,211,206,405,1213,110, //你容颜的转变0xffff,};//====================================//播放函数//播放完毕后返回1,否则返回0//music:歌曲数组,note:发第几个音//====================================uchar PlayMusic(uint *music,uint note){uchar yin1; //低中高音0,1,2uchar yin2; //音调0~7 0代表不发声,但有节拍uchar jiepai;if(music[note] == 0xffff)return 1;else{if(music[note]%10 != 0) //音调不为0 【音调为0时表示不发声,但有节拍】{yin1 = music[note]%100/10;yin2 = music[note]%10;tone_h = TH0 = chuzhi[yin1][yin2*2 ]; //音调高位【二维数组第1维表示低中高音,第二维表示音调】tone_l = TL0 = chuzhi[yin1][yin2*2 + 1]; //音调低位TR0 = 1; //开启定时器0 开始发声//======数码管显示音调==================if(yin1 == 0) //低音{ PSMG = YDTAB[yin2]; }else if(yin1 == 1) //中音{ PSMG = YDTAB[8+yin2];}else if(yin1 ==2) //高音{ PSMG = YDTAB[15+yin2];}//================================== }else{ P SMG = YDTAB[8]; }jiepai = music[note]/100;//===此处利用定时器1中断中的节拍显示功能t1_flag = 0;PressTime = 0;TH1 = (65536-25000)/256;TL1 = (65536-25000)%256;//25ms中断一次TR1 = 1; //开启定时器1delay125ms(jiepai); //节拍TR0 = 0; //已经响够节拍数,停止发声。

单片机课程设计报告 电子琴

单片机课程设计报告  电子琴

电子音调发生器一、实验目的1.了解计算机发声原理.2.熟悉定时器和键盘扫描电路的工作原理及编程方法。

二、实验完成的功能1.利用键盘1~7进行音调选择, 即按下音符产生对应音调。

2.事先存储三首歌曲, 并可进行选择播放。

3.谱曲功能:通过按键对LCD菜单选项进行选择, 进入谱曲界面, 通过按键1~7分别输入音高与几分音符类型, 由按键输入若干数据完成谱曲。

4.在播放存储歌曲与谱曲播放时,对应音符及其节奏LCD显示对应频谱。

5.在播放音乐时按“返回”键出现返回界面,由键盘按“确认”键选择返回主菜单或循环播放。

三、实验原理1.音节由不同频率的方波产生, 音节与频率的关系如表(1)所示。

要产生音频方波, 只要计算出某一音频的周期(..频率), 然后将此周期除以2, 即为半周期的时间。

利用计时器计时此半周期时间, 每当计时到后就将输出方波的I/O(P1.7)反相, 然后重复计时此半周期时间再对I/O反相, 就可在P1.7脚得到此频率的方波。

将P1.7经过驱动电路与蜂鸣器相连, 随着P1.7口输出不同频率的方波, 蜂鸣器便会发出不同的声音。

音乐的节拍是由延时实现的, 如果1拍的时间为0.4秒, 1/4拍是0.1秒。

只要设定延时时间, 就可得到节拍的时间。

延时实现基本延时时间, 节拍值只能是它的整数倍。

每个音节相应的定时器初值计算公式如下:(1/2)*(1/f)=(12/fose)*(216-x)即 x=216-(fose/24f)其中, f是音调频率, 当晶振fosc=11.0592MHz时, 音节“1”相应的定时器初值为x, 则可得到x=63777D=F921H, 其它的可同样得到。

表(1)音节与频率的关系在编写歌曲代码过程中, 音高由三位数字组成: 个位是表示1~7 这七个音符;十位是表示音符所在的音区:1-低音, -中音, -高音;百位表示这个音符是否要升半音: 0-不升, -升半音。

音长最多由三位数字组成: 个位表示音符的时值, 其对应关系是:|数值(n): |0 |1 |2 |3 | 4 | 5 | 6|几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2^n 十位表示音符的演奏效果(0-2): 0-普通, -连音, -顿音, 百位是符点位: 0-无符点, 1-有符点。

《电子设计》简易电子琴

《电子设计》简易电子琴

《电子设计》简易电子琴1、设计任务本次的设计任务是设计一款简易电子琴,其功能是能够通过使用者交互完成播放两个八度声音与音乐的目的。

2、设计方案2.1设计框图本次设计共有两种方案。

第一种方案使用STC89C52RC 单片机。

通过独立按键完成输入,通过扬声器完成声音的输出。

其设计框图如下:图1:方案一硬件框图第二种方案使用STC8G1K08单片机。

通过触摸按键结合单片机ADC 完成输入,通过TC8002功放电路完成声音的输出。

其设计框图如下:图2:方案二硬件框图2.2 各模块设计2.2.1 电源设计(例如)方案一使用的是STC89C52RC 单片机,其工作电压为5V ,通过引脚与5V 外部电源连接即可完成供电。

方案二使用的是STC8G1K08单片机,其工作电压也是5V ,通过TYPEC 接口完成供电。

原理图如下图所示:图3:方案二电源设计2.2.2 输入电路设计方案一与方案二使用两种不同的输入方式。

方案一使用共阴极接法的独立按键与单片机引脚连接,通过单片机检测按键是否被按下完成输入检测。

其原理图如下图所示:图4:方案一输入电路方案二使用触摸检测电路完成输入功能。

使用者接触触摸按键时会改变该电路的电容,使单片机ADC 引脚接收的数据发生改变,进而达到输入功能。

其原理图如下图所示:图5:方案二输入电路2.2.3 扬声器与功放电路两种方案播放声音的设备都是喇叭,但驱动电路不同。

方案一使用的三极管放大电路,其原理图如下图所示:图6:方案一扬声器驱动电路方案二使用功放芯片TC8002完成扬声器的驱动。

该芯片是一颗带关断模式,专为大功率高保真的应用场合所设计的音频功放IC。

它所需外围元件少且在2V~5V的输入电压下即可工作。

它的管脚图如下图所示:图7:TC8002管脚排列图经查看该芯片手册设计的功放电路图如下图所示:图8:功放模块电路图2.2.4 其余电路设计除以上两种模块,还有其余的模块电路如方案一的晶振电路,复位电路,方案二的供电提示电路等。

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

系统功能说明:1、通过八个按键是否按下发出相应的1234567i这8个音调2、实验中可以播放三首歌曲,通过开关控制3、播放歌曲时,液晶屏显示播放歌曲号及歌词附录1:晶振为12M的音乐频率表音符频率(Hz)简谱码(T值)低1DO 262 63628 TH0=F7H TL0=24H #1DO# 277 63731 TH0=F8H TL0=F3H 低2RE 294 63835 TH0=F9H TL0=5BH #2RE# 311 63928 TH0=F9H TL0=B8H 低3M 330 64021 TH0=FAH TL0=15H 低4FA 349 64103 TH0=FAH TL0=67H #4FA# 370 64185 TH0=FAH TL0=B9H 低5SO 392 64260 TH0=FBH TL0=04H #5SO# 415 64331 TH0=FBH TL0=4BH 低6LA 440 64400 TH0=FBH TL0=90H #6 466 64463 TH0=FBH TL0=CFH 低7SI 494 64524 TH0=FCH TL0=0CH 中1DO 523 64580 TH0=FCH TL0=44H #1DO# 554 64633 TH0=FCH TL0=79H 中2RE 587 64684 TH0=FCH TL0=ACH #2RE# 622 64732 TH0=FCH TL0=DCH 中3M 659 64777 TH0=FDH TL0=09H 中4FA 698 64820 TH0=FDH TL0=34H #4FA# 740 64860 TH0=FDH TL0=5CH 中5SO 784 64898 TH0=FDH TL0=82H #5SO# 831 64934 TH0=FDH TL0=A6H 中6LA 880 64968 TH0=FDH TL0=C8H #6 932 64994 TH0=FDH TL0=E2H 中7SI 988 65030 TH0=FEH TL0=06H 高1DO 1046 65058 TH0=FEH TL0=22H #1DO# 1109 65085 TH0=FEH TL0=3DH 高2RE 1175 65110 TH0=FEH TL0=56H #2RE# 1245 65134 TH0=FEH TL0=6EH 高3M 1318 65157 TH0=FEH TL0=85H 高4FA 1397 65178 TH0=FEH TL0=9AH #4FA# 1480 65198 TH0=FEH TL0=AEH 高5SO 1568 65217 TH0=FEH TL0=C1H #5SO# 1661 65235 TH0=FEH TL0=D3H 高6LA 1760 65252 TH0=FEH TL0=E4H #6 1865 65268 TH0=FEH TL0=F4H 高7SI 1967 65283 TH0=FFH TL0=03H 休止符用TH0=FFH ,TL0=FFH表示附录2:LCD相关资料两行液晶显示的地址:(均为十六位计数)0 1 2 3 4 5 6 7 8 9 A B C D E F40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F命令格式要求,设置地址指针的时候第8位为1,后边为地址,即AC0~AC6,就是对应上表的地址。

附录3:实验程序:RS BIT P2.0 ;定义液晶显示端口标号RW BIT P2.1E BIT P2.2;********************************************T0TH EQU 24H ;T0两个暂存变量T0TL EQU 23HORG 0000HLJMP INITIONORG 000BHLJMP T0INTORG 0100H;********************************************;*************************液晶初始化******************INITION:MOV SP,#70HMOV P0,#01H ;清屏CALL ENABLEMOV P0,#38H ;8位,2行显示CALL ENABLEMOV P0,#0CH ;屏显on,关光标CALL ENABLEMOV P0,#06H ;计数地址加1,自动右移CALL ENABLE;******************************************;开机提示;******************************************MOV P0,#80HCALL ENABLEMOV DPTR,#TABLE0 ;写数据的第一行CALL WRITE1MOV P0,#00010000B ;光标左移两位CALL ENABLEMOV P0,#00010000BCALL ENABLECALL DEL0LJMP MAIN;*********************************************写指令ENABLE:CLR RSCLR RWSETB ECALL DEL0CLR ERET;**********************************************写数据WRITE1:MOV R1,#00H ;查表程序,从表头到表尾A1:MOV A,R1MOVC A,@A+DPTRCALL WRITE2INC R1CJNE A,#00H,A1 ;未到字符串末尾继续RETWRITE2:MOV P0,A ;直接将数据写入液晶屏SETB RSCLR RWSETB ECALL DEL0CLR ERETDEL0:MOV R4,#020HC0:MOV R5,#020HC1: DJNZ R5,C1DJNZ R4,C0RET;******************************************TABLE0:DB 'WELCOM HERE',00H;*************************内存初始化******************INITIAL:MOV R3,#08HMOV R0,#30HM1:MOV @R0,#00HINC R0DJNZ R3,M1RET;*************************选择按键播放八个音调****************** MAIN: MOV SP,#80H ;初始化堆栈MOV TMOD,#11H ;定时器0工作方式0,定时器1工作方式0SETB EASETB ET0 ;计数器0允许SETB ET1 ;计数器1允许START: SETB P3.7 ;关蜂鸣器CLR TR0 ;定时器不允许SCAN: ;键盘扫描MOV A,P1CJNE A,#0FFH,SU_KEY ;判断键盘按下,跳到SU_KEY,若未按,继续扫描NOPLJMP SCANSU_KEY:SU_KEY1:JB P1.0,SU_KEY2 ;如果不是第1个键按下,转MOV DPH,#0FCHMOV DPL,#44HSJMP PLAYSU_KEY2:JB P1.1,SU_KEY3 ;如果不是第2个键按下,转MOV DPH,#0FCHMOV DPL,#0ACHSJMP PLAYSU_KEY3:JB P1.2,SU_KEY4 ;如果不是第3个键按下,转MOV DPH,#0FDHMOV DPL,#09HSJMP PLAYSU_KEY4:JB P1.3,SU_KEY5 ;如果不是第4个键按下,转MOV DPH,#0FDHMOV DPL,#34HSJMP PLAYSU_KEY5:JB P1.4,SU_KEY6 ;如果不是第5个键按下,转MOV DPH,#0FDHMOV DPL,#82HSJMP PLAYSU_KEY6:JB P1.5,SU_KEY7 ;如果不是第6个键按下,转MOV DPH,#0FDHMOV DPL,#0C8HSJMP PLAYSU_KEY7:JB P1.6,SU_KEY8 ;如果不是第7个键按下,转MOV DPH,#0FEHMOV DPL,#06HSJMP PLAYSU_KEY8:JB P1.7,KEY1 ;如果不是第8个键按下,转MOV DPH,#0FEHMOV DPL,#22HSJMP PLAYPLAY:MOV T0TH,DPH ;存高位字符MOV T0TL,DPL ;存低位字符MOV TH0,T0THMOV TL0,T0TLSETB TR0 ;启动定时器0MOV R2,#01B ;1/4拍DJNZ R2,PLAYLCALL DELAYSJMP JUDGEJUDGE:JB P2.4,START ;按键未按下,则继续扫描,否则,开始放音乐;*************************选择按键播放音乐******************KEY1:JB P2.5,KEY2 ;第一个键(P2.5)按下,放音音乐1MOV R2,#00HLCALL MODD ;歌曲号显示MOV DPTR,#MU_TAB1AJMP MUSICKEY2:JB P2.6,KEY3 ;第二个键(P2.6)按下,放音乐2MOV R2,#01HLCALL MODD ;歌曲号显示MOV DPTR,#MU_TAB2AJMP MUSICKEY3:JB P2.7, NEXT_2 ;第三个键(P2.7)按下,放音乐3MOV R2,#02HLCALL MODD ;歌曲号显示MOV DPTR,#MU_TAB3AJMP MUSICNEXT_2: LJMP START ;返回MUSIC:MOV TMOD,#01HMOV IE,#82H ;允许T0中断MOV R7,#00HLOOP:CLR AMOVC A,@A+DPTR ;查表取代码MOV R1,A ;定时器高八位存R1INC DPTRPUSH DPH ;保护现场PUSH DPLGECI1:JB P2.5,GECI2 ;第一个键(P2.5)按下,显示歌词1MOV DPTR,#GE1AJMP GECIGECI2:JB P2.6,GECI3 ;第二个键(P2.6)按下,显示歌词2MOV DPTR,#GE2AJMP GECIGECI3:JB P2.7, TIAOCHU ;第三个键(P2.7)按下,显示歌词3MOV DPTR,#GE3AJMP GECITIAOCHU:LJMP STARTGECI:LCALL QINGCHUMOV P0,#0C0H ;显示的位置CALL ENABLEXIANSHI1: MOV A,R7 ;查表取音乐汉语拼音显示MOVC A,@A+DPTRCALL WRITE2INC R7CJNE A,#00H,XIANSHI1MOV P0,#00010000B ;将光标左移一位CALL ENABLEMOV P0,#00010000B ;将光标左移一位CALL ENABLEPOP DPLPOP DPHCLR AMOVC A,@A+DPTRMOV R0,A ;定时器低八位存R0ORL A,R1JZ NEXT0 ;相或结果全0为休止符MOV A,R0ANL A,R1CJNE A,#0FFH,NEXT ;相与结果为0FFH表示乐曲结束MOV P0,#01H ;清屏CALL ENABLELJMP INITION ;从头开始演奏NEXT: MOV T0TH,R1 ;装定时初值MOV TH0,T0THMOV T0TL,R0MOV TL0,T0TLSETB TR0 ;启动定时器SJMP NEXT1NEXT0: CLR TR0 ;关闭定时器NEXT1: CLR AINC DPTRMOVC A,@A+DPTR ;查延时常数MOV R2,ALOOP1:ACALL D200DJNZ R2,LOOP1 ;控制延时次数INC DPTRAJMP LOOPD200: MOV R3,#81H ;延时程序D200B: MOV A,#0FFHD200A: DEC AJNZ D200ADEC R3CJNE R3,#00H,D200BRETQINGCHU:MOV A,#00100000BMOV P0,#0C0H ;将第二行的第一位置0LCALL ENABLELCALL WRITE2MOV A,#00100000B ;将第二行的第二位置0MOV P0,#0C1HLCALL ENABLELCALL WRITE2MOV A,#00100000B ;将第二行的第三位置0MOV P0,#0C2HLCALL ENABLELCALL WRITE2MOV A,#00100000B ;将第二行的第四位置0MOV P0,#0C3HLCALL ENABLELCALL WRITE2MOV A,#00100000B ;将第二行的第五位置0MOV P0,#0C4HLCALL ENABLELCALL WRITE2MOV A,#00100000B ;将第二行的第六位置0MOV P0,#0C5HLCALL ENABLELCALL WRITE2MOV A,#00100000B ;将第二行的第七位置0MOV P0,#0C6HLCALL ENABLELCALL WRITE2 ;将第二行的第三位置0;以上等价程序如下;GECI:MOV R3,#00H ;控制循环次数;QINGCHU:;MOV A,#00100000B ;置空格;PUSH A;MOV R4,#0C0H ;地址;MOV A,R4;MOV P0,A;POP A;INC R4;DEC R3 ;控制循环次数;CJNE R3,#00H,QINGCHU ;计满十次则执行转移;***************************************************;定时器0中断子程序,定时音乐;***************************************************T0INT: ;中断服务子程序MOV TH0,T0THMOV TL0,T0TLCPL P3.7 ;反相输出,演示音乐RETI;******************************************;显示;******************************************MODD:MOV P0,#8EHLCALL ENABLEMOV A,R2MOV DPTR,#TABLE2MOVC A,@A+DPTRLCALL WRITE2RETTABLE2:DB 31H,32H,33HGE1: db 'xin',00h,'nian',00h,'hao',00h,'ya',00h,'xin',00h,'nian',00h,'hao',00h,'ya',00h db 'zhu',00h,'fu',00h,'da',00h,'jia',00h,'xin',00h,'nian',00h,'hao',00hGE2: DB'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'liang',00H,'zhi',00H,'lao',00H,'hu',00H,'pao',00H,'de',00H,' kuai',00HDB'pao',00H,'de',00H,'kuai',00H,'yi',00H,'zhi',00H,'mei',00H,'you',00H,'yan',00H,'jing',00H,'yi',00H,'z hi',00HDB'mei',00H,'you',00H,'er',00h,'duo',00h,'zhen',00h,'qi',00h,'guai',00h,'zhen',00h,'qi',00h,'guai',00h GE3: DB 'wo',00h,'ai',00h,'bei',00h,'jing',00h,'tian',00h,'an',00h,'men',00h,'tian',00h,'an',00h;*************************延时子程序******************DELAY:MOV 30H,#100 ;延长时间等待,键盘消抖D1:MOV R5,#200D2:DJNZ R5,D2DJNZ 30H,D1RET;*******************新年好******************************MU_TAB1: DB 0FEH,25H,04H,0FEH,25H,04HDB 0FEH,25H,06H,0FDH,80H,06HDB 0FEH,84H,04H,0FEH,84H,04HDB 0FEH,84H,06H,0FEH,25H,06HDB 0FEH,25H,04H,0FEH,84H,04HDB 0FEH,0C0H,04H,0FEH,84H,04HDB 0FEH,98H,04H,0FEH,84H,04HDB 0FEH,57H,06HDB 0FFH,0FFH;*******************两只老虎****************************MU_TAB2: DB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06HDB 0FCH,44H,06H,0FCH,0ACH,06H,0FDH,09H,06H,0FCH,44H,06HDB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06HDB 0FDH,09H,06H,0FDH,34H,06H,0FDH,0A6H,06HDB 0FBH,04H,04H,0FDH,0C8H,04H,0FBH,04H,04H,0FDH,34H,04HDB 0FDH,09H,04H,0FCH,44H,04H,0FBH,04H,04H,0FDH,0C8H,04HDB 0FBH,04H,04H,0FDH,34H,04H,0FDH,09H,04H,0FCH,44H,04HDB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06HDB 0FCH,44H,06H,0FDH,0A6H,06H,0FCH,44H,06HDB 0FFH,0FFH;*******************我爱北京天安门****************************MU_TAB3: DB 0FDH,82H,06H,0FEH,22H,04H,0FDH,82H,04H,0FDH,34H,04HDB 0FDH,09H,04H,0FCH,0ACH,04H,0FCH,44H,06HDB 0FFH,0FFH,0FFH,0FFHEND。

相关文档
最新文档