音乐盒的设计1技术要求能够产生低中高三个音调的7个标准音阶DO,RE,M,FA,SO,LA,SI;并在按下相应的数字键的时候数码管显示相应数字;自选一首歌曲,查找到相关的乐谱,确定音阶和节拍,并编写相关的源程序是蜂鸣器能够播放出该歌曲。2设计方案及实现2.1方案一任务要求:以89s51为核心,根据设计指标设计电路的框图,画出电路逻辑图和装配图,查阅资料,确定所需各元器件型号和参数,自拟调整测试方法,并调试电路使其达到设计指标要求。2.1.1方案设计根据任务要求,可以通过以下原理图(图2-1)来实现该音乐盒的设计。复位电路琴键电路P0.0|P0.7P1.0时钟电路单片机80c51图2-1本方案的琴键输入是通过独立式键盘来完成的,这样便于控制且直观,如上图设计原理所示我们可以画出比较直观的流程图如图2-2所示。图2-2主流程图中断程序流程图NY等待中断,判断是否中断判断是否抖动Y居于上述流程图我们可以通过proteus软件画出该实验的原理图(图2-3):图2-32.1.2方案实现对于音乐盒而言发出悦耳的音乐是其最主要的功能,那么对于使用单片机来制作出来的音乐盒怎么实现音符的发声呢?通过查看资料我们知道音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制引脚的输出音乐(本实验采用P1.0做为输出引脚)。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。具体做法如下所示(以中音DO为例):例如:中音1(DO)的音频=523HZ,周期T=1/523s=1912定时器/计数器0的定时时间为:T/2=1912/2=956定时器956的计数值=定时时间/机器周期=956/1=956(时钟频率=12MHZ)装入T0计数器初值为65536-956=64580将64580装入T0寄存器中,启动T0工作后,每计数956次时将产生溢出中断,进入中断服务时,每次对P1.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表2-1是C调各音符频率与计数初值T的对照表:表2-1C调各音符频率与计数初值T的对照表音符频率(Hz)/初值()音符频率(Hz)/初值()低1DO262/63627中1DO523/64580高1DO1042/65056低2RE294/63835中2RE589/64687高2RE1245/65134低3M330/64021中3M661/64780高3M1318/65157低4FA350/64107中4FA700/64822高4FA1397/65178低5SO393/64264中5SO786/64900高5SO1568/65217低6LA441/64402中6LA882/64969高6LA1760/65252低7SI495/64526中7SI990/65031高7SI1967/652822.1.2.1详细参数本实验以Intel公司的80c51为核心,配合键盘系统,放大电路,时钟电路和数码管显示电路实现音乐的演奏。80C51:高性能的静态80C51设计由先进CMOS工艺制造并带有非易失性Flash程序存储器全部支持12时钟和6时钟操作P89C51X2和P89C52X2/54X2/58X2分别包含128字节和256字节RAM32条I/O口线3个16位定时/计数器6输入4优先级嵌套中断结构1个串行I/O口可用于多机通信I/O扩展或全双工UART以及片内振荡器和时钟电路。此外,由于器件采用了静态设计,可提供很宽的操作频率范围,频率可降至0。可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结CPU但RAM定时器,串口和中断系统仍然工作掉电模式保存RAM的内容但是冻结振荡器导致所有其它的片内功能停止工作。由于设计是静态的时钟可停止而不会丢失用户数据运行可从时钟停止处恢复。键盘系统:键盘系统的链接电路图如图2-31所示:图2-31当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。具体编码如下所示MAI:CLRTR0;关闭上一次定时,进入下一次按键判断MOVTMOD,#01HMOVIE,#82HMOVA,P1MOV30H,A;保存键盘状态值LCALLD10MS;延迟10ms消除抖动MOVA,P1;再读键盘状态CJNEA,30H,MAI;两次结果不同,是抖动引起,转MAI放大电路分析如图2-4所示:图2-4放大电路输出原理图此部分的放大电路简单容易实现。可以采用一个小功率PNP型硅管9012,利用“分压偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。分压电阻分别选择1K和5.5K。蜂鸣器一端接+5V电压,一端接晶体管的发射极。由P1.0输出预定的方波,加到晶体管进行放大,再输出到嗡宁器,很好的实现了频率、声音的转换。时钟电路如图2-5所示:此系统的时钟电路设计是采用内部方式,即是利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。电容值选择22μF,所以此系统电路的晶体振荡器的值为6MHz。图2-5MSC-51片内振荡电路2.1.2.2程序的编写源程序如下所示:NUMTIMEQU20HGEWEIEQU21HSHIWEIEQU22HSCANLEDEQU23HORG0000HLJMPMAIORG000BHLJMPTIMORG100HMAI:MOVR2,#3FHMOVP2,R2;让数码管显示0CLRTR0;关闭上一次定时,进入下一次按键判断MOVTMOD,#01HMOVIE,#82HMOVA,P0;再读键盘MOV30H,ALCALLD10MS;延迟10ms消除抖动MOVA,P0;再读入键盘状态CJNEA,30H,MAI;两次结果比较,不同是引起抖动,转向MAIJNBP0.0,N1JNBP0.1,N2JNBP0.2,N3JNBP0.3,N4JNBP0.4,N11JNBP0.5,N6JNBP0.6,N7JNBP0.7,N8N11:LJMPN5N6:LJMPLA;JNB的跳转范围限定在256B,所以使用LJMP跳转N7:LJMPHAHAN8:LJMPHEHEN1:MOVDPTR,#TAB;设定音阶1的定时时间MOVA,#00HMOVCA,@A+DPTRMOVR1,AMOVA,#01HMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#06HMOVP2,ARE1:JBP0.0,MAI;判断琴键1是否释放AJMPRE1N2:MOVDPTR,#TAB;设定音阶2的定时时间MOVA,#02HMOVCA,@A+DPTRMOVR1,AMOVA,#03HMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#5BHMOVP2,ARE2:JBP0.1,MAIAJMPRE2N3:MOVDPTR,#TAB;设定音阶2的定时时间MOVA,#04HMOVCA,@A+DPTRMOVR1,AMOVA,#05HMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#4FHMOVP2,ARE3:JBP0.2,N9AJMPRE3N9:LJMPMAIN4:MOVDPTR,#TABMOVA,#06HMOVCA,@A+DPTRMOVR1,AMOVA,#07HMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#66HMOVP2,ARE4:JBP0.3,A1AJMPRE4A1:LJMPMAIN5:MOVDPTR,#TABMOVA,#08HMOVCA,@A+DPTRMOVR1,AMOVA,#09HMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#6DHMOVP2,ARE5:JBP0.4,A2AJMPRE5A2:LJMPMAILA:MOVDPTR,#TABMOVA,#0AHMOVCA,@A+DPTRMOVR1,AMOVA,#0BHMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#7DHMOVP2,ARE6:JBP0.5,A3AJMPRE6A3:LJMPMAIHAHA:MOVDPTR,#TABMOVA,#0CHMOVCA,@A+DPTRMOVR1,AMOVA,#0DHMOVCA,@A+DPTRMOVR0,AMOVTH0,R1MOVTL0,R0SETBTR0MOVA,#07HMOVP2,ARE7:JBP0.6,A4AJMPRE7A4:LJMPMAIHEHE:MOVTMOD,#00000001B;方式寄存器设置SETBEASETBET0MOVNUMTIM,#01HSTART0:MOV30H,#00HNEXT:MOVA,30HMOVDPTR,#TABLEMOVCA,@A+DPTRMOVR2,AJZEND0ANLA,#0FHMOVR5,AMOVA,R2SWAPAANLA,#0FHJNZSINGCLRTR0JMPD0SING:DECA;开始唱MOV22H,ARLAMOVDPTR,#TABLE1MOVCA,@A+DPTRMOVTH0,AMOV21H,AMOVR1,AMOVA,22HRLAINCAMOVCA,@A+DPTRMOVTL0,AMOV20H,AMOVR0,ASETBTR0MOVA,#7FHMOVP2,AD0:LCALLDELAYJBP0.7,END0INC30HJMPNEXTEND0:CLRTR0JBP0.7,N10AJMPSTART0N10:LJMPMAITIM:PUSHACCPUSHPSWMOVTL0,R0;重装定时器初值MOVTH0,R1CPLP1.0POPPSWPOPACCRETI;中断返回DELAY:MOVR7,#02HD3:MOVR4,#187D4:MOVR3,#248DJNZR3,$DJNZR4,D4DJNZR7,D3DJNZR5,DELAYRETRE8:JBP0.7,A5AJMPRE8A5:LJMPMAID10MS:MOVR1,#100D1:MOVR2,#98NOPD2:DJNZR2,D2DJNZR1,D1RETTAB:DB0FEH,25H,0FEH,57H,0FEH,84H,,0FEH,98H,0FEH,0C0H,0FEH,0E3H,0FFH,02H,0FCH,0EH;高音音符编码TABLE1:;计时器初始计数值DW64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862TABLE:;所放歌曲编码DB03HDB04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54HDB32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04HDB52H,51H,0D1H,12H,12H,32H,31H,31H,52H,51H,51H,22H,22H,22H,0D2H,0D1H,0D1H,24H,22H,0C2H,14H,12H,12H,34H,32H,32H,54H,54