基于51单片机节拍器的设计与实现_第1页
基于51单片机节拍器的设计与实现_第2页
基于51单片机节拍器的设计与实现_第3页
基于51单片机节拍器的设计与实现_第4页
基于51单片机节拍器的设计与实现_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

PAGEPAGE2基于51单片机节拍器的设计与实现目录1课题的背景和意义 22硬件电路设计 23软件设计 43.1程序流程 43.2程序设计 64节拍器的实现 134.1电路搭建 134.2程序烧录 161课题的背景和意义节拍简单说就是打拍子,就像听音乐时不由自主地随之拍手或跺脚。节拍器是一种能在各种速度中发出稳定的节拍的电动或电子装置。在乐器学习中经常需要用节拍器来控制节奏。本课题任务是设计一个基于51系列单片机的节拍器,同时附带音乐播放功能;具体功能如下:使用四个按键控制,一个用来切换到慢速节拍的状态,一个用来切换到快速节拍的状态,一个用来切换打节拍时LED的闪烁方式,一个用来切换歌曲,其中音乐播放共有两首歌曲,一首是大约在冬季,一首是寂寞沙洲冷,播放歌曲时,蜂鸣器发出某个音调,与之对应的LED点亮。2硬件电路设计如图1所示,本系统由时钟电路、复位电路、单片机AT89C51、按键输入电路、蜂鸣器和LED显示电路组成。图1系统方框图如图2所示,通过P1口控制LED的闪烁。蜂鸣器的播放由P3.7口控制。按键输入电路由4个独立式按键组成。设定了三种速度的节拍。默认速度为中速,通过P22(快速)和P23(慢速)口所接按钮控制另外两种速度。当按下并锁住(不弹起)“按下慢速”键后,切换到慢速节拍模式;当按下并锁住(不弹起)“按下快速”键后,切换到快速节拍模式;按下“闪烁方式切换”键后改变LED的闪烁方式,按下“乐曲切换”键后可切换歌曲。共有两首歌曲。图2电路图表1元器件清单名称元器件名称型号/参数数量单片机AT89C51STC89C511陶瓷电容CAP30PF2电解电容CAP-ELEC22uF1晶振CRYSTAL12MHZ1发光二极管LED-YELLOW红色8电阻R11K1排阻RESPACK-81K1独立按键K1、K2、K3、K48蜂鸣器LS13软件设计3.1程序流程本系统程序主要由主程序、播放音乐子程序、延时165ms子程序、延时1ms子程序及蜂鸣器叫一声子程序构成。主程序流程如图3所示图3主程序流程播放音乐子程序流程如图4所示。图4播放音乐子程序流程3.2程序设计播放的两首歌曲,一首为“大约在冬季”,另一首为“寂寞沙洲冷”。通过改变蜂鸣器声音的延时时间来改变节拍器的速度。C语言源程序代码如下:#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitkey1=P3^2;//按key1可选择节拍器模式并切换led显示样式sbitkey2=P3^3;//按key2可选择音乐播放模式并可切换歌曲sbitfm=P3^7;//蜂鸣器连接的IO口sbitP34=P2^2;//节拍器慢速模式开关sbitP35=P2^3;//节拍器快速模式开关ucharcodehuayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//led样式1ucharcodehuayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7,0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//led样式2uinta;ucharcount1; ucharcount2; uchartimeh,timel,i;//简谱//编程规则:字节高位是简谱码,低位是节拍码,//1-7代表中央C调,8-E代表高八度,0代表停顿//最后的0xff是结束标志ucharcodedyzdj[]={//大约在冬季0x81,0x82,0x81,0x02,0x81,0x91,0xA1,0xC1,0xC2,0x02,//轻轻地我将离开你0xA1,0xC1,0xD2,0xA1,0xA1,0x92,0x91,0xA5,0x02,//请将眼角的泪拭去0xA1,0x91,0x82,0x61,0x61,0x02,0xA1,0x91,0x82,0x61,0x61,0x02,//漫漫长夜里,未来日子里0x61,0x81,0x92,0x81,0x81,0x81,0x91,0x81,0xC5,0x04,//亲爱的你别为我哭泣0x81,0x82,0x81,0x82,0x81,0x91,0xA1,0xC1,0xC2,0x02,//前方的路虽然太凄迷0xA1,0xC1,0xD1,0xA1,0xA1,0xA1,0xA1,0x91,0x91,0xA3,0x02,0x02,//请在笑容里为我祝福0xA1,0x91,0x82,0x61,0x61,0x02,0xA1,0x91,0x82,0x61,0x61,0x02,//虽然迎头风,虽然下着雨0x61,0x81,0x91,0x91,0x91,0x91,0x92,0x51,0x65,0x04,//我在风雨之中念着你0xD1,0xD2,0xD3,0xA2,0xC1,0xC2,0xC3,//没有你的日子里0xA1,0x91,0x82,0x82,0x81,0x92,0x81,0xA4,0x04,//我会更加珍惜自己0xD1,0xD2,0xD3,0xD1,0xE1,0xD1,0xC2,0xD1,0x02,//没有我的岁月里0xA1,0xC1,0xD2,0xA2,0x91,0x82,0xC5,0x04,0xff,//你要保重你自己};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};//简谱音调对应的定时器初值//适合12M的晶振ucharcodechuzhi[]={0xff,0xff,//占位0xFC,0x44,//中央C调1-70xFC,0xAC, 0xFD,0x08, 0xFD,0x35, 0xFD,0x82, 0xFD,0xC8, 0xFE,0x07,0xFE,0x22, //高八度1-7 0xFE,0x57,0xFE,0x85,0xFE,0x9A, 0xFE,0xC1,0xFE,0xE4,0xFF,0x03};ucharyinyue[]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x0,0x0};//将音调转化为对应的LED样式voidsong()//播放音乐子程序{uinttemp;ucharjp;//jp是简谱i=0;while(1){if(count2==0){ break;}if(count2==1) //选曲temp=dyzdj[i];if(count2==2)temp=jmszl[i];if(temp==0xff)break;jp=temp/16;//取数的高4位P1=yinyue[jp];if(jp!=0){timeh=chuzhi[jp*2];timel=chuzhi[jp*2+1];}else{TR0=0;fm=1;//关蜂鸣器}delay(temp%16);//取数的低4位TR0=0; //唱完一个音停10MSfm=1;delay1(10);TR0=1;i++;}TR0=0;fm=1;}voiddelay(uintz) //延时子程序,延时165ms,即十六分音符{ uintx,y;for(x=z;x>0;x--)for(y=19000;y>0;y--);}voiddelay1(uintz) //延时1ms的子程序{ uintx,y;for(x=z;x>0;x--)for(y=112;y>0;y--);}voidbeep() //蜂鸣器叫一声的子程序{ uchari;if(P34==0)a=10;elseif(P35==0)a=200;elsea=120;for(i=0;i<a;i++){ fm=~fm;delay1(1);}fm=1;}voidmain()//主程序{ ucharx;count1=1;//节拍器模式count2=0;//不唱歌EA=1;//开总中断EX0=1;//开外部中断0IT0=1;//外部中断0下降沿触发方式EX1=1;//开外部中断1IT1=1;//外部中断1下降沿触发方式TMOD=0x01;//定时器0工作在方式1TH0=0;TL0=0;ET0=1;while(1){if(count1!=0){switch(count1){case1:for(x=0;x<14;x++){P1=huayang1[x];beep();delay1(300);if(count1!=1)break; }break;case2:for(x=0;x<14;x++){P1=huayang2[x];beep();delay1(300);if(count1!=2)break; }break;}}else{song();delay1(1000);}}}voidint0()interrupt0//外中断0服务子程序{EA=0;//关总中断delay1(1);//去抖if(key1==0){count2=0;//不让蜂鸣器唱歌TR0=0;count1++;if(count1==3)count1=1;}EA=1;//开总中断}voidint1()interrupt2//外中断1服务子程

温馨提示

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

评论

0/150

提交评论