音乐盒的设计_第1页
音乐盒的设计_第2页
音乐盒的设计_第3页
音乐盒的设计_第4页
音乐盒的设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、音乐盒的设计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-2主流程图中断程序流程图NY等待中断,判断是否中断判断是否抖动Y居于上述流程图我们可以通过proteus软件画出该实验的原理图(图2-3):图2-32.1.2方案实现对于音乐盒而言发出悦耳的音乐是其最主要的功能,那么对于使用单片机来制作出来的音乐盒怎么实现音符的发声呢?通过查看资料我们知道音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制引脚的输出音乐(本实验采用P1.0做为输出引脚)。只要算出某一音频的周期(1/频

3、率),然后将此周期除以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引脚的输

4、出值进行取反,就可得到中音DO(523HZ)的音符音频。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表2-1是C调各音符频率与计数初值T的对照表: 表2-1 C调各音符频率与计数初值T的对照表音符频率(Hz)/初值()音符频率(Hz)/初值()低1DO262/63627中1DO 523/64580高1DO 1042/65056低2RE 294/63835中2RE589/64687 高2RE 1245/65134低3M 330/64021 中3M 661/64780高3M 1318/65157低4FA 350/64107中4FA700/64822 高

5、4FA 1397/65178低5SO 393/64264 中5SO 786/64900高5SO 1568/65217 低6LA 441/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/5

6、8X2 分别包含128 字节和256 字节RAM 32 条I/O 口线 3 个16 位定时/计数器 6 输入4 优先级嵌套中断结构 1 个串行I/O 口 可用于多机通信 I/O 扩展或全双工UART以及片内振荡器和时钟电路。此外,由于器件采用了静态设计,可提供很宽的操作频率范围,频率可降至0 。可实现两个由软件选择的节电模式,空闲模式和掉电模式,空闲模式冻结CPU但RAM定时器,串口和中断系统仍然工作掉电模式保存RAM的内容 但是冻结振荡器 导致所有其它的片内功能停止工作。由于设计是静态的时钟可停止而不会丢失用户数据 运行可从时钟停止处恢复。键盘系统:键盘系统的链接电路图如图2-31所示: 图

7、2-31当用手按下一个键时,往往按键在闭合位置和断开位置之间跳几下才稳定到闭合状态的情况;在释放一个键时,也回会出现类似的情况。这就是抖动。抖动的持续时间随键盘材料和操作员而异,不过通常总是不大于10ms。很容易想到,抖动问题不解决就会引起对闭合键的识别。用软件方法可以很容易地解决抖动问题,这就是通过延迟10ms来等待抖动消失,这之后,在读入键盘码。具体编码如下所示MAI: CLR TR0 ;关闭上一次定时,进入下一次按键判断MOV TMOD, #01HMOV IE, #82HMOV A, P1MOV 30H, A ;保存键盘状态值 LCALL D10MS ;延迟10ms消除抖动MOV A ,

8、 P1 ;再读键盘状态CJNE A, 30H, MAI ;两次结果不同,是抖动引起,转MAI放大电路分析如图2-4所示:图2-4放大电路输出原理图此部分的放大电路简单容易实现。可以采用一个小功率PNP型硅管9012,利用“分压 偏置式工作点稳定直流通路”,达到了对静态工作点的稳定。分压电阻分别选择1K和5.5K。蜂鸣器一端接+5V电压,一端接晶体管的发射极。由P1.0输出预定的方波,加到晶体管进行放大,再输出到嗡宁器,很好的实现了频率、声音的转换。时钟电路如图2-5所示:此系统的时钟电路设计是采用内部方式,即是利用芯片内部的振荡电路。MCS-51内部有一个用于构成振荡器的高增益反相放大器。电容

9、值选择22F,所以此系统电路的晶体振荡器的值为6 MHz。图2-5 MSC-51片内振荡电路2.1.2.2 程序的编写源程序如下所示: NUMTIM EQU 20HGEWEI EQU 21HSHIWEI EQU 22HSCANLED EQU 23HORG 0000HLJMP MAIORG 000BHLJMP TIMORG 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 ;延迟

10、10ms消除抖动 MOV A , P0 ;再读入键盘状态 CJNE A, 30H, MAI ;两次结果比较,不同是引起抖动,转向MAIJNB 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, N8N11: LJMP N5N6: LJMP LA ;JNB的跳转范围限定在256B,所以使用LJMP跳转 N7: LJMP HAHAN8: LJMP HEHEN1: MOV DPTR, #TAB ;设定音阶1的定时时间 MOV A, #00H MOVC A,

11、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,#06HMOV P2,ARE1: JB P0.0, MAI ;判断琴键1是否释放 AJMP RE1N2: 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,AR

12、E2: JB P0.1,MAI AJMP RE2N3: 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,#4FHMOV P2,ARE3: JB P0.2,N9 AJMP RE3N9: LJMP MAIN4: MOV DPTR, #TAB MOV A, #06H MOVC A, A+DPTR MOV R1, A MOV A, #07H MOVC A, A+DPTR M

13、OV R0, A MOV TH0, R1 MOV TL0, R0 SETB TR0MOV A,#66HMOV P2,ARE4: JB P0.3, A1 AJMP RE4A1: LJMP MAIN5: MOV DPTR, #TAB MOV A, #08H MOVC A, A+DPTR MOV R1, A MOV A, #09H MOVC A, A+DPTR MOV R0, A MOV TH0, R1 MOV TL0, R0 SETB TR0MOV A,#6DHMOV P2,ARE5: JB P0.4, A2 AJMP RE5A2: LJMP MAILA: MOV DPTR, #TAB MOV A

14、, #0AH MOVC A, A+DPTR MOV R1, A MOV A, #0BH MOVC A, A+DPTR MOV R0, A MOV TH0, R1 MOV TL0, R0 SETB TR0MOV A,#7DHMOV P2,ARE6: JB P0.5, A3 AJMP RE6A3: LJMP MAIHAHA: MOV DPTR, #TAB MOV A, #0CH MOVC A, A+DPTR MOV R1, A MOV A, #0DH MOVC A, A+DPTR MOV R0, A MOV TH0, R1 MOV TL0, R0 SETB TR0 MOV A,#07H MOV P

15、2,ARE7: JB P0.6,A4 AJMP RE7A4: LJMP MAIHEHE: MOV TMOD,#00000001B ;方式寄存器设置 SETB EA SETB ET0 MOV NUMTIM,#01HSTART0: MOV 30H,#00H NEXT:MOV A,30H MOV DPTR,#TABLE MOVC A,A+DPTR MOV R2,A JZ END0 ANL A,#0FH MOV R5,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 JMP D0 SING: DEC A ;开始唱 MOV 22H,A RL A MOV DPTR

16、,#TABLE1 MOVC A,A+DPTR MOV TH0,A MOV 21H,A MOV R1,A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL0,A MOV 20H,A MOV R0,A SETB TR0 MOV A,#7FH MOV P2,A D0:LCALL DELAY JB P0.7,END0 INC 30H JMP NEXT END0:CLR TR0 JB P0.7,N10 AJMP START0N10:LJMP MAI TIM:PUSH ACC PUSH PSW MOV TL0,R0 ;重装定时器初值 MOV TH0,R1 CPL P1.0

17、 POP PSW POP ACC RETI ;中断返回DELAY: MOV R7,#02H D3: MOV R4,#187 D4: MOV R3,#248 DJNZ R3,$ DJNZ R4,D4 DJNZ R7,D3 DJNZ R5,DELAY RETRE8: JB P0.7,A5 AJMP RE8A5: LJMP MAID10MS:MOV R1, #100 D1: MOV R2, #98 NOPD2: DJNZ R2, D2 DJNZ R1, D1 RETTAB: DB 0FEH, 25H,0FEH, 57H,0FEH, 84H, ,0FEH, 98H, 0FEH, 0C0H, 0FEH,

18、 0E3H, 0FFH,02H, 0FCH, 0EH ;高音音符编码 TABLE1:;计时器初始计数值DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862TABLE: ; 所放歌曲编码DB 03H DB 04H,04H,0C2H,14H,12H,12H,12H,11H,11H,0C2H,0D1H,0E1H,14H,14H,02H,32H,12H,21H,31H,52H,51H,51H,54HDB 32H,31H,31H,12H,11H,31H,52H,51H,31H,24H,

19、24H,24H,64H,54H,24H,34H,52H,34H,52H,32H,21H,31H,12H,11H,21H,34H,04HDB 52H,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,54H,54H,54HDB 12H,11H,31H,52H,51H,51H,64H,54H,32H,31H,11H,52H,52H,52H,32H,02H,12H,02H,0C4H,14HDB 0A2H,0A1H,11H,52H,52

20、H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04HDB 04H,04H,04H,04HDB 00H END2.2 方案二2.2.1 方案设计基于方案一我们知道采用的是独立的键盘做为音符的输入,方案二则采用矩阵键盘来进行输入,具体电路原理图如图2-6所示。图2-6方案二原理图2.2.2 方案实现本方案的实现基本和方案一相同,唯一不同的地方就值本实验采用矩阵键盘作为音符输入来实现。由于矩阵键盘需独立的编码,矩阵键盘的功能如下1、识别键盘有无按键按下,若无键按下返回。2、如果有键按下,找出具体的按键值(顺序码)矩阵键盘键值查找程序键值存入30H单元KEY_SCAN: ;识别键盘有无键按下子程序MOV P1,#0F0H ;置列线为0,行线为1 MOV A,P1 ;读P1口 ANL A,#0F0H ;取出高四位 MOV B,A ;暂存到B MOV P1,#0FH ;置列线为1,行线为0 MOV A,P1 ;读P1口 ANL A,#0FH ;取出低四位 ORL A,B ;高四位与低四位逻辑或

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论