利用蜂鸣器和单片机演奏简单的音乐

利用蜂鸣器和单片机演奏简单的音乐
利用蜂鸣器和单片机演奏简单的音乐

利用蜂鸣器和单片机演奏简单的音乐实验原理图

实验程序

/* =========================================================== */ /* ----------------------------------------------------------- */

/* 曲谱存贮格式uchar code 数组名{音高,音长,音高,音长....} */

/* 音高由三位数字组成:*/

/* 个位是表示1~7 这七个音符. */

/* 十位是表示音符所在的音区,1-低音,2-中音,3-高音;*/

/* 百位表示这个音符是否要升半音0(不写)-不升,1-升半音。*/

/* 音长最多由三位数字组成:*/

/* 个位表示音符的时值,其对应关系是:*/

/* 数值(n) 0 1 2 3 4 5 6 */

/* --------------------------------------------- */

/* 几分音符1 2 4 8 16 32 64 */

/* 即:音符=2^n ,这样做的目的是为了节省曲谱的存贮空间。*/

/* 十位表示音符的演奏效果(0-2),0-普通,1-连音,2-顿音。*/

/* 百位是符点位,0(不写)-无符点,1-有符点。*/

/* ----------------------------------------------------------- */

/* 调用演奏子程序的方法为:*/

/* play(乐曲数组名,调号,升降八度,演奏速度,开始指针,结束指针) */

/* 调号(0-11)是指乐曲升多少个半音演奏;升降八度(1-3)是指在演奏*/

/* 在哪个八度演奏: 1-降八度,2-不升不降,3-升八度.开始指针(0- ) */

/* 是从哪个音符开始演奏,结束指针是演奏到哪个音符为止. */

/* ----------------------------------------------------------- */

//本程序用T0 来产生音调,用T1 产生音长

#include

#define uchar unsigned char

#define yx 4/5 /* 定义普通音符演奏的长度分率*/

#define plen 2 /* 定义晶振的时钟周期(us) */

#define uchar unsigned char

#define uint unsigned int

sbit speaker=P3^5;

/* ------------------下面是曲谱------------------------------ */

uchar code sound[100]=

{25,2,23,3,25,3,31,1,26,2,31,3,26,3,25,1,25,2,21,3,22,3,23,2,22,3,21,3,22,0,

25,2,23,3,25,3,31,102,27,3,26,2,31,2,25,1,25,2,22,3,23,3,24,102,17,3, 21,0};

uchar tc0,tc1,sc0,sc1; /* 音长和音符两个计数器初值暂存*/

void play(sound,dh,sj,speed,point1,point2)

uchar code sound[]; /* 接受乐曲数组的地址*/

uchar speed,sj,dh; /* 速度、八度、调号*/

uint point1,point2; /* 乐曲开始、结束指针*/

{

uint code fftab[12]={262,277,294,311,330,349,369,392,415,440,466,494}; /* 频率表*/ uchar code stab[7]={0,2,4,5,7,9,11}; /* 1~7 在频率表中的位置*/

uchar code ltab[7]={1,2,4,8,16,32,64};

uchar tl,ts,sl,sm,sh,slen,xg,ii,fd;

uint point,hz,tc,sc,len,len0,len1,len2,len4,i,ftab[12];

speaker=1;

for(i=0;i<12;i++) /* 根据调号及升降八度来计算音符频率*/

{

ii=i+dh;

if(ii>11)

{

ii=ii-12;

ftab[i]=fftab[ii]*2;

}

else

ftab[i]=fftab[ii];

if(sj==1) ftab[i]>>=2;

if(sj==3) ftab[i]<<=2;

}

point=point1;

ts=sound[point];

tl=sound[point+1]; /* 读出第一个音符和它时时值*/

tc=65535-10000/plen; /* 算出10ms 的初装值*/

tc0=tc%256; /* 计算TL1 应装入的初值*/

tc1=tc/256; /* 计算TH1 应装入的初值*/

len0=12000/speed; /* 算出1 分音符的长度(几个10ms) */

len4=len0/4; /* 算出4 分音符的长度*/

len4=len4-len4*yx; /* 普通音最长间隔标准*/

TMOD=0x11;

TH1=tc1; TL1=tc0;

ET0=1; EA=1;

TR0=0; TR1=1;

while(point<=point2)

{

sl=ts%10; /* 计算出音符*/

sh=ts/100; /* 计算出是否升半*/

sm=ts/10%10; /* 计算出高低音*/

hz=ftab[stab[sl-1]+sh]; /* 查出对应音符的频率*/

if(sl!=0)

{

if (sm==1) hz>>=2; /* 若是低音*/

if (sm==3) hz<<=2; /* 若是高音*/

sc=(50000/hz)*10/plen; /* 计算脉冲个数*/

sc=65536-sc; /* 计算计数器初值*/

sc0=sc%256; /* 算出TL0 应装初值*/

sc1=sc/256; /* 算出TH0 应装初值*/

TH0=sc1; /* 装入初值*/

TL0=sc0+12; /* 加12 是对中断延时的补偿*/

}

slen=ltab[tl%10]; /* 算出是几分音符*/

xg=tl/10%10; /* 算出音符类型(0 普通1 连音2 顿音) */ fd=tl/100;

len=len0/slen; /* 算出连音音符演奏的长度(多少个10ms)*/ if (fd==1) len=len+len/2;

if(xg!=1)

if(xg==0) /* 算出普通音符的演奏长度*/

if (slen<=4)

len1=len-len4;

else

len1=len*yx;

else

len1=len/2; /* 算出顿音的演奏长度*/

else

len1=len;

if(sl==0) len1=0;

len2=len-len1; /* 算出不发音的长度*/

if (sl!=0)

{

TR0=1;

for(i=len1;i>0;i--) /* 发规定长度的音*/

{

while(TF1==0);

TH1=tc1; TL1=tc0;

TF1=0;

}

}

if(len2!=0)

{

TR0=0; speaker=1;

for(i=len2;i>0;i--) /* 音符间的间隔*/

{

while(TF1==0);

TH1=tc1; TL1=tc0;

TF1=0;

}

}

point+=2; /* 音符指针下移*/

ts=sound[point]; tl=sound[point+1]; /* 读出下一个音符和它时时值*/ }

}

void yin() interrupt 1 /* 音符发生程序(中断服务程序)*/

{

speaker=~speaker;

TH0=sc1; TL0=sc0;

}

//==============================================

main()

{

while(1)

{

play(sound,0,2,60,0,57);

play(sound,0,1,60,0,57);

play(sound,0,3,60,0,57);

play(sound,0,2,40,0,57);

play(sound,5,2,60,0,57);

play(sound,0,2,80,0,57);

}

}

蜂鸣器唱两只老虎单片机程序

#include<> //包含52单片机寄存器定义的头文件 sbit sound=P3^7; //将sound位定义为 unsigned int C; //储存定时器的定时常数 //以下是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"的频率523Hz /******************************************* 函数功能:1个延时单位,延时200ms ******************************************/ void delay() { unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ; } /******************************************* 函数功能:主函数 ******************************************/ void main(void) { unsigned char i,j; //以下是《两只老虎》歌曲 unsigned int code f[]={dao,re,mi,dao, //每行对应一小节音符 dao,re,mi,dao, mi,fa,sao, mi,fa,sao, sao,la,sao,fa,mi,dao, sao,la,sao,fa,mi,dao, dao,sao,dao, dao,sao,dao, 0xff}; //以0xff作为音符的结束标志 //以下是简谱中每个音符的节拍 //"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位unsigned char code JP[ ]={2,2,2,2, 2,2,2,2, 2,2,3, 2,2,3,

单片机控制LED及蜂鸣器课程设计报告

单片机设计报告 课程单片机课程设计 设计题目 LED灯及蜂鸣器 设计题目: 一、要求 1.了解LED显示流水灯的原理。 2.能够在LED上显示和控制蜂鸣器的工作。 3.熟悉掌握keil软件的使用。 二、分析 本设计使用AT89C52RC做为主控制模块,利用简单的外围电路来驱动LED蝴蝶。设计分为三个模块:单片机控制模块,输出显示模块和驱动模块,单片机控制模块以单片机为核心,以软件KEIL编程实现信号输出,以驱动LED及蜂鸣器为目的。 三、设计 1、硬件方面 (1)、LED驱动模块 图文显示有静态和动态两种方案,本设计中静动态都用到了。动态扫描的意思简单的说就是轮流点亮。具体就图案来说,把内部同行的发光管的阳极相连在一起,先送出对应行的发光管亮灭的数据并锁存,然后选通其它行使其燃亮相同的时间,然后熄灭。反复循环。 蜂鸣器的控制则是加入三极管接在VCC,单片机的第20引脚和负极上,以此来控制蜂鸣器的工作。 (2)、硬件设计 实验板上设计一个蝴蝶状的LED显示,可用于简单的图形图像。蝴蝶的图案是由74个LED绿灯、8个红灯、10个黄灯拼接而成。 其中绿灯直接接到正负极上,黄灯和红灯接到单片机的P2口,来控制其闪动。 2、软件编程(包括流程图、完整的汇编源程序及其注释) 1.电路图 本软件要求实现如下要求:外圈绿灯亮度明亮,红灯和黄灯都不停地闪动,蜂鸣器自动播放歌曲。 电路图如下:

2.主程序 本设计的系统软件能使系统LED各点亮度均匀,充足,可显示清晰图案,并且闪动。 系统主程序开始后,首先是对系统环境初始化,包括设置串口,中断和端口;然后闪动红黄灯,由于单片机没有停机指令,所以可以设置系统程序不断循环。 3.序代码如下: #include #include #include #include #define uchar unsigned char #define uint unsigned int #define DY_PORT P2 //设置LED连接的I/O组 #define DY_SPEED 100 //设置每一个明亮级的停留时间(值域: 0~65535) struct music_type { uchar tone; uchar delay; }; void delay (unsigned int a){ // 1ms延时程序 unsigned int i; while( --a != 0){

课程设计简易单片机音乐播放器

课程设计 题目:基于单片机音乐演奏曲Title: instrumental music based on single chip 姓名: 学号: 系别: 专业: 年级: 指导教师: 2012年5 月25 日

摘要 单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本设计以At89c2051为核心,主要由电源电路、复位电路、音频放大电路、时钟电路和数码管电路和蜂鸣器电路构成单片机奏乐附加时钟的一个小系统。电路中I/O口采用分时复用的借口技术,使AT89c2051单片机的引脚资源得以充分利用,本系统的电路简单,实现的功能强大,所用芯片比较便宜,性价比较高。 关键词:At89c2051,数码管,单片机奏乐,分时复用

目录 摘要 ........................................................... - 1 - 1.引言 (3) 2.系统整体结构 (4) 2.1系统总设计 (4) 2.2实现的功能 (4) 2.3主要芯片介绍 (4) 2.3.1 AT89c2051芯片介绍 (4) 3.系统硬件设计 (5) 3.1键盘输入模块 (5) 3.2时钟模块 (5) 3.3显示模块 (6) 3.4复位电路 (6) 3.5蜂鸣器电路设计 (7) 4.系统软件设计 (7) 4.1系统主程序流程图系 (7) 4.2 部分子程序流程图 (8) 结束语 (10) 参考文献 (10) 致谢 (11) 附录 (11)

1.引言 随着社会的发展、科技的进步以及人们生活水平的逐步提高,各种方便于生活的自动控制系统开始进入了人们的生活,以单片机为核心的各种系统也越来越多。同时也标志了自动控制领域成为了数字化时代的一员。它实用性强,功能齐全,技术先进,使人们相信这是科技进步的成果。它更让人类懂得,数字时代的发展将改变人类的生活,将加快科学技术的发展。 本次设计为单片机奏乐器,硬件部分它以单片机AT89C2051为核心,由功放电路、数码管等组成。当接上电源按下开关时,就能听到优美的旋律。当然这些音乐都是通过软件编程实现的,把它存储在存储器里,根据存储容量大小决定存储音乐的数目。 [2]

简单音乐发生器

潍坊学院 单片机原理与应用课程 设计说明书 题目: 系部:信息与控制工程学院 专业: 班级: 学生姓名: 学号: 指导教师:王文成 2009年12月15日

目录 1 设计任务与要求 (1) 2设计方案 (1) 2.1 音乐相关知识 (1) 2.2如何用单片机产生音频脉冲 (2) 2.3如何用单片机实现音乐的节拍 (3) 2.4音频功放 (4) 3 硬件设计 (4) 3.1结构框图 (4) 3.2主要器件 (5) 3.3 电路原理图及说明 (6) 4 软件设计 (6) 5 小结 (15) 主要参考文献 (16)

单片机实现简单音乐发生器 1 设计任务与要求 本例将实现一种由单片机控制的简单音乐发生器,它具有16个音的键盘,我们可以根据乐谱在键盘上进行演奏,通过扬声器将音乐播放出来。 本次课程设计的任务是,设计一种由单片机控制的简单音乐发生器,要求键盘有16个键,能过用51单片机C语言编写程序来实现音乐发生器的发音。 要求:1.设计思路切明确; 2.对各个芯片的功能要有所了解; 3.对设计中的各个电路图能够要有所说明;。 4.对设计的、中的源程序要有所注释。 5.在按音乐发生器的16个键的同时能够听到不同的音乐。 2设计方案 进行本例的设计之前,首先需要了解音乐的一些相关知识。 2.1 音乐相关知识 在人类还没有产生语言时,就已经知道利用声音的高低、强弱来表达自己的思想和感情。声带、琴眩等物体震动时会发出声波,声波通过空气传播进入人耳,人们就听到了声音。声音有噪音和乐音之分,振动由规律的声音是乐音,如人声带发出的歌声、由琴眩发出的琴音等。音乐中所有的声音主要是乐音。 乐音听起来有的高,有的低,这就叫音高。音高是由发音物体震动频率的高低决定的,频率高声音就高,频率低声音就低。比如,女人唱歌时声带频率振动高,男人唱歌时声带振动频率低,所以男生比女生低。 音乐中所有音乐的范围从每秒中振动16次的最低到每秒中振动4186次的最高音,大约97个。现在最大的钢琴可以奏出其中的88音,是音乐范围最大的乐器,人唱歌时因受生理限制,所能唱出的乐音仅是乐音范围的一小部分。 不同音高的乐音是用C,D,E,F,G,A,G来表示的,这7个字母就是乐音的音名,

单片机蜂鸣器播放音乐

#include #define uchar unsigned char #define uint unsigned int sbit speaker = P1^7; uint j; uchar m=1; uchar flag; uchar line; uchar code * data song; // 休止符低6 低7 中1 中2 中3 中4 中5 中 6 中7 高 1 低 3 低 5 低 4 高3 uchar code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xF D,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85}; uchar code song1[97]={0x34,0x32,0x32,0x34,0x42,0x51, //<<干杯,朋友>> 0x62,0x52,0x42,0x32,0x34,0x04, 0x74,0x74,0x62,0x62,0x64, 0x3c,0x04, 0x64,0x62,0x52,0x42,0x32,0x34, 0x33,0x31,0x32,0x72,0x76,0x72, 0x83,0x81,0x82,0x82,0x82,0x74,0x72, 0x7c,0x04, 0x63,0x61,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x44,0x42,0x42,0x52,0x62,0x52, 0x5c,0x04, 0x64,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x46,0x53,0x41,0x42,0x32, 0x3c,0x04, 0x44,0x48,0x02,0x32, 0x3f, 0x44,0x48,0x02,0x32, 0x3f, 0x34,0x0c, 0xFF}; uchar code song2[46]={0x12,0x52,0x52,0x52,0x56,0x42, //<<兰花草>>

基于单片机音乐演奏系统设计毕业设计

摘要 如今,单片机控制音乐播放的例子不胜枚举,音乐演奏系统也广泛的应用,而利用单片机存储音乐,控制播放,弹奏乐曲更为广泛。它有功能多﹑价格优﹑外围电路简单的特点,不仅很受音乐爱好者及音乐芯片制造商的热衷,而且是一般家庭都能承受得了的经济投入范围之内。利用单片机发声键盘操作直观简单。对于初学者来说,是很容易弹奏的。本设计为基于单片机的音乐演奏系统,设计出一种不仅要使单片机可以播放音乐关键在于还有能够弹奏自己想弹奏的音乐。 本文设计出一种基于STC89C52的简单音乐演奏系统,利用单片机技术、LM386音频功放芯片、4x4键盘、SPEAKER、以及74HC595和LED数码管实现原理图设计到电路板设计开发,并用C51高级语言进行键盘识别程序设计和音频脉冲输出程序的设计。最终能够实现乐曲演奏和自动播放音乐,并且可以通过LED数码管显示音符和音调的高低。 关键词:STC89C52;音频脉冲;键盘识别;播放音乐

Abstract At present, the examples of microcontroller control music playback is too numerous to enumerate, at the same time,the music performance system is also widely used, make the best use of microcontroller which can store music, control playback, playing music.The advantage of the music performance system contains multiple functions,excellent price,simple peripheral circuit.The features of the music performance system not only popular with music lovers and music chip manufacturers, but also accepted by general family for it price.The keyboard operation is simple under the use of microcontroller.It is easy for beginner to play. The design of music performance system based on microcontroller, it can not only play music but also play the music which we want to. This paper designs a simple music system which is based on STC89C52 which make full use of microcontroller technology, the LM386 audio amplifier chip, 4x4 keyboard, SPEAKER, 74HC595 and LED digital tube.It realizes from schematic design to circuit board design and development, and use C language accomplish keyboard identify program design and audio pulse output program design. Finally the design realizes the music play and auto play music,it can display the high or low of notes and tone through the LED digital tube . Key words: STC89C52; audio pulse; keyboard; play the music

单片机音频发生器程序设计

实验三单片机音频发生器程序设计 实验目的 1、进一步掌握单片机定时器的用法。 2、了解用单片机的IO口输出方波的方法。 3、理解用单片机产生简单音频的方法。 实验仪器 单片机开发板、万利仿真机、稳压电源、计算机 实验原理 1、单片机IO口产生音频脉冲的原理 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单片机某个口线的“高”电平或“低”电平,则在该口线上就能产生一定频率的方波,接上喇叭就能发出一定频率的声音,若通过程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。喇叭驱动电路如图4-13所示。 图4-13 喇叭驱动电路 例如,要产生中音1。从下表可知,中音1的频率为523Hz,周期T=1/523=1912μs,其半周期为1912/2=956μs,因此只要在SPEAKER接口上产生半周期为956μs的方波,即可听到持续的1音。C调部分音符频率与计数初值的对应表如下: 表4-1 C调部分音符频率、计数初值与设置简谱码的对应关系 注:上表定时器工作于模式1 2、音乐节拍的生成 要唱出一首歌,只产生出音频脉冲还不够,还要考虑发出音频时间的长短(即节拍)。

如果一拍为0.4秒,则1/4拍是0.1秒,只要设定延迟时间就可获得节拍的时间。我们也可以设1/8拍为1个延迟单位时间,则1拍应该是8个延迟单位时间,以此类推,所以,只要求得1/8拍的DELAY时间,其余的节拍就是它的倍数。详见下表 表4-2 节拍与节拍码对照表 3、简谱发生器程序设计 由前面的分析可知,音符频率有14种,节拍有10种,我们定义每个音节占用一个字节,字节的低4位代表音符的频率,高4位表示该音符的节拍。定义一个音符频率表、一个音符节拍表。程序首先读取一个音节,并从音符频率表和节拍表中读取音符频率所对应的定时器初始和节拍对应的延时参数。利用单片机内部定时器0、1分别产生频率和节拍。定时器0的初始值由音符的频率决定,定时器1的初始值是50ms对应的值。每当一个音符输出完成就取出下一个音符,直到取出的是0FFH。代表所有音符全部输出完成。程序停止或重新开始。程序流程图如图4-14所示。 图4-14 实验内容 1、在单片机P1.2口产生下列频率方波 1KHz,2KHz,5KHz,10KHz,学号后两位*100 2、在P1.2口产生简谱对应频率方波(简谱频率如上文) 3、在P1.2口播放简谱音乐。

51单片机蜂鸣器播放音乐代码

/*生日快乐歌曲*/ #include <> #define uint unsigned int #define uchar unsigned char sbit beep = P1^5; uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159, 212,212,106,126,159,169,190,119,119,126,159,142,159,0}; uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24, 9,3,12,12,12,12,12,9,3,12,12,12,24,0}; //延时 void DelayMS(uint x) { uchar t; while(x--) for(t=0;t<120;t++); } void PlayMusic() { uint i=0,j,k; while(SONG_LONG[i]!=0||SONG_TONE[i]!=0) { //播放各个音符,SONG_LONG 为拍子长度 for(j=0;j // 这是单片机音乐代码生成器生成的代码 #define uchar unsigned char sbit beepIO=P1^5; // 输出为可以修改成其它 IO 口uchar m,n;

单片机按键控制蜂鸣器发声程序

#include typedef unsigned char uint8; typedef unsigned int uint16; uint8 Count,i; sbit Speak =P1A2; //蜂鸣器器控制脚 sbit keyl =卩3人2;〃按键控制引脚 sbit key2 =P3A3; sbit key3 =P3A4; /* 以下数组是音符编码 */ uint8 code SONG[] ={ 0xff,0x39,0x30,0x33,0x30,0xff,0x30,0x30,0x00,}; void Time0_Init()// 定时器 T0 方式 1 ,定时 10ms { TMOD = 0x01; IE = 0x82; TH0 = 0xDC; TL0 = 0x00; void Time0_Int() interrupt 1 { TH0 = 0xDC; TL0 = 0x00; Count++; } void delay (uint8 k)// 按键防抖延时 { uint8 j; while((k--)!=0) { for(j=0;j<125;j++) {;} } } void Delay_xMs(uint8 x)// 发声延时 { uint8 i,j; for(i=0; i

Count = 0; // 中断计数器清 0 Addr = i *3; while(1) { Temp1 = SONG[Addr++]; if (Temp1 == 0xFF) //休止符 { TR0 = 0; Delay_xMs(100); } else if (Temp1 == 0x00) //歌曲结束符 { return; } else { Temp2 = SONG[Addr++]; TR0 = 1; while(1) { Speak = ~Speak; Delay_xMs(Temp1); if(Temp2 == Count) { Count = 0; break; } } } } }void keyscan (void)// 按键切换声音函数{ if(key1==0) { delay(10); if(key1==0) {

基于51单片机的音乐播放器设计

题目:音乐播放器 课程设计(论文)任务书

摘要 随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。 单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。随着硬件的发展,8051单片机系列的软件工具也有了C级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。 本次课程设计主要内容是通过单片机C51语言进行编程,以产生乐曲音符和节拍,把乐谱翻译成计算机语言(音符转换诚成相对应的方波频率即定时器装载初值,节拍转换成相对应的延长时间),并将其预先存储到单片机里,然后根据按键调用再由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声,实现音乐播放的功能。其主要表现在可以播放十首歌曲,可以用十个数字键控制播放的歌曲,并且能在LCD液晶屏显

基于单片机的简单电子琴毕业设计

基于单片机的简单电 子琴毕业设计 目录 1引言 (1) 2 总体设计 (2) 2.1 设计目的与要求 (2) 2.2 电子琴系统的组成 (2) 2.3 系统设计框图 (3) 3 详细设计 (4) 3.1 硬件设计 (4) 3.2 硬件简介 (5) 3.2.1 AT89C51简介 (5) 3.2.2 LED数码管 (10) 3.3整体程序处理流程图设计 (11) 3.4矩阵式键盘的识别和显示与设计 (12) 3.4.1矩阵式键盘的结构与工作原理 (12) 3.4.2矩阵式键盘的按键识别方法 (13) 3.4.3键盘接口必须具有的4个基本功能 (15) 3.5音乐播放设计 (16) 3.5.1音乐发声原理 (16) 3.5.2音乐播放流程图 (18) 3.5.3放歌子程序流程图 (18) 4实现联调 (20) 4.1 Proteus 简介 (20) 4.2 keil 简介 (20) 4.3利用keil与Proteus进行的调试 (21) 5 总结与展望 (23)

参考文献 (25) Abstract: (26) 致谢 (27) 附录A:程序设计 (28) 附录B 印制电路板(PCB)设计 (34)

基于单片机的简单电子琴设计 摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。本文主要对使用单片机设计简易电子琴进行了分析与设计,并介绍了基于单片机电子琴的系统硬件组成。该文设计是一种基于AT89C51的简单音乐发生器,利用单片机技术、键盘和一组发光二极、SPEARK等实现原理图设计,并用C51语言进行键盘识别程序设计和音频脉冲输出程序的设计。经过软件和硬件的联调,并仿真出来。该音乐发生器不仅能通过键盘弹奏出来简单的乐曲,而且不弹奏时按播放键可以播放置音乐,音调和节拍都由单片机控制实现。本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。 关键词:单片机;键盘;扬声器;电子琴

单片机 利用蜂鸣器演奏音乐

实验三-利用蜂鸣器演奏音乐 一、实验目的 1.了解BlueSkyC51单片机实验板中蜂鸣器的硬件电路 2.学会利用蜂鸣器实现音乐的演奏 3.掌握蜂鸣器实现音乐演奏的编程 二、实验硬件设计及电路 1. BlueSkyC51单片机实验板 ` 2.单片机最小系统

。 3.蜂鸣器电路连接 三极管主要是做驱动用的。因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以

我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。 三、实验原理 1.音调及节拍 用一个口,输出方波,这个方波输入进蜂鸣器就会产生声音,通过控制方波的频率、时间,就能产生简单的音乐。一般说来,单片机演奏音乐基本都是单音频率,因此单片机奏乐只需控制音调和节拍。 (1)音调的确定 音调是由频率来确定的。通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O 口来回取反,从而让蜂鸣器发出不同频率的声音。只需将定时器给以不同的定时值就可实现。通过延时,即可发出所需要的频率。 … (2)节拍的确定 一拍的时长大约为400—500ms,每个音符的时长通过节拍来计算。详细见程序代码。 2.软件设计相关 (1)头文件 #include<> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long sbit beep=P1^4; 译实验相关问题 ; (1)实际发音颤音重 解决方法为修改蜂鸣器的驱动频率. (2)实际节奏过快或者过慢 调整延时 四、C51程序代码(部分来源于网络) #include<> #define uint unsigned int #define uchar unsigned char #define ulong unsigned long ~ sbit beep=P1^4; //蜂鸣器与口连接 uchar th0_f; //中断装载T0高8位 uchar tl0_f; //T0低8位 uchar code freq[36*2]={ //音阶码表 0xf7,0xd8, //440hz , 1 //0 0xf8,0x50, //466hz , 1# //1

单片机课程设计报告利用蜂鸣器播放音乐

课程设计:嵌入式系统应用 题目名称:利用蜂鸣器实现音乐播放功能 姓名: 学号: 班级: 完成时间:

1设计的任务 设计内容:动手焊接一个51单片机 设计目标:利用单片机上的蜂鸣器实现音乐播放功能 2 设计的过程 2.1 基本结构 1.STC89C52RC 在本次的试验中采用了STC89C52RC单片机,STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期,工作电压:5.5V~3.3V(5V单片机)/3.8V~ 2.0V(3V单片机),工作频率范围:0~40MHz,相当于普通8051的0~80MHz, 实际工作频率可达48MHz,用户应用程序空间为8K字节。 (STC89C52RC引脚图) STC89C52RC单片机的工作模式: (1)典型功耗<0.1μA,可由外部中断唤醒,中断返回后,继续执行原程序(2)空闲模式:典型功耗2mA (3)正常工作模式:典型功耗4Ma~7mA (4)唤醒,适用于水表、气表等电池供电系统及便携设备 2.蜂鸣器及其工作原理: 蜂鸣器按其结构分主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。 接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产 生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

本实验采用的是电磁式蜂鸣器。 蜂鸣器按其是否带有信号源又分为有源和无源两种类型。有源蜂鸣器只需要在其供电端加上额定直流电压,其内部的震荡器就可以产生固 定频率的信号,驱动蜂鸣器发出声音。无源蜂鸣器可以理解成与喇叭一 样,需要在其供电端上加上高低不断变化的电信号才可以驱动发出声音。 本实验采用的是有源蜂鸣器。 (蜂鸣器与单片机连接电路图) 2.2 软件设计过程 1.蜂鸣器发声原理 本实验由于采用有源蜂鸣器,只需将引脚端口P3^4清零,蜂鸣器即可发声;P3^4置位,蜂鸣器停止发声。采用置1置0的方法只 能使蜂鸣器发声或停止发声,想要使蜂鸣器发出声音,必须对蜂鸣 器发出声音的音频和节拍进行控制。 (音乐基础 音调: 不同音高的乐音是用C、D、E、F、G、A、B来表示,这7个字母就是音乐的音名,它们一般依次唱成DO、RE、MI、FA、SO、LA、SI,即唱

单片机控制蜂鸣器概要

单片机控制蜂鸣器20年月日

目录 绪论 (1) 1、硬件设计 (2) 1.1 总体设计图 (2) 1.2 简易结构框图 (2) 1.3各部分硬件设计及功能 (3) 1.3.1 蜂鸣器发声电路:(如图1.3.1) (3) 1.3.2 电源稳压电路: (4) 1.4 元件清单 (4) 2、软件设计 (5) 2.1设计思想 (5) 2.2 程序流程图 (5) 2.3 音调、节拍以及编码的确定方法 (6) 2.3.1音调的确定 (6) 2.3.2 节拍的确定 (8) 2.3.3 编码 (9) 3、电路仿真与分析 (10) 4、电路板焊接、调试 (11) 4.1 焊接 (11) 4.2 调试 (12) 5、讨论及进一步研究建议 (12) 6、心得 (12) 7、单片机音乐播放器程序实例(卡农) (13)

绪论 蜂鸣器播放音乐电路设计对于单片机初学者来说是一个简单易实现的课题。通过编写程序使单片机产生一定频率的方波信号,方波信号进入蜂鸣器便产生我们熟知的音调。 我们用定时/计数器使单片机产生方波,利用定时/计数器使输出管脚在一定周期内反复翻转,达到所需频率,而我们给定时/计数器的初始值就是我们的音符—半周期数据表,通过我们播放的音乐的乐谱,来对数据表进行调用。 我们用延时子程序来表示节拍,不同的节拍代表不同的延时。 完成此次设计之后完全可以进行扩展,例如增加按键以及LED灯光效果,制成一个简易的音乐盒,给人以视觉听觉等全方位的享受。

1、硬件设计1.1 总体设计图 1.2 简易结构框图

1.3各部分硬件设计及功能 1.3.1 蜂鸣器发声电路:(如图1.3.1) 图1.3.1 如图所示,蜂鸣器发声电路是播放音乐电路的主要执行电路,它由一个蜂鸣器,一个三极管和一个电位器组成。蜂鸣器负责发声,三极管将电流放大,而电位器则控制流过蜂鸣器电流的大小,来达到控制音量的目的。

基于单片机的简易MP3

1 项目概述和要求 1.1 项目开发背景 随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作,因此开发本系统希望能够给人们多带来一点生活上的乐趣。 基于当前市场上的玩具市场需求量大,其中电子琴就是一个很好的应用方面。单片机技术使我们可以利用软硬件实现电子琴的功能,从而实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。并且可以进行一定的功能扩展。鉴于传统电子琴可以用键盘上的“1”到“A”键演奏从低So到高DO等11个音,从而可以用来弹奏喜欢的乐曲。该设计将十一个琴键改成16个,使电子琴的功能更加完美。不但可以实现对乐曲的演奏,同时还具有存储音乐、播放歌曲以及显示按键的功能。使该设计功能更加完善。 1.2 项目目的 利用AT89C51单片机自带资源,设计一款能实现弹奏和带存储功能的电子琴。 (1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。 (2)熟悉8051单片机的内部结构和功能,合理使用其内部寄存器,能够完成相关软件编程设计工作。 (3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。 (4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。 1.3设计要求 ①设计出15个音符,随意弹奏,按“0”键为音乐休止符,不发声,用它时间的长短表示休止时间的长短。 ②用功能键转换成歌曲演奏,可播放预存的音乐。 ③可存储现场弹奏的音乐。 [扩充功能]:

④采用LCD显示信息,开机时有欢迎提示符,播放时显示歌曲序号(或名称)。 ⑤显示乐曲播放时间或剩余时间。

51单片机实现的音乐闹钟程序代码

功能描述:产品可以显示时间和日期,时间格式为 hh mm ss 日期格式为 yy.mm.dd 时间和日期轮流显示。时间显示5S 日期显示3S。 可以设置5个闹铃,闹铃音乐可以设置两种:毛驴和童年。 三个按键对时间和闹铃进行设置,六个LED进行显示。 计时采用DS1307。继电时间不丢失,设置过的闹铃也不丢失。 闹铃音乐由单片机的两个定时器去产生频率实现。 部分程序如下: //************************************************* //************************************************ //*********************************************** //程序名:DS1307 时钟程序 //功能描述:用六个八段LED 轮流显示时间 // 和日期。有6个闹钟。上电时从DS1307中读出 // 当前时间、日期、闹钟。 // // // // // #include #include #define uchar unsigned char #define uint unsigned int #define LED P2 #define LEDBit P0 #define nop _nop_(>

#define LightCount 40 #define LightMax 80 sbit SCL=P3^1。 sbit SDA=P3^0。 sbit ModeKey=P1^0。 sbit UpKey=P1^1。 sbit DownKey=P1^2。 sbit Speak=P3^6。 code uchar LCD_NUM[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09}。 //0x25, //uchar Clock[]={0x88,0x88,0x88}。 code uint Music_Sound_Long1[]={4,8,4,8,8,4,8,4,4,4, /*童年*/ 8,4,8,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 4,8,4,4,4,4,4,8,4,4, 4,8,4,4,4,4,4,4,16,4, 8,4,8,4,4,4,8,8,4,4, 4,4,4,4,4,4,4,4,4,16, 4,8,4,8,8,4,8,4,4,4, 8,4,8,4,4,4,4,4,16,4, 8,4,8,8,4,8,4,4,4,8, 4,8,4,4,4,4,4,16,0}, Music_Sound_Long2[]={4,4,4,4,4,4,4,4,4,4, /*小毛驴*/ 4,4,16,4,4,4,4,4,4 ,4, 4,4,4,4,4,8,4,4,4,4, 4,4,4,4,4,4,4,4,4,16, 4,4,4,4,2,2,2,2,4,4, 4,4,4,4,16,0}, Music_Sound_Tone1[]={379,379,379,379,425,477,477,477,425,477, 568,637,637,637,568,637, 425,379,477,719, 637,63 7,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,477,568,637,719, 637,637,719,637,568,568,506,568,568,568, 637,477,477,477,477,568,568,477,851,318,

用51单片机演奏音乐

单片机演奏音乐 一般说来,单片机演奏音乐基本都是单音频率,它不包含相应幅度的谐波频率,也就是说不能象电子琴那样能奏出多种音色的声音。因此单片机奏乐只需弄清楚两个概念即可,也就是“音调”和“节拍”。音调表示一个音符唱多高的频率,节拍表示一个音符唱多长的时间。 在音乐中所谓“音调”,其实就是我们常说的“音高”。在音乐中常把五线谱中央C 上方的A 音定为标准音高,其频率f=440Hz。当两个声音信号的频率相差一倍时,也即f2=2f1时,则称f2比f1 高一个倍频程, 在音乐中1与.1(1前面的点应在1的上面),2与 .2……正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个半音。以1—i 八音区为例,12 个半音是:1—#1、#1—2、2—#2、#2—3、3—4、4—#4,#4—5、5 一#5、#5—6、6—#6、#6—7、7—i。其中“#”表示半音,用于升高或降低半个音。这12 个音阶的分度基本上是以对数关系来划分的。如果我们只要知道了这十二个音符的音高,也就是其基本音调的频率,我们就可根据倍频程的关系得到其他音符基本音调的频率。 知道了一个音符的频率后,常采用的方法就是通过一个延时程序,延时对应频率周期的二分之一周期(即t=1/2f)后,将单片机上连接蜂鸣器的I/O (P3.7)口来回取反,或者说来回清零,置位,从而让蜂鸣器发出声音,为了让单片机发出不同频率的声音,我们只需将不同的延时时间值t赋给延时程序即可实现。例:我门以440Hz的声音频率来计算,其对应的时间 t=1/2f=1/2*440=1136us 但在实际程序中常采用查表的方式来取的t 值,而为了节约存储器空间则将t值以字节来进行存储,由于大部分t值都大于256。所以,需将t值除以一个常数(t/x)使其小于256。那么,在查表取得t 值后就要再乘上该常数后再赋给延时程序。 以下为常用音符对应的频率和二分之一周期值t :

单片机蜂鸣器播放音乐

#include #define uchar unsigned char #define uint unsigned int sbit sp eaker = P1^7; uint j; uchar m=1; uchar flag; uchar line; uchar code * data song; // 中4 高3 中5 休止 符 低6 中7 低7 高1 中1 低3 中2 低5 中3 低4 uchar code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xF D,0x82,0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,0XFB,0x04,0xFA,0x67,0xFE,0x85}; uchar code song1[97]={0x34,0x32,0x32,0x34,0x42,0x51, 0x62,0x52,0x42,0x32,0x34,0x04, //<< 干杯,朋友>> 0x74,0x74,0x62,0x62,0x64, 0x3c,0x04, 0x64,0x62,0x52,0x42,0x32,0x34, 0x33,0x31,0x32,0x72,0x76,0x72, 0x83,0x81,0x82,0x82,0x82,0x74,0x72, 0x7c,0x04, 0x63,0x61,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x44,0x42,0x42,0x52,0x62,0x52, 0x5c,0x04, 0x64,0x62,0x62,0x64,0x72,0x82, 0x72,0x74,0x72,0x62,0x52,0x42,0x32, 0x42,0x46,0x53,0x41,0x42,0x32, 0x3c,0x04, 0x44,0x48,0x02,0x32, 0x3f, 0x44,0x48,0x02,0x32, 0x3f, 0x34,0x0c, 0xFF}; uchar code song2[46]={0x12,0x52,0x52,0x52,0x56,0x42, //<< 兰花草>>

相关文档
最新文档