简易音乐盒设计_第1页
简易音乐盒设计_第2页
简易音乐盒设计_第3页
简易音乐盒设计_第4页
简易音乐盒设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机控制技术项目:简易音乐盒设计123项目任务系统硬件电路控制程序设计

目录单片机控制技术简易音乐盒设计4系统调试、系统仿真5拓展项目一、项目任务简易音乐盒设计控制要求:在音调与节拍的演奏控制训练基础上,设计能演奏出一首完整乐曲(《千年之恋》)的简易音乐盒。学习要点:1、强化C51中对数组的理解与使用技巧。2、训练开环控制系统的基本设计与调试能力。3、拓展键控音乐选择方面电路设计与编程方法学习。单片机控制技术简易音乐盒设计如图1所示,由P1.0口控制一个LM386功率放大器,经功率放大器控制发声器件蜂鸣器,以获得较大的音频输出功率。当P1.0口输出为低电平时,功率放大器导通,蜂鸣器得电;当P1.0口输出为高电平时,功率放大器截止,蜂鸣器断电。二、系统硬件电路

(一)硬件电路图图1单片机音乐盒硬件电路示意图LM386单片机控制技术简易音乐盒设计(二)单片机音乐盒电路器件清单表1电路器件清单二、系统硬件电路

元件名称参数数量元件名称参数数量单片机STC90C511开发板提供电源和程序ISP下载1晶体振荡器12MHz1面包板/万能板1瓷片电容30pF2功率放大器LM3861电解电容22µF/47µF1/1电位器10kΩ1按键非自锁

1蜂鸣器1电阻10kΩ1插接线两头带插针用于面包板插接若干单片机控制技术简易音乐盒设计(一)与简单音调与节拍演奏的差异简单音调与节拍演奏中,对每一个音符来说重要的就是根据音调与节拍编写相应的乐曲编码。(2)本项目要演奏一首完整的乐曲,就需要把整个乐曲的音符放入

编码数组,并扩展为了编出音符编码所需要的音调定时器的

初值数组。以歌曲《千年之恋》为例:从其乐谱可以看出,整个乐曲需要中音do~si和高音do~si,所以把乐曲转化为简谱编码过程中,简谱音调对应的定时器初值数组也需要根据表2扩充。三、控制程序设计单片机控制技术简易音乐盒设计低音频率脉冲T值中音频率脉冲T值高音频率脉冲T值Do2621908F88CDo523956FC44Do1046478FE22Do﹟2771805F8F3Do﹟554902FC7ADo﹟1109450FE3ERe2941700F95CRe587851FCADRe1175425FE57Re﹟3111607F9B9Re﹟622803FCDDRe﹟1245401FE6FMi3301515FA15Mi659758FD0AMi1318379FE85Fa3491432FA68Fa698716FD34Fa1397357FE9BFa﹟3701351FAB9Fa﹟740675FD5DFa﹟1480337FEAFSo3921275FB05So784637FD83So1568318FEC2So﹟4151204FB4CSo﹟831601FDA7So﹟1661301FED3La4401136FB90La880568FDC8La1760284FEE4La﹟4641077FBCBLa﹟932536FDE8La﹟1865268FEF4Si4941012FC0CSi988506FE06Si1976253FF03三、控制程序设计表2C调各音符频率与计数脉冲初值T的对照表单片机控制技术简易音乐盒设计数组分为一维、二维、三维和多维数组,常用一维、二维和字符数组。(1)一维数组的定义格式如下:类型说明符数组名[常量表达式];

例如“chara[5];”即定义字符数组a,有5个元素。(2)数组元素的一般形式为:

数组名[下标]

例如:tab[5]、num[i+j]、a[i++]都是合法的数组元素。(3)数组初始化赋值的一般形式为:

类型说明符数组名[常量表达式]={值,值……值};

例如:intnum[10]={0,1,2,3,4,5,6,7,8,9};三、控制程序设计单片机控制技术简易音乐盒设计(二)数组的使用//程序:ex7_2.c//功能:音乐盒程序#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitfm=P1^0;

//蜂鸣器输出的I/O口选用P1.0管脚uchartimeh,timel,i;

//timeh,timel为定时器高低4位,i为演奏音符个数//---------------------------《千年之恋》简谱---------------------------------------//1-7代表中音do~si,8-E代表高音do~siucharcodeqnzl[]={ 0x12,0x22,0x34,0x84,0x74,0x54,0x38,0x42,0x32,0x22,0x42,0x34,0x84,0x72,0x82,0x94,0xA8,0x08,

//前奏0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//竹林的灯火到过的沙漠三、控制程序设计(三)程序单片机控制技术简易音乐盒设计0x32,0x31,0x21,0x32,0x82,0x71,0x81,0x71,0x51,0x32,0x22,

//七色的国度不断飘逸风中0x32,0x31,0x21,0x32,0x52,0x32,0x31,0x21,0x32,0x62,

//有一种神秘灰色的旋涡0x32,0x31,0x21,0x32,0x83,0x82,0x71,0x72,0x02,//将我卷入了迷雾中0x63,0xA1,0xA2,0x62,0x92,0x82,0x52,

//看不清的双手

0x31,0x51,0x63,0x51,0x63,0x51,0x63,0x51,0x62,0x82,0x7C,0x02,

//一朵花传来谁经过的温柔

0x61,0x71,0x82,0x71,0x62,0xA2,0x71,0x76,

//穿越千年的伤痛

0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,

//只为求一个结果

0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//你留下的轮廓指引我

0x42,0x63,0x83,0x83,0x91,0x91,

//黑夜中不寂寞

0x61,0x71,0x82,0x71,0x62,0x0A2,0x71,0x76,//穿越千年的哀愁

0x61,0x71,0x82,0x71,0x62,0x52,0x31,0x36,//是你在尽头等我

0x61,0x71,0x82,0x71,0x62,0xA3,0x73,0x62,0x53,//最美丽的感动会值得

0x42,0x82,0x88,0x02,0x74,0x93,0x89,0xff};//用一生守候,最后结束标志三、控制程序设计单片机控制技术简易音乐盒设计//----------------------------简谱音调对应的定时器初值---------------------------ucharcodecuzhi[]={0xff,0xff,

//占位符0xFC,0x44,0xFC,0xAD,0xFD,0x0A,0xFD,0x34,0xFD,0x83,0xFD,0xC8,0xFE,0x06,

//中音do~si的T计数初值0xFE,0x22,0xFE,0x57,0xFE,0x85,0xFE,0x9B,0xFE,0xC2,0xFE,0xE4,0xFF,0x03};

//高音do~si的T计数初值voiddelay1ms(uintz);

//延时1ms子程序voiddelay165ms(uintz);

//延时165ms,即1/4拍子程序voidsong();

//演奏子程序main(){EA=1;//开总中断ET0=1; //开定时器0TMOD=0x01;//定时器0工作在方式1TH0=0;TL0=0;TR0=1;while(1){

song();delay1ms(1000);}}三、控制程序设计单片机控制技术简易音乐盒设计voidtimer0()interrupt1

//定时器0溢出中断子程序用于产生各种音调{ TH0=timeh; TL0=timel; fm=~fm;

//产生方波}voidsong(){ uinttemp; ucharjp;//jp是简谱1~8的变量 i=0; while(1) {temp=qnzl[i];if(temp==0xff)break;//到曲终则跳出循环

jp=temp/16;//取数的高4位作为音调

三、控制程序设计单片机控制技术简易音乐盒设计

if(jp!=0)}{ timeh=cuzhi[jp*2];//取T的高4位值

timel=cuzhi[jp*2+1];//取T的低4位值

}else {TR0=0; fm=1;

//关蜂鸣器

} delay165ms(temp%16);//取数的低4位作为节拍

TR0=0;

//唱完一个音停10ms

fm=1; delay1ms(10); TR0=1; i++;} TR0=0; fm=1;}三、控制程序设计单片机控制技术简易音乐盒设计voiddelay165ms(uintz)

//延时165ms函数,即1/4拍延时{uintx,y;for(x=z;x>0;x--)for(y=19000;y>0;y--);}voiddelay1ms(uintz)

//软件延时约1ms函数{uintx,y;for(x=z;x>0;x--)for(y=112;y>0;y--);}三、控制程序设计单片机控制技术简易音乐盒设计四、项目调试、系统仿真动手做:Proteus仿真从Proteus中选取如下元器件:(1)AT89C51,单片机;(2)RES、RX8,电阻、排阻;(3)CAP、CAP-ELEC,电容、电解电容;(4)POT-LOG,电位器;(5)LM386,功放;(6)SPEAKER,扬声器。放置元器件、电源和地,设置参数,连线,最后进行电气规则检查,将目标代码文件ex7_2.hex加载到51单片机中,电路仿真效果如图2所示。单片机控制技术简易音乐盒设计四、项目调试、系统仿真图2音乐盒演奏控制

Proteus仿真电路单片机控制技术简易音乐盒设计

在本项目基础上,扩展两首歌曲,通过对按键的控制切换不同歌曲的演奏,实现点唱功能,该如何修改电路图和程序?举一反三五、拓展项目单片机控制技术简易音乐盒设计如图3所示,在P2.0引脚加入一个按键Button,通过对按键的控制切换不同歌曲的演奏,实现点唱的功能。(一)硬件电路图图3单片机音乐盒点唱电路示意图LM386单片机控制技术简易音乐盒设计五、拓展项目//程序:ex07_02b.c//功能:点唱歌曲音乐盒

sbitbutton=P2^0;//按键输入的IO口

bitflag;//flag歌曲标志位,为0演奏千年之恋,为1演奏寂寞沙洲冷//---------------------------《千年之恋》简谱---------------------------------------ucharcodeqnzl[]={……略};

//同见程序:ex07_02.c

//---------------------------《寂寞沙洲冷》简谱---------------------------------------ucharcodejmszl[]={0x12,0x12,0x22,0x32,0x31,0x22,0x21,0x22,//自你走后心憔悴0x21,0x31,0x51,0x52,0x31,0x52,0x61,0x15,0x14

//白色油桐风中纷飞0x51,0x52,0x31,0x52,0x62,0x13,0x11,0x13,0x32,0x28,0x08,0x28,//落花似人有情这个季节0x31,0x32,0x31,0x32,0x11,0x21,0x51,0x52,0x51,0x52,

//河畔的风放肆拼命地吹0x51,0x51,0x31,0x32,0x31,0x32,0x81,0x72,0x63,//不断拨弄离人的眼泪0x62,0x71,0x81,0x72,0x61,0x61,0x52,0x31,0x21,0x32,0x51,0x54,//那样浓烈的爱再也无法给0x22,0x12,0x11,0x12,0x11,0x12,0x12,0x14,0x26,0x32,0x26,//伤感一夜一夜0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,//当记忆的线缠绕过往支离破碎五、拓展项目单片机控制技术简易音乐盒设计(二)程序(修改部分)0x02,0x32,0x81,0x81,0x81,0x81,0x62,0x52,0x34,//是慌乱占据了心扉

0x31,0x81,0x81,0x81,0x61,0x91,0x82,//有花儿伴着蝴蝶0x51,0x51,0x51,0x51,0x31,0x61,0x53,//孤雁可以双飞

0x21,0x11,0x21,0x11,0x22,0x11,0x21,0x26,//夜深人静独徘徊0x32,0x61,0x51,0x51,0x31,0x31,0x21,0x31,0x51,0x61,0x51,0x31,0x51,0x52,

//当幸福恋人寄来红色分享喜悦0x31,0x31,0x81,0x81,0x81,0x61,0x91,0x81,0x61,0x31,0x56,//闭上双眼难过头也不敢回0x32,0x32,0x81,0x81,0x81,0x81,0x91,0x81,0x61,0x81,0x61,0x51,0x31,0x51,0x34,//仍然捡尽寒枝不肯安歇微带着后悔0x21,0x31,0x51,0x31,0x21,0x11,0x61,0x21,0x16,//寂寞沙洲我该思念谁0xff};//结束符//----------------------------简谱音调对应的定时器初值---------------------------ucharcodecuzhi[]={0xff,0xff,……略};

//同见程序:ex07_02.c五、拓展项目单片机控制技术简易音乐盒设计main(){……略

//同见程序:ex07_02.cwhile(1){

if(button==0)flag=0;//一曲演奏完判段按键的状态

elseflag=1;//根据按键状态设置flag标志位 song(); delay1ms(1000);}}voidtimer0()interrupt1

//定时器0溢出中断子程序用于产生各种音调{……略}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论