单片机八音盒设计说明_第1页
单片机八音盒设计说明_第2页
单片机八音盒设计说明_第3页
单片机八音盒设计说明_第4页
单片机八音盒设计说明_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

.. .. ..黑龙江工业学院单片机综合实训报告院 系:电气与信息工程系专业班级:电气工程及自动化本 (三)姓 名:陈强学 号:04991303037指导教师:魏喜雯报告成绩:. 专业.专注 ... .. ..1、设计目的(1)加强对单片机和汇编语言的认识 ,充分掌握和理解设计各部分的工作原理、设计过程、芯片选择、模块化编程等多项知识。(2)用单片机模拟实现具体应用 ,使个人设计系统能够真正使用 。(3)把原理和实践相结合,充分发挥个人和团体的合作能力 ,并在实践中得到锻炼。(4)提高利用已学知识分析和解决问题的能力 。(5)利用AT89C51单片机结合内部定时器设计一个八音盒 ,按下单键可以演奏预先设置的歌曲旋律 。2、设计任务要求本设计利用AT89C51单片机结合内部定时器设计一个八音盒 ,按下单键可以演奏预先设置的歌曲旋律 。本设计可以学习 AT89C51定时器程设计,按键扫描及歌曲旋律简单直觉式输入法的设计方法 。其基本功能为:(1)使用数码显示管来显示目前演奏的歌曲编号 ;(2)具有8个按键操作来选择演奏哪一首歌曲 ;(3)内建8首歌曲旋律,按下单键可以演奏歌曲。3、设计方案选取与论证(1)选用Keil软件和Protues软件,选用AT89C51单片机,它有4kB内部. 专业.专注 ... .. ..ROM,2个定时/计数器,5个中断源。(2)通过中断实现歌曲的播放和暂停 。(3)通过定时实现LED闪烁和音乐频率的变化。(4)通过按键实现歌曲的选择 。3.1八音盒的发音原理一段音乐需要的是两个元素 ,一个是音调,另一个是音符。首先要了解 对应的音调,音调主要由声音的频率决定 ,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降 ;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升 。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解 。音符的发音主要靠不同的音频脉冲 。利用单片机的内部定时器 /计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲 。3.2音符频率的产生音符及定时器初始值 :例如:中音1(do)的音频=523HZ,周期T=1/523s=1912s。定时器/计数器0的定时时间为:T/2=1912/2s=956s。定时器956s的计数值=定时时间/机器周期=956s/1s=956(时钟频率=12MHZ)。装入T0计数器初值为65536-956=64580。将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出. 专业.专注 ... .. ..中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。将51单片机内部定时器工作在计数器模式 1下,改变计数初值TH0,TL0以产生不同的频率。下表2-1是C调各音符频率与计数初值T的对照表:表2-1 C调各音符频率与计数初值 T的对照表频率(Hz)/初值频率(Hz)/初值音符音符s)(s)(低中523/64580262/636271DO1DO高1042/65056低2RE294/638351DO中高2RE1245/65134589/646872RE低中3M661/64780330/640213M高低4FA350/641071318/651573M中高4FA1397/65178700/648224FA低中5SO786/64900393/642645SO. 专业.专注 ... .. ..高 低6LA441/644021568/652175SO中 高6LA1760/65252882/649696LA低 中7SI990/65031495/645267SI高1967/652827SI音符、音符编码及定时器初始值 :为了产生音符,必须求出音符低音 5—高音5的计数初值。例如C调的低1DO的THTL=65536-50000/262=63627 ,中音DO的THTL=65536-500000/523=64580, 高音DO的THTL=65536-500000/1042=65056 。为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值 。比如说音乐是C调的,那么出现低音的5SO,直接将代码写为 1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。表2-2音符编码表音符音符编码音符音符编码不发音0低5SO1低6LA2低7SI3. 专业.专注 ... .. ..中1DO4中2RE5中3M6中4FA7中5SO8中6LA9中7SIA高1DOB高2REC高3MD高4FAE高5SOF高6LAG节拍频率的产生 、节拍的产生与编码 :音乐中的节拍用延时时间产生 。例如,1拍=0.4s,1/4拍=0.1s,以此类推。假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间 ,如表2-3和表2-4所示。表2-3 节拍数编码表按1/4拍为一个延时时间的节拍 按1/8拍为一个延时时间的节拍编码与节拍对应的表 编码与节拍对应的表节拍 节 节 节 节拍 节 节拍 节编码 拍 拍编码 拍 编码 拍 编码 拍1 1/ 6 6 1 1 6 6/4 /4 /8 82 2/ 8 8 2 2 8 8/4 /4 /8 8. 专业.专注 ... .. ..33/A133A1040/4/8/844/C144C1242/4/8/855/F15545/4/8表2-4乐谱节拍编程时的时间延时表乐谱节拍1/4拍的延时乐谱节拍1/8拍的延时时间时间4/4125ms4/462ms3/4187ms3/494ms2/4250ms2/4125ms音符编码和节拍编码完成后 ,在编程时,每个音符占一个字节,高四位是音符编码,低四位是节拍编码。4、硬件电路设计4.1 总体设计框图键盘输入数码管AT89C51复位电路扬声器. 专业.专注 ... .. ..本设计中用到了AT89C51单片机,8个开关,扬声器,数码管等硬件电路常用元器件。4.2 晶振与复位电路晶振电路为系统提供基本的时钟频率信号 ,它结合单片机内部电路产生所需的时钟频率。复位电路由单片机 XTAL1、XTAL2引脚外接晶振(12MHz)及起振电容C1、C2(均为30pf)组成。当复位按钮按下时,内存和相关的寄存器,计数器,计时器所具有状态表示的器件全部被复位 ,回到初始状态。(如下图所示)4.3 按键输入电路按键输入电路由8个开关组成,P1口作为输入控制按键。. 专业.专注 ... .. ..4.4 输出显示电路用P0.0~P0.7作为数码管的D0~D7的控制信号。由于P0口作为输出,应加上拉电阻。用P2.0口控制发光二极管以及扬声器。、仿真过程及仿真结果. 专业.专注 ... .. ... 专业.专注 ... .. ..6、心得体会课程设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在。对于我们这些工科学生来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。这次课程设计通过自己的努力,同学的帮助,还有老师的辛勤指导下,最终顺利完成。. 专业.专注 ... .. ..7、程序#include<reg52.h>TL0=tl0_f;TH0=th0_f;#defineucharunsignedcharSPEAK=~SPEAK;//取反音乐输出#defineuintunsignedintIO#defineulongunsignedlong}sbitSPEAK=P2^0;//接蜂鸣器管脚ucharcodefreq[36*2]={ucharth0_f;0xA9,0xEF,//00220HZ,1//0uchartl0_f;ucharcode0x93,0xF0,//00233HZ,1#SEG[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};0x73,0xF1,//00247HZ,2ucharcodejie8[8]={12,14,16,17,19,21,23,24};0x49,0xF2,//00262HZ,2#/************************中断函数*******************************************/0x07,0xF3,//00277HZ,3timer0()interrupt1{0xC8,0xF3,//00294HZ,4. 专业.专注 ... .. ..0x73,0xF4,//00311HZ,4# 0xE4,0xF9,//00587HZ4//170x1E,0xF5,//00330HZ,5 0x3D,0xFA,//00622HZ4#//180xB6,0xF5,//00349HZ,5# 0x90,0xFA,//00659HZ5//190x4C,0xF6,//00370HZ,6 0xDE,0xFA,//00698HZ5#//200xD7,0xF6,//00392HZ,6# 0x29,0xFB,//00740HZ6//210x5A,0xF7,//00415HZ,7 0x6F,0xFB,//00784HZ6#//220xD8,0xF7,//00440HZ1//12 0xB1,0xFB,//00831HZ7//230x4D,0xF8,//00466HZ1#//13 0xEF,0xFB,//00880HZ`10xBD,0xF8,//00494HZ2//14 0x2A,0xFC,//00932HZ`1#0x24,0xF9,//00523HZ2#//15 0x62,0xFC,//00988HZ`20x87,0xF9,//00554HZ3//16 0x95,0xFC,//01046HZ`2#. 专业.专注 ... .. ..ucharbanyin;// 有没有半个升音0xC7,0xFC,//01109HZ`3 阶ucharyinchang;// 音长0xF6,0xFC,//01175HZ`4 ucharcodejie7[8]={0,12,14,16,17,19,21,23};//C 调的70x22,0xFD,//01244HZ`4# 个值*diao=*song;0x4B,0xFD,//01318HZ`5 for(i=0,i1=0;;){0x73,0xFD,//01397HZ`5# gaodi=0;// 高低=0banyin=0;// 半音=00x98,0xFD,//01480HZ`6 yinchang=4;// 音长1拍if((*(song+i)=='|')||0xBB,0xFD,//01568HZ`6# (*(song+i)==''))i++;// 拍子间隔和一个空格过滤0xDC,0xFD,//01661HZ`7//35 switch(*(song+i))}; {changedata(uchar*song,uchar case',':*diao,uchar*jie) gaodi=-12;i++;// 低音{ break;uchari,i1,j; case'`':gaodi=12;i++;chargaodi;// 高低+/-12 音阶 //高音. 专业.专注 ... .. ..break; yinchang+=4;} i++;if(*(song+i)==0)// 遇到0结 gotoyinc;束 case'_'://有一个音{ 节缩短*(diao+i1)=0;// 加入结 yinchang/=2;束标志0 i++;*(jie+i1)=0; gotoyinc;return; case'.'://有一个加} 半拍j=*(song+i)-0x30;i++;// 取出基准音 yinchang=yinchang+yinchang/2;j=jie7[ j]+gaodi;// 加上高低 i++;音 gotoyinc;yinc:switch(*(song+i)) }{ *(diao+i1)=j;// 记录音符case'#':// 有半音j *(jie+i1)=yinchang;// 记录音加一个音阶 长i++;j++; i1++;gotoyinc; }case'-':// 有一个音 }节加长 voidplay(uchar*songdata). 专业.专注 ... .. ..{ 0xff)//((!K1)||(!K2)||(!K3)||(!K4))// 发现按键,uchari,c,j=0; 立即退出播放uintn; {uchar diaodata[48];// 音调缓冲 TR0=0;ucharjiedata[48];// 音长缓冲 return;changedata(songdata,diaodata,ji }edata);// 解释音乐符号串 }TR0=1; TR0=0;while(P1=0xff) for(n=0;n<460;n++);// 音符{ 间延时for(i=0;diaodata[i]!=0;i++)// 逐 TR0=1;个符号演奏 }{ }tl0_f=freq[diaodata[i]*2];// TR0=0;取出对应的定时值送给 T0 }th0_f=freq[diaodata[i]*2+1]; //茉莉花for(c=0;c<jiedata[i];c++)// ucharcode按照音长延时 molihua[]={"33_5_6_`1_`1_6_|55_6_5-|33_5{ _6_`1_`1_6_|55_6_5-|"for(n=0;n<29500;n++);//29500 "5553_5_|665-|32_3_53_2_|11_2_1|"if(P1!=. 专业.专注 ... .. ..//"3_2_1_3_2.3_|56_`1_5-|23_5_2_3_1_,6_|,5-,61|" "2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_5_2_3_|1---|"//"2.3_1_2-1_,6_|,5--" };}; //小星星//世上只有妈妈好 ucharcodexiaoxingxing[]={ucharcodemamahao[]={ "1155|665-|4433|221-|""6.5_35|`16_5_6-|35_6_53_2_|1_,6_5_3 "5544|332-|5544|332-|"_2-|" "1155|665-|4433|221-|""2.3_55_6_|321-|5.3_2_1_,6_1_|,5--" };}; //春天在哪里//小毛驴 ucharcodeucharcode chuntian[]={"3_3_3_1_|,5,5_|3_3_3_1_|3-|5_xiaomaolv[]={"1_1_1_3_|5_5_5_5_|6_6_6_`1 5_3_1_|,5_,5_,5|,6_,7_1_3_|2-|"|5-|""3_3_3_1_|,5,5_|3_3_3_1_|3-|5_6_5_6_|5_4_3"4_4_4_6_|3_3_3_3_|2_2_2_2_|5-"}; _1_|,5_3_|2_1_"};//我是一只菠萝 //两只老虎ucharcodeboluo[]={ ucharcodelaohu[]={"1231|1231|345-|345-|""1-|2_4_3_2_55|5_6_3_4_22|2_4_3_2_1_`1_7_6_|5_4_2_3_11|" "5_6_5_4_31|5_6_5_4_31|". 专业.专注 ... .. .."151-|151-"}; //一分钱//就是爱你 ucharcodeucharcode yifen[]={"5`1|6_`1_5|3_5_2_3_|5|3_5_6_`1_|5jiushiaini[]={"3_2_3_4_5,7_1_|1`1_7_7 _6_5_3_|5_13_2"};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_|"}; ****************************************///黑白配 voidmain(void)ucharcode {heibai[]={"32345-|1,7123-|3,5,611-|"}; P1=0xff;//找朋友 P0=SEG[0];ucharcode TMOD=0x01;// 使用定时器 0的zhaopeng[]={"5_6_5_6_|5_6_5|5_`1_7_6_|5 16位工

温馨提示

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

评论

0/150

提交评论