版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
51单片机课程设计实验报告姓名:xxx学号:xxx院系:电子与电气工程学院班级:电子102任课老师:xxx2012-12-29一、设计题目:多功能电子琴二、设计目的:熟悉单片机使用方法及领域,软硬件结合掌握单片机综合应用糸统设计和调试的方法,三、设计要求:多功能电子琴应包含以下几个功能:1.电子琴模式。有八个按键,对应8个乐谱中的基本音阶,通过不同音阶的组合(即按键的顺序)可以奏出完整的乐曲。2.音乐播放模式。8个按键可以分别对应着8首歌,每按下一个键即播放对应的预存的歌曲(本次设计中只是选择性的预存了两首歌曲)。3.跑马灯功能。在电子琴模式下,每按下一个键都有对应的LED灯亮起;在音乐播放模式下,每首歌都有对应的跑马灯跑马方式,在歌曲播放完或切换另一首歌时(即按下另一个按键)LED灯就会以预设的方式亮起。四、开发环境及简介:系统概述KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。2.KeilC51单片机软件开发系统的整体结构单片机软件开发系统的整体结构单片机软件开发系统的整体结构单片机软件开发系统的整体结构C51工具包的整体结构,如图4.1所示,其中uVision与Ishell分别是C51forWindows和forDos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及A51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM五、主要器件简介(1)STC89C52单片机单片机芯片如图2、3所示:图2:52单片机芯片引脚图图3:52单片机实物图简介:AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROM—FlashProgrammableandErasableReadOnlyMemory)的低电压、高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪存可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除1000次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。②主要特性:与MCS-51兼容;4K字节可编程闪烁存储器;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24MHz;三级程序存储器锁定;128×8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。(2)MAX232芯片MAX232引脚图如图4图4:MAX232引脚图简介:MAX232芯片是美信公司专门为电脑的RS-232标准串口设计的接口电路,使用+5v单电源供电。内部结构基本可分三个部分:第一部分是电荷泵电路。由1、2、3、4、5、6脚和4只电容构成。功能是产生+12v和-12v两个电源,提供给RS-232串口电平的需要。第二部分是数据转换通道。由7、8、9、10、11、12、13、14脚构成两个数据通道。其中13脚(R1IN)、12脚(R1OUT)、11脚(T1IN)、14脚(T1OUT)为第一数据通道8脚(R2IN)、9脚(R2OUT)、10脚(T2IN)、7脚(T2OUT)为第二数据通道。TTL/CMOS数据从T1IN、T2IN输入转换成RS-232数据从T1OUT、T2OUT送到电脑DB9插头;DB9插头的RS-232数据从R1IN、R2IN输入转换成TTL/CMOS数据后从R1OUT、R2OUT输出。第三部分是供电。15脚GND、16脚VCC(+5v)。六、设计原理:音乐播放原理:声音是通过振动产生的。单片机对某一引脚以一定的频率循环置1置0,该引脚便产生一定频率的方波,方波通过放大,作用于一定的物理实件(扬声器),就产生了一定频率的声音。若改变输出方波的频率,产生的声音随之改变。通过控制输出方波的时间长短,声音的长短也可以得到控制,因此,根据乐谱,以类似的音及同样的节拍,单片机就可以产生电子音乐。音乐播放器的基本硬件电路有六部分组成:单片机、时钟与复位电路、选择按键输入电路、音频发生器、音频放大器和扬声器。关于音乐的原理知识在音乐中使用的各个固定频率的音叫音级[1]。常用符号C、D、E、F、G、A、B、c、d、e、……a1、b1、c2、d2……表示,它们对应于钢琴上的白键。两音之间音高的距离叫音程。在上述音级中,E与F、B与C之间音高的距离仅为其它相邻音级之间距离的一半,称它们之间的音程为半音音程,而称其它相邻各音之间的距离为全音音程。在这些全音音程之间又加入新的半音音级,用符号﹟C、﹟D、﹟F、﹟G、﹟A、﹟c、﹟d、﹟f、……表示,对应于钢琴上的黑键。音持续时间的长短即时值,一般用拍数表示。休止符表示暂停发音。表2.1各音符及对应频率音符低DO低#DO低RE低#RE低MI低EA简谱码DO_LDO#_LRE_LRE#_LMI_LFA_L频率262HZ277HZ294HZ311HZ330HZ349HZ音符低#FA低SO低#SO低LA低#LA低SI简谱码FA#_LSO_LSO#_LLA_LLA#_LSI_L频率370HZ393HZ415HZ440HZ466HZ494HZ音符中DO中#DO中RE中#RE中MI中EA简谱码DODO#RERE#MIFA频率523HZ554HZ587HZ622HZ659HZ698HZ音符中#FA中SO中#SO中LA中#LA中SI简谱码FA#SOSO#LALA#SI频率740HZ785HZ831HZ880HZ932HZ988HZ音符高DO高#DO高RE高#RE高MI高EA简谱码DO_HDO#_HRE_HRE#_HMI_HFA_H频率1047HZ1109HZ1174HZ1245HZ1318HZ1397HZ音符高#FA高SO高#SO高LA高#LA高SI简谱码FA#_HSO_HSO#_HLA_HLA#_HSI_H频率1480HZ1568HZ1661HZ1760HZ1865HZ1976HZ硬件模块:振荡与时钟电路时钟电路用于产生单片机工作所需的时钟信号,单片机必须在时钟的驱动下才能进行工作。根据硬件电路的不同,单片机可以有邮件管理员时钟方式,即内部时钟方式和外部时钟方式。本电路采用的是外部时钟方式。在由多片单片机组成的系统中,为了单片机之间的时钟信号的同步,应当引入唯一的公用脉冲信号作为各单片机的振荡脉冲。这时,外部的脉冲信号是经过XTAL2引脚注入的。如上图所示:单片机的复位及复位电路①复位状态计算机在启动运行时都需要复位,复位使中央处理器CPU和系统中的其他器件都处于一种初始状态,并从这个初始状态工作。MCS-51系列单片机有一个复位引脚RST。在MCS-51系列单片机的RST引脚上输入一个高电平信号,该高电平信号至少要维持两个机器周期以上的时间,单片机被复位。②复位电路与其他计算机一样,MCS-51单片机系统的复位方法有上电自动复位、手动复位以及“看门狗”复位等。此最小系统采用手动复位电路。在系统运行过程中,有时可能对系统需要进行复位,为避免对硬件经常加电和断电造成的损害,我们可以采用手动复位。这种方法是将一个开关串联一只电阻后,再并联于电容C的两端,在系统运行过程中需要复位时只要使开关闭合,在RST引脚上就会出现一定时间的高电平信号,从而使单片机实现复位。复位电路如下图所示:max232串口:单片机用PC烧程序需要max232做串口通信,用一个九孔插头连接计算机,最小系统如图:扬声器模块。原理图如下图所示:流水灯模块的原理图,如下但相应的引脚输出为低电平时,对应的灯点亮;当输出为高电平时,对应的灯熄灭。按键模块。(此处原理图略。)软件设计://用定时器T0的方式0控制播放《好人一生平安》#include<reg51.h>#defineuintunsignedint //包含51单片机寄存器定义的头文件sbits6=P2^6;sbits5=P2^5; sbitP00=P1^0;//管脚定义sbitP01=P1^1;sbitP02=P1^2;sbitP03=P1^3;sbitP04=P0^7;sbitP05=P0^6;sbitP06=P0^5;sbitP07=P0^4;sbitP08=P0^3;sbitP09=P0^2;unsignedcharf[]={250,255,260,265,311,275,280}; unsignedinttemp1,temp2,m; unsignedchark; unsignedcharcount=1;sbitc=P2^7;sbitsound=P3^7; //将sound位定义为P1.5unsignedintC;unsignedintLED[10]={0};unsignedchari,j;//C调低音的音频宏定义#definel_dao262#definel_re286#definel_mi311#definel_fa349#definel_sao392#definel_la440#definel_xi494//C调中音的音频宏定义#definedao523#definere587#definemi659#definefa698#definesao784#definela880#definexi987//C调高音的音频宏定义#defineh_dao1046#defineh_re1174#defineh_mi1318#defineh_fa1396#defineh_sao1567#defineh_la1760#defineh_xi1957unsignedintcodef1[]={re,mi,re,dao,l_la,dao,l_la,//每行对应一小节音调 l_sao,l_mi,l_sao,l_la,dao, l_la,dao,sao,la,mi,sao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,dao,l_la,l_la,l_re,l_mi, l_sao,re,mi,re,dao,l_la,dao,l_la, l_sao,l_mi,l_sao,l_la,dao, l_la,dao,sao,la,mi,sao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,dao,l_la,l_la,l_re,l_mi, l_sao, re,re,sao,la,sao, fa,sao, la,sao,mi,re,mi,re,dao,l_la,dao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,dao,re,l_la,dao,re,mi, re,re,re,sao,la,sao, fa,sao, la,sao,mi,re,mi,re,dao,l_la,dao, re, mi,re,mi,sao,mi, l_sao,l_mi,l_sao,l_la,dao, l_la,dao,re,l_la,dao,re,mi, re, 0xff};//以0xff作为音调结束标志 unsignedintcodef2[]={mi,mi,re,mi,mi,sao,mi,re,mi,dao,dao,re,mi,sao,mi,re,re,dao,re,mi,sao,mi,la,sao,la,sao,sao,mi,sao,l_sao,mi,re,re,sao,mi,re,re,dao,re,mi,mi,re,mi,mi,sao,mi,re,mi,dao,dao,re,mi,sao,mi,re,re,dao,re,mi,sao,mi,la,sao,la,sao,sao,mi,sao,mi,re,mi,sao,mi,re,re,dao,dao,re,mi,mi,sao,la,la,h_mi,h_re,h_dao,h_dao,la,sao,la,sao,mi,re,dao,l_la,dao,re,re,dao,re,dao,re,mi,mi,sao,la,la,h_mi,h_re,h_dao,h_dao,h_re,h_dao,sao,sao,mi,xi,h_dao,dao,re,mi,re,dao,0xff}; //以下是简谱中每个音调的节拍 //“4”对应4个延时单位,“2”对应两个。“1”对应一个 unsignedcharcodeJP1[]={6,1,1,4,1,1,2, 2,2,2,2,8, 4,2,3,1,2,2, 16, 4,2,2,4,4, 2,2,2,2,8, 6,2,2,2,2,2, 16,6,1,1,4,1,1,2, 2,2,2,2,8, 4,2,3,1,2,2, 16, 4,2,2,4,4, 2,2,2,2,8, 6,2,2,2,2,2, 16, 4,4,4,2,2, 8,8,4,2, 2,2,1,1,2,1,1, 16, 4,2,2,4,4, 2,2,2,2,8, 6,2,2,2,1,1,2,16,4,4,4,2,2, 8,8,4,2, 2,2,1,1,2,1,1, 16, 4,2,2,4,4, 2,2,2,2,8, 6,2,2,2,1,1,2, 16}; //存储定时器的定时常数unsignedcharcodeJP2[]={4,2,2,4,2,2,2,2,6,4,2,2,2,2,4,4,2,2,6,6,1,1,2,4,2,2,2,2,6,2,4,2,2,4,2,2,4,2,2,6,4,2,2,6,2,2,2,2,6,4,2,2,2,2,4,4,2,2,6,6,1,1,2,4,2,2,2,2,6,2,2,2,4,2,2,2,6,2,2,4,2,2,4,2,2,2,2,2,2,6,2,2,2,2,4,2,2,4,2,2,4,2,2,4,2,2,4,2,2,2,2,2,2,6,4,2,2,2,2,2,2,6,6,6};voiddelay1(uintk){uintdatai,j;for(i=0;i<k;i++)for(j=0;j<100;j++) ;}/**********************函数功能:一个延时单位,延时200ms**********************/ voiddelay() { unsignedchari,j; for(i=0;i<200;i++) for(j=0;j<220;j++) ; } /**********************************T1初始化,定时0.2ms**********************************/voidT0_init(void){TMOD=0x10;TH1=(65536-200)/256;TL1=(65536-200)%256;ET1=1;TR1=1;EA=1;}/**********************************T1中断服务程序,PWM输出**********************************/voidtime1(void)interrupt3//扫尾灯子程序{TH1=(65536-200)/256;TL1=(65536-200)%256;count++;if(count>10)count=0;elsecount++;if(count<LED[0])//PWM输出,0为点亮,1为熄灭 P00=0;else P00=1;if(count<LED[1]) P01=0;else P01=1;if(count<LED[2]) P02=0;else P02=1;if(count<LED[3]) P03=0;else P03=1;if(count<LED[4]) P04=0;else P04=1;if(count<LED[5]) P05=0;else P05=1;if(count<LED[6]) P06=0;else P06=1; if(count<LED[7]) P07=0;else P07=1; if(count<LED[8]) P08=0;else P08=1; if(count<LED[9]) P09=0;else P09=1;}/************************ ***********************/voidsing1()//按下键P2^6时执行的子程序{ m=0; while(f1[m]!=0xff&&(c==1)&&(s5!=0))//未读到结束标志继续 { C=460830/f1[m]; //11.0592M晶振(1/2fi)/(12/fs) TH0=temp1=(8192-C)/32;//高八位赋值 TL0=temp2=(8192-C)%32;//低八位赋值 TR0=1; //启动定时器 for(j=0;j<JP1[m];j++)//控制节拍数 delay(); //延时一个节拍单位 TR0=0; //关闭定时器 m++; //播放下一个音调 } T0_init();//扫尾灯开始启动扫描 LED[0]=10; delay1(70); LED[1]=10; LED[0]=6; delay1(70); LED[2]=10; LED[1]=6; LED[0]=2; for(i=0;i<7;i++) { LED[i]=0; LED[i+1]=2; LED[i+2]=6; LED[i+3]=10; // LED[i+4]=10; delay1(70); } LED[7]=0; LED[8]=2; LED[9]=6; delay1(70); LED[8]=0; LED[9]=2; delay1(70); LED[9]=0; delay1(250); /***与前面过程相反进行扫描**/LED[9]=10; delay1(70); LED[8] =10; LED[9]=6; delay1(70); LED[7]=10; LED[8] =6; LED[9]=2; delay1(70); for(i=9;i>2;i--) {LED[i]=0; LED[i-1]=2; LED[i-2]=4; LED[i-3]=6; LED[i-4]=10; delay1(70); } LED[2]=0; LED[1]=2; LED[0]=6; delay1(70); LED[1]=0; LED[0]=2; delay1(70); LED[0]=0; delay1(250); TR1=0; }voidsing2()//按下键P2^5切换到曲目2,开始第二种led点亮{ i=0x01;for(j=0;j<=3;j++){ P1=~i; delay1(250+20*j); i=2*i; } P1=0xff; j=0x80; for(i=0;i<=5;i++) { P0=~j; delay(300-40*i); j=j/2; } P0=0xff; i=0; //从第一个音调f【0】开始播放 while(f2[i]!=0xff&&(c==1)&&(s6!=0))//未读到结束标志继续 { C=460830/f2[i]; //11.0592M晶振(1/2fi)/(12/fs) TH0=temp1=(8192-C)/32;//高八位赋值 TL0=temp2=(8192-C)%32;//低八位赋值 TR0=1; //启动定时器 for(j=0;j<JP2[i];j++)//控制节拍数 delay(); //延时一个节拍单位 TR0=0; //关闭定时器 i++; //播放下一个音调 } i=0x01;for(j=0;j<=3;j++){ P1=~i; delay1(250+20*j); i=2*i; } P1=0xff; j=0x80; for(i=0;i<=5;i++) { P0=~j; delay1(300-40*i); j=j/2; } P0=0xff;} voidrythme() { while(1){ if(P2!=0x7f) { for(i=50;i>0;i--) for(j=200;j>0;j--);// P2=0xff;// temp=P2;// if(temp!=0x7f)// { switch(P2) { case0x7e:k=0;P00=0;break; case0x7d:k=1;P01=0;break; case0x7b:k=2;P02=0;break; case0x77:k=3;P03=0;break; case0x6f:k=4;P04=0;break; case0x5f:k=5;P05=0;break; case0x3f:k=6;P06=0;break; } C=460830/f[k]; temp1=(8192-C)/32; temp2=(8192-C)%32;// bee=0; TH0=temp1; TL0=temp2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蛋糕店合作协议的范本
- 管材供货合同范文
- 工程项目可行性研究报告的作用及编制存在问题分析
- 工程项目管理自考教材对应习题
- 工程项目管理试题及答案-题库-自考用
- 阶段复习提升(五)
- 3.1+水循环+课件高一上学期+地理+人教版(2019)地理必修一
- 云南省昆明市师范大学附属中学2023-2024学年高一下学期月考(五)数学试题2
- 工程水文学总复习题1
- 基于信息化处方医嘱前置审核的药品全流程闭环理
- 学校(幼儿园)每周食品安全排查治理报告(整学期16篇)
- 4.霜降气寒砺性格
- 河北省张家口市桥西区2023-2024学年九年级上学期期中数学试题
- (苏州专版)江苏省苏州市2023-2024学年五年级数学上册期中综合素养测评调研试卷(苏教版)
- 弱电工程施工质量管理体系与保证措施
- 内科学:肺炎完整版
- 养老机构安全隐患排查清单、自查表、治理整改台账
- 印花厂生产车间现场管理制度
- 外研版九年级英语上册全册课件【完整版】
- 新时代高职英语(基础模块)Unit2
- 水土保持监理工作报告
评论
0/150
提交评论