音乐盒的设计

  • 格式:doc
  • 大小:368.00 KB
  • 文档页数:24

音乐盒的设计 1技术要求 能够产生低中高三个音调的7个标准音阶DO,RE,M,FA,SO,LA,SI;并在按下相应的数字键的时候数码管显示相应数字;自选一首歌曲,查找到相关的乐谱,确定音阶和节拍,并编写相关的源程序是蜂鸣器能够播放出该歌曲。 2设计方案及实现 2.1 方案一 任务要求:以89s51为核心,根据设计指标设计电路的框图,画出电路逻辑图和装配图,查阅资料,确定所需各元器件型号和参数,自拟调整测试方法,并调试电路使其达到设计指标要求。 2.1.1方案设计 根据任务要求,可以通过以下原理图(图2-1)来实现该音乐盒的设计。 复位电路

琴键 电路 P0.0 | P0.7

P1.0

时钟电路 单片机 80c51

图2-1

本方案的琴键输入是通过独立式键盘来完成的,这样便于控制且直观,如上图设计原理所示我们可以画出比较直观的流程图如图 2-2所示。

图2-2 主流程图 中断程序流程图 N Y 等待中断,判断是否中断 判断是否抖动 Y 居于上述流程图我们可以通过proteus软件画出该实验的原理图(图2-3): 图2-3 2.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-1 C调各音符频率与计数初值T的对照表 音符 频率(Hz)/初值() 音符 频率(Hz)/初值() 低1DO 262/63627 中1DO 523/64580 高1DO 1042/65056 低2RE 294/63835 中2RE 589/64687 高2RE 1245/65134 低3M 330/64021 中3M 661/64780 高3M 1318/65157 低4FA 350/64107 中4FA 700/64822 高4FA 1397/65178 低5SO 393/64264 中5SO 786/64900 高5SO 1568/65217 低6LA 441/64402 中6LA 882/64969 高6LA 1760/65252 低7SI 495/64526 中7SI 990/65031 高7SI 1967/65282 2.1.2.1 详细参数 本实验以Intel公司的80c51为核心,配合键盘系统,放大电路,时钟电路和

数码管显示电路实现音乐的演奏。 80C51: 高性能的静态80C51 设计 由先进CMOS 工艺制造并带有非易失性Flash 程序存储器 全部支持12 时钟和6 时钟操作 P89C51X2 和P89C52X2/54X2/58X2 分别包含128 字节和256 字节RAM 32 条I/O 口线 3 个16 位定时/计数器 6 输入4 优先级嵌套中断结构 1 个串行I/O 口 可用于多机通信 I/O 扩展或全双工UART以及片内振荡器和时钟电路。此外,由于器件采用了静态设计,可提供很宽的操作频率范围,频率可降至0 。可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结CPU但RAM定时器,串口和中断系统仍然工作掉电模式保存RAM的内容 但是冻结振荡器 导致所有其它的片内功能停止工作。由于设计是静态的时钟可停止而不会丢失用户数据 运行可从时钟停止处恢复。 键盘系统: 键盘系统的链接电路图如图2-31所示: 图2-31 当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到

闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。具体编码如下所示 MAI: CLR TR0 ;关闭上一次定时,进入下一次按键判断 MOV TMOD, #01H MOV IE, #82H MOV A, P1 MOV 30H, A ;保存键盘状态值 LCALL D10MS ;延迟10ms消除抖动 MOV A , P1 ;再读键盘状态 CJNE A, 30H, MAI ;两次结果不同,是抖动引起,转MAI 放大电路分析如图2-4所示: 图2-4放大电路输出原理图

此部分的放大电路简单容易实现。可以采用一个小功率PNP型硅管9012,利用“分压 偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。分压电阻分别选择1K和5.5K。蜂鸣器一端接+5V电压,一端接晶体管的发射极。由P1.0输出预定的方波,加到晶体管进行放大,再输出到嗡宁器,很好的实现了频率、声音的转换。 时钟电路如图2-5所示: 此系统的时钟电路设计是采用内部方式,即是利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。电容值选择22μF,所以此系统电路的晶体振荡器的值为6 MHz。 图2-5 MSC-51片内振荡电路 2.1.2.2 程序的编写

源程序如下所示:

NUMTIM EQU 20H GEWEI EQU 21H SHIWEI EQU 22H SCANLED EQU 23H ORG 0000H LJMP MAI ORG 000BH LJMP TIM ORG 100H MAI: MOV R2,#3FH MOV P2,R2 ;让数码管显示0 CLR TR0 ;关闭上一次定时,进入下一次按键判断 MOV TMOD, #01H MOV IE, #82H MOV A, P0 ;再读键盘 MOV 30H, A LCALL D10MS ;延迟10ms消除抖动 MOV A , P0 ;再读入键盘状态 CJNE A, 30H, MAI ;两次结果比较,不同是引起抖动,转向MAI JNB P0.0, N1 JNB P0.1, N2 JNB P0.2, N3 JNB P0.3, N4 JNB P0.4, N11 JNB P0.5, N6 JNB P0.6, N7 JNB P0.7, N8 N11: LJMP N5 N6: LJMP LA ;JNB的跳转范围限定在256B,所以使用LJMP跳转 N7: LJMP HAHA N8: LJMP HEHE N1: MOV DPTR, #TAB ;设定音阶1的定时时间 MOV A, #00H MOVC A, @A+DPTR MOV R1, A MOV A, #01H MOVC A, @A+DPTR MOV R0, A MOV TH0, R1 MOV TL0 ,R0 SETB TR0 MOV A,#06H MOV P2,A RE1: JB P0.0, MAI ;判断琴键1是否释放 AJMP RE1 N2: MOV DPTR, #TAB ;设定音阶2的定时时间 MOV A, #02H

MOVC A, @A+DPTR MOV R1, A MOV A, #03H MOVC A, @A+DPTR MOV R0, A MOV TH0, R1 MOV TL0, R0 SETB TR0 MOV A,#5BH MOV P2,A RE2: JB P0.1,MAI AJMP RE2 N3: MOV DPTR, #TAB ;设定音阶2的定时时间 MOV A, #04H MOVC A, @A+DPTR MOV R1, A MOV A, #05H MOVC A, @A+DPTR MOV R0, A MOV TH0, R1 MOV TL0, R0 SETB TR0 MOV A,#4FH MOV P2,A RE3: JB P0.2,N9 AJMP RE3 N9: LJMP MAI N4: MOV DPTR, #TAB MOV A, #06H MOVC A, @A+DPTR MOV R1, A MOV A, #07H MOVC A, @A+DPTR MOV R0, A MOV TH0, R1 MOV TL0, R0