基于单片机AT89S51的电子琴设计报告.docx
基于89S51单片机电子琴设计报告学生姓名邓昌能钟坡杭志杰学院计算机与电子信息工程专业电信、计科指导教师陈勇职称教授湖南商学院北津学院2023年12月摘要本文介绍了基于AT89S51单片机的电子琴的设计与实现。电子琴的主要功能是利用以AT89S51单片机为系统控制处理器;关键字:AT89S51单片机7段数码管蜂鸣器目录摘要1绪论21设计21.1 设计目的21.2 设计方法和内容22设计方案22. 1系统总体设计方案32.2系统的结构框架33硬件电路的设计43. 1单片机最小系统43.2独立键盘控制电路设计错误!未定义书签。3 .37段数码管显示电路设计错误!未定义书签。4 .4蜂鸣器电路设计错误!未定义书签。4软件系统的实现54.1 主程序设计54.2 程序思路5结论5附录:源程序代码6绪论1设计1.1 设计目的(1)了解单片机及其工作原理;(2)了解如何用C语言编程;(3)如何将单片机应用于生活中。1.2设计方法和内容(1)能够对电子电路、电子元器件、印制电路板等方面的知识有进一步的认识,独立对其进行测试与检查。(2)熟悉8051单片机的内部结构和功能,合理使用其内部存放器,能够完成相关软件编程设计工作。(3)为实现预期功能,能够对系统进行快速的调试,并能够对出现的功能故障进行分析,及时修改相关软硬件。(4)对软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高。2设计方案2.1 系统总体设计方案由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器to来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。2.2 系统的结构框架图系统结构框架3硬件电路的设计1 .1单片机最小系统本次设计中单片机晶振为12MHZ,那么定时器的计数周期为IMHZ,假设选择工作方式1,那T值便为T=216-5*105/相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数To相关的计值。工CRYSTALA10k C3 > IOuF293031PIO 1 /P11 2 /P12 3 /P13 4 /P14 5 P15 Q /Plfl 7 “17 8>XTAL1POQAcOPO.VO1 P02>2XTAL2P0.3/AC3PO 43 P0.5/A06 PO .6/MeRSTP0.7/AD7P2.(Mae P2. 依e P2A10PSENP2 3ZA11EP2.4/A12EAP2 5ZA13P2 6/A44 P2.7ZA15PIQP3.0/RXDP1.1P3.1DP12P32TOP13P3.3NT1Pl .4P3M0Pl 6P3.5/T1PlfiP3Pl 7P3 7 海AT8Q8121222324252627SOUNDER图3-1 单片 机最 小系 统原 理图3 .2独立键盘控制电路设计3. 3发光二极管显示电路设计3.4蜂鸣器电路设计4软件系统的实现4.1主程序设计本次设计中单片机晶振为12MHZ,那么定时器的计数周期为IMHZ,假设选择工作方式1,那T值便为T=216-5*10%相应的频率,那么根据不同的频率计算出应该赋给定时器的计数值,列出不同音符与单片机计数To相关的计数值。图4.1主程序流程图4.2 程这个 了 4*4 矩 按键赋予 共计有两 段数码管 数码显示。结论本设 片机的通 本功能,通 步掌握了 用。同时, 电路的设 了 51单片 应用。通过序思路简易电子琴应用 阵键盘,每一个 了不同的音调, 个八度。对应7现实1到F 16个计主要用到了单 用IO 口的读写根 过实际操作进一 51单片机的使 通过单片机外围 计,更深入学习 机在生活中中的 实际焊接电路,编写程序,也进一步提高了我的动手能力以及分析解决错误的能力,是我能够更好的将所学知识应用到实际中来。本系统能够根本满足设计要求,能够实现自行车转换灯指示,但由于经验能力有限,该系统还存在着许多不尽人意的地方有待于进一步的完善与改良。附录:源程序代码#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintuintkey,i,j,time,m,k;uchartemp;ucharSTHO,STLO,STHl,STLl;sbitsw=P27;sbitspeaker=P24;sbitP37=P37;sbitP36=P36;sbitP35=P35;sbitP34=P34;/音阶频率表高八位codeunsignedcharFREQH=0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,0xF9,0xF9,OxFA,0xFA,0xFB,0xFB,0xFC,0xF(:,1,2,3,4,5,6,7,8,iOXFCQXFD,OxFD,OxFDQxFD,OxFE,OXFEQXFE,0xFE,0xFE,0xFEQxFE,OxFF,1./音阶频率表低八位codeunsignedcharFREQL=0x42,0xCl,0xl7,0xB6z0xD0,0×Dl,0xB6z0×21z0xElz0×8C,0xD8,0x68,0xE9,0×5B,0x8F,/1,23,4,5,6z7,8JOXEE,0x44,0x6B,0xB4,0xF4,0x2D,0x47,0x77,0xA2,0xB6,0xDA,0xFA,0xl6,unsignedintcodetab=64021,64103,64260,64400,64524,64580,64684,64777,64820,64898,64968,65030,65058,65110,65157,65178;voidkey_music()P3=0xff;P34=0;temp=P3;temp=temp&0x0f;if(temp!=0×0f)for(i=50;i>0;i)for(j=200;j>0;j-);temp=P3;temp=temp&0x0f;if(temp!三xf)temp-P3;temp三temp8xf;switch(temp)caseOxOe:key=O;break;caseOxOd:key=l;break;caseOxOb:key=2;break;case0x07:key=3;break;speaker三speaker;STHl=tabkey256;STLl=tabkey%256;TRO=1;temp=P3;temp=temp&OxOf;while(temp!=xf)temp=P3;temp=temp&OxOf;TRO=O;P3=0xff;P35=0;temp=P3;temp=tempcxf;if(temp!=OxOf)for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=tempSOxOf;lf(temp!=xf)temp=P3;temp-temp&OxOf;switch(temp)caseOxOe:key=4;break;caseOxOd:key=5;break;caseOxOb:key=6;break;case0x07:key=7;break;SPeaker="speaker;STHl=tabkey256;STLI=tdbkey%256;TRO=1;temp=P3;temp=temp&OxOf;while(temp!=xf)temp=P3;temp=temp&OxOf;TRO=O;P3=0xff;P36=0;temp=P3;temp=temp8cxf;if(temp!=OxOf)for(i=50;i>0;i-)for(j=200;j>0;j-);temp=P3;temp=temp&OxOf;f(temp!=xf)temp=P3;temp=temp&OxOf;switch(temp)caseOxOe:key=8;break;caseOxOd:key=9;break;caseOxOb:key=10;break;case0x07:key=ll;break;SPeaker=speaker;STHl=tabkey256;STLl=tabkey%256;TR0=l;temp=P3;temp=temp&OxOf;while(temp!=xf)temp=P3;temp=temp&OxOf;TRO=O;P3=0xff;P37±0;temp=P3;temp=temp&OxOf;if(temp!=OxOf)for(i=50;i>0;i)for(j=200;j>0;j-);temp=P3;temp=temp&OxOf;if(temp!=0×0f)temp=P3;temp=temp&OxOf;switch(temp)caseOxOe:key=12;break;caseOxOd:key=13;break;caseOxOb:key=14;break;case0x07:key=15;break;Speakehspeaker;STHl=tabkey256;STLl三tabkey%256;TR0=l;temp三P3;temp三temp&OxOf;while(tem!=xf)temp=P3;temp=temp&OxOf;TRO=O;voidtimerO(void)interrupt1usingOif(sw=l)THO=STHl;TLO=STL1;elseTHO=STHO;TLO=STLO;)Spealkeir=Ispeaker;voiddelay(unsignedchart)unsignedchartl;unsignedlongt2;for(tl0;tl<t;tl+)for(t2=0;t2<8000;t2+)TRO=O;voidsong()THo=STH0;TLO=STLO;TRO=1;delay(time);voidmusic(void)m=0;time=l;sw=1;while(time&&sw=0)if(sw)i=0;continue;elsek=sszymmhm+7*sszymmhm+l-l;STHO=FREQHk;STLO=FREQLk;time=sszymmhm+2;m=m+3;song();voidmain()TMOD=OxOI;ETO=1;EA=I;while(l)if(sw=l)key_music();elsemusic();