《基于单片机AT89S51的电子琴设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机AT89S51的电子琴设计报告.docx(11页珍藏版)》请在第一文库网上搜索。
1、基于89S51单片机电子琴设计报告学生姓名邓昌能钟坡杭志杰学院计算机与电子信息工程专业电信、计科指导教师陈勇职称教授湖南商学院北津学院2023年12月摘要本文介绍了基于AT89S51单片机的电子琴的设计与实现。电子琴的主要功能是利用以AT89S51单片机为系统控制处理器;关键字:AT89S51单片机7段数码管蜂鸣器目录摘要1绪论21设计21.1 设计目的21.2 设计方法和内容22设计方案22.1 系统总体设计方案32.2 系统的结构框架33硬件电路的设计43. 1单片机最小系统44. 2独立键盘控制电路设计错误!未定义书签。5. 37段数码管显示电路设计错误!未定义书签。6. 4蜂鸣器电路设
2、计错误!未定义书签。4软件系统的实现56.1 主程序设计57. 2程序思路5结论5附录:源程序代码6绪论1设计I .1设计目的II )了解单片机及其工作原理;12)了解如何用C语言编程;13)如何将单片机应用于生活中。1.2设计方法和内容11)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。2)熟悉8051单片机的内部结构和功能,合理使用其内部存放器,能够完成相关软件编程设计工作。3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的
3、锻炼和提高。2设计方案2.1 系统总体设计方案由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时7计数器to来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。2.2 系统的结构框架图系统结构框架3硬件电路的设计3.1 单片机最小系统本次设计中单片机晶振为12MHZ,那么定时器的计数周期为IMHZ,假设选择工作方式1,那T值便为T=216-5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片
4、机计数TO相关的计值。X-X1CRYSTA118RP1RESPACK-8P101/P112/P123/P134/P145/P156/R167/R178XTA11P0.0AP0.1/AD1P0.2/AD2XTA12P0.3/AD3P0.4/AMP0.5/AD5P0.6MRSTP0.7/AD7P2.0AP2.1Z6P2.2/A10PSENP2.3/A11A1EP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1JDP3.0/RXDP1.1P3.1/TXDP12P3,2iNTOP13P3.3iNT1P1.4P3.4ZTOP15P3.5/T1P1P3.6iVRP1.7P3.7/RD
5、AT89C513837363534333221222324252627281S1101112_J3SOUNDER图3-1单片机最小系统原理图-k.f.2713.2 独立键盘控制电路设计3. 3发光二极管显示电路设计3.4蜂鸣器电路设计4软件系统的实现4.1主程序设计本次设计中单片机晶振为12MHZ,那么定时器的计数周期为IMH乙假设选择工作方式1,那T值便为T=216-5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数TO相关的计数值。图4.1主程序流程图4.2程个矩予两管50*4赋有码跖这4键计数如了按共段数结论本设片机的通本功能,通步掌握了用。
6、同时,电路的设了51单片应用。通过序思路简易电子琴应用阵键盘,每一个了不同的音调,个八度。对应7现实1到F16个根据按键功能,装入音符T值到TO中计主要用到了单用IO口的读写根过实际操作进一51单片机的使通过单片机外围计,更深入学习机在生活中中的实际焊接电路,编写程序,也进一步提高了我的动手能力以及分析解决错误的能力,是我能够更好的将所学知识应用到实际中来。本系统能够根本满足设计要求,能够实现自行车转换灯指示,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改良。附录:源程序代码#inc1ude#defineucharunsignedchar#defineuintuns
7、ignedintuintkey,ijtime,m,k;uchartemp;ucharSTHO,ST1O,STH1,ST11;sbitsw=P27;sbitspeaker=P24;sbitP37=P37;sbitP36=P36;sbitP35=P35;sbitP34=P34;/音阶频率表高八位codeunsignedcharFREQH=0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,1,2,3,4,5,6,7,8,iOxFC,OxFD,OxFD7OxFD,OxFD,OxFEzOxFE,OxFE,
8、OxFE,OxFE,OxFE,OxFE,OxFF,);/音阶频率表低八位codeunsignedcharFREQ1=0x42,OxC1,0x17,0xB6,OxDO,OxD1,0xB6,0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,1,2,3A5,6,7,8,iOxEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,OxDA,OxFA,0x16,);unsignedintcodetab=64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,
9、65030,65058,65110,65157,65178;voidkey_music()(P3=0xff;P34=0;temp=P3;temp=temp&0x0f;if(temp!=xf)(for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp&0x0f;if(temp!=00f)(temp=P3;temp=temp&0x0f;switch(temp)(caseOxOe:key=O;break;caseOxOd:key=1;break;caseOxOb:key=2;break;case0x07:key=3;break;)speaker=speake
10、r;STH1=tabkey256;ST11=tabkey%256;TRO=1;temp=P3;temp=temp&OxOf;whi1e(temp!=xf)(temp=P3;temp=temp&OxOf;)TRO=O;P3=0xff;P35=0;temp=P3;temp=temp&0x0f;if(temp!=xf)(for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp&0x0f;if(temp!=00f)temp=P3;temp=temp&OxOf;switch(temp)(caseOxOe:key=4;break;caseOxOd:key=5;br
11、eak;caseOxOb:key=6;break;case0x07:key=7;break;)SPeaker=speaker;STH1=tabkey256;ST11=tabkey%256;TR0=1;temp=P3;temp=temp&OxOf;whi1e(temp!=xf)(temp=P3;temp=temp&OxOf;TRO=O;P3=0xff;P36=0;temp=P3;temp=temp&0x0f;if(temp!=xf)(for(i=50;i0;i-)for(j=200;j0;j-);temp=P3;temp=temp&0x0f;if(temp!=xf)(temp=P3;temp=t
12、emp&0x0f;switch(temp)caseOxOe:key=8;break;caseOxOd:key=9;break;caseOxOb:key=10;break;case0x07:key=11;break;)speaker=speaker;STH1=tabkey556;ST11=tabkey%256;TR0=1;temp=P3;temp=temp&OxOf;whi1e(temp!=xf)(temp=P3;temp=temp&OxOf;TRO=O;)P3=0xff;P37=0;temp=P3;temp=temp&0x0f;if(temp!=xf)(for(i=50;i0;i-)for(j
13、=200;j0;j-);temp=P3;temp=temp&OxOf;if(temp!=xf)(temp=P3;temp=temp&0x0f;switch(temp)caseOxOe:key=12;break;caseOxOd:key=13;break;caseOxOb:key=14;break;case0x07:key=15;break;)speaker=speaker;STH1=tabkey256;ST11=tabkey%256;TR0=1;temp=P3;temp=temp&OxOf;whi1e(temp!=xf)(temp=P3;temp=temp&OxOf;)TRO=O;)voidtimerO(void)interrupt1usingO(if(sw=1)(THO=STH1;T1O=ST11;)e1se(THO=STHO;T1O=ST1O;)speaker=!speaker;)voidde1ay(unsignedchart)(unsignedchart1;unsigned1ongt2;for(t1=0;t1t;t1+)for(t2=0;t28000;t2+)TRO=O;)voidsong()THO=STHO;T1O=ST1O;TR0=1;de1ay(time);)voidmusic(void)(m=0;time=1;sw=1;