当前位置:文档之家› 基于单片机的音乐演奏电路的设计与制作

基于单片机的音乐演奏电路的设计与制作

目录引言 (1)1 单片机演奏音乐的原理 (1)2 电路相关器件 (3)2.1 AT89C51 (3)2.2 LM386 (4)3 电路设计 (4)3.1 主体电路设计 (5)3.2 电源电路设计 (5)3.3 音频放大模块设计 (5)4 电路板的制作 (6)5 程序设计 (6)5.1 程序设计内容 (6)5.2 程序流程图 (7)5.3 具体程序 (8)6硬件电路及程序的调试 (15)7成品展示 (15)结束语 (16)参考文献 (16)英文翻译.......................................... (错误!未定义书签。

) 致谢.............................................. (错误!未定义书签。

)基于单片机的音乐演奏电路的设计与制作摘要:单片机具有体积小、重量轻、开发灵活、性价比高等优点,广泛应用于自动化控制、家用电器、智能玩具等领域。

本文以单片机AT89C51为控制核心,设计并制作了可以连续播放六首乐曲的音乐演奏电路。

这种简单的音乐播放电路可以加装在一些儿童玩具内部,使其成为可以发声的智能玩具,具有实际的推广应用价值。

关键词:单片机 ;汇编语言 ;LM386 ;音乐演奏 引言单片机具有体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较容易等优点。

所以,自自问世以来,倍受关注,应用很广,发展很快。

利用单片机发声的基本原理,本文设计并制作了一款能够顺序播放6首乐曲的音乐播放电路,该电路可以加装在儿童玩具中,使其成为智能化玩具。

1 单片机演奏音乐的原理要单片机(AT89C51)产生音频脉冲,就要计算出音频的周期,然后用计数器定时1/2此周期,每当计时到后就将输出脉冲的I/O 管脚反相,然后重复计时此半周期再对I/O 管脚反相,就可在此I/O 管脚得到此频率的脉冲。

用单片机内部定时器/计数器计数,使其工作于定时器模式,要得到不同频率的音频信号,只要改变其计数初值即可。

计数脉冲值与频率的关系公式如下:r i F F N ÷÷=2 N :计数值;F i :内部计时一次为1s,故其频率为1MHz ; F r :要产生的频率;其T 值的求法如下:r i F F N T ÷÷-=-=26553665536]1[。

表1.1 C 调各音符频率与计数值N 的对照表每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,表1.2为节拍与节拍码的对照。

如果1拍为0.4秒,则1/4拍为0.1秒,只要设定延迟时间就可求得节拍的时间。

假设1/4拍为1DELAY,则1拍为4DELAY,依次类推。

所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数,如表1.3为1/4和1/8节拍的时间设定]2[。

表1.2 节拍数与节拍码的对照表1.3各调1/4节拍和1/8节拍的时间设定表1.4歌曲简谱对应的码值、T值简谱音符简谱码T值简谱音符简谱码T值低音SO 1 64260 6 中音LA 9 64968低音LA 2 64400 7 中音TI A 65030低音TI 3 64524.1高音DO B 650581 中音DO 4 64580.2高音RE C 651102 中音RE 5 64684.3高音MI D 651573 中音MI 6 64777.4高音FA E 651704 中音FA 7 64280.5高音SO F 652175 中音SO 8 64898 不发音02 电路相关器件2.1 AT89C51AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。

该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。

由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。

AT89C51管脚说明]3[(图2.1):电源引脚:VCC :接+5V电源 GND :接地时钟引脚:2个时钟引脚XTAL1、XTAL2外接晶体与片内的反向放大器构成1个振荡器,它为单片机提供了时钟控制信号。

2个时钟引脚也可外接独立的晶体振荡器。

I/O口引脚:图2.1P0口:双向8位三态I/O 口,此口为地址总线(低8位)及数据总线分时复用口,可驱动8个LS 型TTL 负载。

P1、P2、P3口是3个8位准双向的I/O 口,各口线在片内均有固定的上拉电阻。

可驱动4个LS 型TTL 负载。

P3口也可作为AT89C51的一些特殊功能口:P3.0 RXD (串行输入口) P3.1 TXD (串行输出口) P3.20INT (外部中断0) P3.31INT (外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6WR (外部数据存储器写选通) P3.7RD (外部数据存储器读选通) 控制引脚]4[:RST :复位输入,当振荡器复位器件时,要保持RST 脚两个机器周期的高电平时间。

PROG ALE /:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。

在FLASH 编程期间,此引脚用于输入编程脉冲。

在平时,ALE 端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。

因此它可用作对外部输出的脉冲或用于定时目的。

PSEN :外部程序存储器的选通信号。

在由外部程序存储器取指期间,每个机器周期两次/PSEN 有效。

但在访问外部数据存储器时,这两次有效的PSEN 信号将不出现。

EA /VPP :当EA 保持低电平时,则在此期间外部程序存储器(0000H-FFFFH ),不管是否有内部程序存储器。

注意加密方式1时,EA 将内部锁定为RESET ;当EA 端保持高电平时,此间内部程序存储器。

在FLASH 编程期间,此引脚也用于施加12V 编程电压(VPP )。

2.2 LM386LM386具有增益高、功耗小,输入电压范围为4V ~12V ,无作动时仅消耗4mA 电流,且失真低的特点,是专为低损耗电源所设计的功率放大器集它的内部增益为20,通过第1引脚和第8引 图2.2脚脚位间电容的搭配,增益最高可达200。

LM386的引脚排列如图2.2所示]5[: 3 电路设计3.1 主体电路设计音乐演奏电路的主体电路设计如图3.1所示:图3.13.2 电源电路设计该电路由电源插座输入220V的电压,经变压器降压为9V的交流电,接着经整流桥和稳压7805的调整输出为5V的电压。

AT89C51的电源电压为5V,电源电路原理图如图3.2所示]6[:图3.23.3 音频放大模块设计该音频放大模块采用LM386芯片作为音频的功率放大,音频信号由“SPK—IN”第3端口输入,由“SPK—OUT”第5端口输出送至喇叭。

原理图如图3.3]7[:图3.34 电路板的制作Protel99SE是设计电路和制作电路板常用软件,它简单实用,提供多种元器件,想要做出一个正确的PCB板必须熟练掌握Protel99SE的使用方法]8[。

PCB板制作的一般步骤:1)绘制电路原理图;2)对器件的封装进行逐一定义;3)PCB板图设计,进行合理布线;4)转印;5)腐蚀、漂洗;6)元件的焊接、组装;7)进行电路调试,排除硬件电路故障]9[。

5 程序设计5.1 程序设计内容单片机P3.4接一按键,作为控制音乐演奏播放的开关,每按一次,歌曲就改变。

按完6次,再重复循环。

6首歌分别如下:C调3/4 生日快乐祝你生日快乐祝你生日快乐我们高声歌唱祝你生日快乐D调4/4 哈巴狗F C C C一只哈巴狗,坐在大门口,眼睛黑幽幽,想吃肉骨头F C G7 C一只哈巴狗,吃完肉骨头,尾巴摇一摇,向我点点头D调4/4 D 不到翁说你呆,你不呆,胡子一把样子像小孩说你呆,你不呆,推你倒下你又站起来C调4/4 妹妹背着洋娃娃C G7 C C F G7妹妹背着洋娃娃走到花园来看书Am C Dm G7 C娃娃哭了叫妈妈树上小鸟笑哈哈E调4/4 两只老虎两只老虎两只老虎跑得快跑得快一只没有耳朵一只没有尾巴真奇怪真奇怪Bb调4/4 三只小猫Bb Eb Bb Eb三只小猫小,三只小猫小,一边唱,一边走,两只小猫小,两只小猫小,一边唱,一边走,Bb Eb Eb F7 Eb一只猫到洞里去,现在只剩两只猫。

一只爬到树上去,现在只剩一只猫。

5.2 程序流程图音乐演奏电路的程序设计流程图如5.1所示]10[。

图5.15.3 具体程序ORG 00H ;主程序起始地址JMP START ;跳至主程序ORG 0BH ;TIMER0中断起始地址JMP TIM0 ;跳至TIMER0中断子程序START: MOV TMOD,#00000001B ;设TIMER0在MODE1MOV IE,#10000010B ;中断使能JB P3.4,$ ;第一次按T0?CALL DELAY1 ;消除抖动JNB P3.4,$ ;T0放开?MOV 31H,#00 ;按T0次数计数指针初值为00H START0:MOV 30H,#LOW SONG ;取简谱码指针(第1首)NEXT: MOV A,30HMOV DPTR,#TABLEMOVC A,@A+DPTR ;至相关页取码,高4位为音符的高低MOV R2,A ;低4位为音符的节拍JZ END0 ;检查简谱码是否已结束(有无00?)ANL A,#0FH ;取节拍(低4位)MOV R5,A ;存入R5,节拍的时间MOV A,R2SWAP AANL A,#0FH ;取音频值(高4位)JNZ SING ;是否为0,是0则不发音CLR TR0JMP D1SING: DEC A ;因0不列入MOV 22H,A ;存入(22H)RL A ;乘2MOV DPTR,#TABLEMOVC A,@A+DPTR ;至TABLE取码,取T的值MOV TH0,A ;取到的高位字节存入TH0MOV 21H,A ;取到的高位字节存入(21H)MOV A,22H ;再载入取到的音符码RL A ;乘2INC A ;加1MOVC A,@A+DPTR ;至TABLE取相对的低位字节计数值MOV TL0,A ;取到的低位字节存入TL0MOV 20H,A ;取到的低位字节存入(20H)SETB TR0 ;启动TIMER0D1: CALL DELAYINC 30H ;取简谱码指针加1JMP NEXTEND0: CLR TR0 ;停止计数器MOV A,31H ;载入计次指针XRL A,#00H ;是否按第1次?JNZ END1 ;不是则跳至END1JB P3.4,$ ;按第2次?CALL DELAY1 ;消除抖动JNB P3.4,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG1 ;第2首歌指针JMP NEXTEND1:MOV A,31H ;载入计次指针XRL A,#01H ;是否按第2次?JNZ END2 ;不是则跳至END2JB P3.4,$ ;按第3次?CALL DELAY1 ;消除抖动JNB P3.4,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG2 ;第3首歌指针JMP NEXTEND2:MOV A,31H ;载入计次指针XRL A,#02H ;是否按第3次?JNZ END3 ;不是则跳至END3JB P3.4,$ ;按第4次?CALL DELAY1 ;消除抖动JNB P3.4,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG3 ;第4首歌指针JMP NEXTEND3:MOV A,31H ;载入计次指针XRL A,#03H ;是否按第4次?JNZ END4 ;不是则跳至END4JB P3.4,$ ;按第5次?CALL DELAY1 ;消除抖动JNB P3.4,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG4 ;第5首歌指针JMP NEXTEND4:MOV A,31H ;载入计次指针XRL A,#04H ;是否按第5次?JNZ END5 ;不是则跳至END5JB P3.4,$ ;按第6次?CALL DELAY1 ;消除抖动JNB P3.4,$ ;放开否?INC 31H ;计次地址(31H)加1MOV 30H,#LOW SONG5 ;第6首歌指针JMP NEXTEND5:JMP START ;回到第1次位置TIM0: PUSH ACC ;将A的值暂存于堆栈PUSH PSW ;将PSW的值暂存于堆栈SETB RS0 ;设工作寄存库1,RS0=1,RS1=0CLR RS1MOV TL0,20H ;重设计数值MOV TH0,21HCPL P1.0 ;将P1.0位反相POP PSW ;至堆栈取回PSW的值POP ACC ;至堆栈取回A的值RETI ;返回主程序DELAY: MOV R7,#02 ;125毫秒D2: MOV R4,#125D3: MOV R3,#248 DJNZ R3,$DJNZ R4,D3DJNZ R7,D2DJNZ R5, DELAY ;决定节拍RETDELAY1:MOV R4,#20D4: MOV R3,#248DJNZ R3,$DJNZ R4,D4RETORG 300HTABLE:DW 64260,64400,64524,64580DW 64684,64777,64820,64898DW 64968,65030,65058,65110DW 65157,65178,65217SONG: ;第1首歌哈巴狗;1DB 42H,42H,42H,52H,64H,04HDB 62H,62H,62H,72H,84H,04HDB 92H,92H,82H,72H,64H,04HDB 82H,82H,52H,62H,44H,04H;2DB 42H,42H,42H,52H,64H,04HDB 62H,62H,62H,72H,84H,04HDB 92H,92H,82H,72H,64H,04HDB 82H,82H,52H,62H,44H,04HDB 00HSONG1: ;第2首歌生日快乐;1DB 82H,01H,81H,94H,84HDB 0B4H,0A4H,04HDB 82H,01H,81H,94H,84HDB 0C4H,0B4H,04H;2DB 82H,01H,81H,0F4H,0D4HDB 0B4H,0A4H,94HDB 0E2H,01H,0E1H,0D4H,0B4HDB 0C4H,0B4H,04HDB 00HSONG2: ;第3首歌不倒翁;1DB 84H,94H,88HDB 64H,54H,68HDB 84H,64H,54H,44HDB 62H,82H,42H,62H,58H;2DB 84H,94H,88HDB 64H,54H,68HDB 84H,64H,54H,44HDB 52H,42H,52H,62H,48HDB 00HSONG3: ;第4首歌妹妹背着洋娃娃;1DB 84H,02H,82H,64H,54HDB 64H,54H,48HDB 64H,02H,52H,44H,24HDB 14H,24H,18H;2DB 24H,02H,22H,42H,24HDB 44H,54H,68HDB 54H,02H,52H,84H,84HDB 54H,64H,48HDB 00HSONG4: ;第5首歌两只老虎;1DB 44H,54H,64H,44HDB 44H,54H,64H,44HDB 64H,74H,88HDB 64H,74H,88H;2DB 82H,92H,82H,72H,64H,44HDB 82H,92H,82H,72H,64H,44HDB 44H,84H,48HDB 44H,14H,48HDB 00HSONG5: ;第6首歌三只小猫;1DB 62H,82H,82H,62H,98HDB 92H,0B2H,0B2H,82H,98HDB 62H,82H,82H,52H,68HDB 92H,0B2H,0B2H,82H,98H;2DB 62H,82H,82H,62H,92H,92H,94HDB 92H,0B2H,0B2H,92H,84H,94HDB 0B8H,0B4H,04HDB 00HEND6硬件电路及程序的调试在调试的过程中所遇到的问题及解决方法:当电路第一次接通电源的瞬间,变压器闪出火花,发出一声“砰”的响声,实验供电回路电源关断。

相关主题