基于AT89C51单片机音乐盒课程设计.doc

上传人:小飞机 文档编号:4006975 上传时间:2023-03-31 格式:DOC 页数:19 大小:558.50KB
返回 下载 相关 举报
基于AT89C51单片机音乐盒课程设计.doc_第1页
第1页 / 共19页
基于AT89C51单片机音乐盒课程设计.doc_第2页
第2页 / 共19页
基于AT89C51单片机音乐盒课程设计.doc_第3页
第3页 / 共19页
基于AT89C51单片机音乐盒课程设计.doc_第4页
第4页 / 共19页
基于AT89C51单片机音乐盒课程设计.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《基于AT89C51单片机音乐盒课程设计.doc》由会员分享,可在线阅读,更多相关《基于AT89C51单片机音乐盒课程设计.doc(19页珍藏版)》请在三一办公上搜索。

1、单片机原理及应用课程设计说明书设计题目:基于AT89C52单片机的音乐盒的设计学 院: 专业班级: 设 计 者: 学 号: 指导老师: 目 录 摘 要4第1章 概述5第2章 音乐盒的发音原理62.1 播放音乐的原理62.2 音符频率的产生62.3 节拍频率的产生8第3章 硬件电路设计93.1 硬件电路93.2 整体硬件电路103.3 原理说明 103.4 键盘按键 10第4章 软件设计114.1 程序设计流程114.2 设计源程序代码12第5章 仿真及调试165.1 调试 165.2 仿真 165.3 程序调试中出现的问题及解决的办法 17第6章 设计小结18 附录元件清单19基于AT89C5

2、2单片机的音乐盒的设计【摘要】:随着人类社会的发展,人们对视觉、听觉方面的享受提出了越来越高的要求。小小的音乐盒可以给人们带来美好的回忆,提高人们的精神文化享受。传统的音乐盒多是机械型的,体积笨重,发音单调,不能实现批量生产。本文设计的音乐盒是以单片机为核心元件的电子式音乐盒,体积小,重量轻,能演奏和旋音乐,功能多,使用方便,可以批量生产,具有一定的商业价值。【关键词】:音乐盒;单片机第1章 概述传统的音乐盒多是机械音乐盒,其工作原理是通过齿轮带动一个带有铁钉的铁桶转动,铁桶上的铁钉撞击铁片制成的琴键,从而发出声音。但是,机械式的音乐盒体积比较大,比较笨重,且发音单调。水、灰尘等外在因素,容易

3、使内部金属发音条变形,从而造成发音跑调。另外,机械音乐盒放音时为了让音色稳定,必须放平不能动摇,而且价格昂贵,不能实现大批量生产。本文设计的音乐盒,是基于单片机设计制作的电子式音乐盒。与传统的机械式音乐盒相比更小巧,音质更优美且能演奏和弦音乐。电子式音乐盒动力来源是电池,制作工艺简单,可进行批量生产,所以价格便宜。基于单片机制作的电子式音乐盒,控制功能强大,可根据需要选歌,使用方便。所放歌曲的节奏可以根据需要进行设置,根据存储容量的大小,可以尽可能多的存储歌曲。另外,可以设计彩灯外观效果,增设放歌时间、序号显示灯功能,使音乐盒的功能更加丰富,如图1-1所示。图1-1 单片机音乐盒功能框图第2章

4、 音乐盒的发音原理2.1 播放音乐的原理发音原理:播放一段音乐需要的是两个元素,一个是音调,另一个是音符。首先要了解对应的音调,音调主要由声音的频率决定,同时也与声音强度有关。对一定强度的纯音,音调随频率的升降而升降;对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音调却随强度增加而上升。另外,音符的频率有所不同。基于上面的内容,这样就对发音的原理有了一些初步的了解。 音符的发音主要靠不同的音频脉冲。利用单片机的内部定时器/计数器0,使其工作在模式1,定时中断,然后控制P3.7引脚的输出音乐。只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这

5、个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。2.2 音符频率的产生音符及定时器初始值:例如:中音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次时将产生溢出中断,进入中断服务时,每次对P3.0引脚的输出值进行取反,就可得到中音DO(523HZ)的音符音频

6、。将51单片机内部定时器工作在计数器模式1下,改变计数初值TH0,TL0以产生不同的频率。下表2-1是C调各音符频率与计数初值T的对照表: 表2-1 C调各音符频率与计数初值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/6490

7、0高5SO1568/65217低6LA441/64402中6LA882/64969高6LA1760/65252低7SI495/64526中7SI990/65031高7SI1967/65282音符、音符编码及定时器初始值:为了产生音符,必须求出音符低音5高音5的计数初值。例如C调的低1DO的THTL=65536-50000/262=63627,中音DO的THTL=65536-500000/523=64580,高音DO的THTL=65536-500000/1042=65056。为了方便写谱,对其进行简单的编码,在编程时,根据音符编码查找对应的计数初值。比如说音乐是C调的,那么出现低音的5SO,直接

8、将代码写为1;出现低音6LA,直接写一个2的代码;出现低音7SI,直接写一个3代码。表2-2 音符编码表音符音符编码音符音符编码不发音0低5SO1低6LA2低7SI3中1DO4中2RE5中3M6中4FA7中5SO8中6LA9中7SIA高1DOB高2REC高3MD高4FAE高5SOF高6LAG2.3 节拍频率的产生节拍的产生与编码:音乐中的节拍用延时时间产生。例如,1拍=0.4s,1/4拍=0.1s,以此类推。假设1/4拍执行一次延时程序,则1/2拍就执行两次延时程序,所以只要求出1/4拍的延时时间,其余节拍就是它的倍数。为了方便,将节拍数也进行了编码,并且计算了乐谱节拍编程时的延时时间,如表2

9、-3和表2-4所示。表2-3 节拍数编码表按1/4拍为一个延时时间的节拍编码与节拍对应的表按1/8拍为一个延时时间的节拍编码与节拍对应的表节拍编码节拍节拍编码节拍节拍编码节拍节拍编码节拍11/466/411/866/822/488/422/888/833/4A10/433/8A10/844/4C12/444/8C12/855/4F15/455/8表2-4 乐谱节拍编程时的时间延时表乐谱节拍1/4拍的延时时间乐谱节拍1/8拍的延时时间4/4125 ms4/462 ms3/4187 ms3/494 ms2/4250 ms2/4125 ms 音符编码和节拍编码完成后,在编程时,每个音符占一个字节,高

10、四位是音符编码,低四位是节拍编码。第3章 硬件电路设计3.1 硬件电路设计中用到了AT89C52单片机,3*3键盘,蜂鸣器等硬件电路常用元器件。3.1.1 时钟复位电路时钟电路由单片机XTAL1、 XTAL2引脚外接晶振(12MHz)及起振电容C1、C2(均为30pf)组成。如图3-1所示:图3-1 时钟复位电路3.1.2 按键输入电路 按键输入电路由3*3矩阵键盘组成, P3口作为输入控制按键,其中P3.4P3.6扫描行,P3.0P1.2扫描列。图3-2 按键输入电路3.2 整体硬件电路 如图3-3所示:图3-3 音乐盒硬件电路原理图3.3 原理说明: 当键盘有键按下时,判断键值,启动计数器

11、T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。(1)硬件电路中用P3口控制按键,其中P3.0P3.2扫描列,P3.4P1.6扫描行;(2)用P1.0口控制蜂鸣器;(3)电路为12MHz晶振频率工作,起振电路中C1,C2均为30pf。 3.4 键盘按键键盘按键分布如下: 按键功能说明:15五首歌曲6上一首歌曲7关机8暂停9下一首歌曲123456789第4章 软件设计本程序可以实现该课程设计的基本要求,并可以通过按键播放达10首歌曲。4.1 程序设计流程程序设计流程图如图4-1所示:主程序开始初始化计数器T0,计时器T1等待按键,是否有按键?包括播放键,暂停键,停止键依据按键码演奏对应的歌曲NY

12、图4-1 程序设计流程图4.2 设计源程序代码ORG 0000H LJMP MAIN ORG 000BH ;定时器T0溢出中断入口地址 LJMP TT0 ORG 001BH ;定时器T1溢出中断入口地址 LJMP T1INT ORG 1000HMAIN: MOV SP,#70H LCALL INITIL ;内存初始化WAIT: LCALL KEY LJMP WAIT KEY: ;键盘扫描 NOP NOP LCALL KS JNZ K1 ;有按键转到K1 MOV A,37H LCALL SOPXN: LJMP KEYK1: LCALL KS JNZ K2 LJMP KEYK2: ;读键盘 MOV

13、 R2,#0FEH MOV R4,#00HK3: MOV A,R2 MOV P3,A MOV A,P3 JB ACC.4,L1 ;为1跳转,第一行无按键 MOV A,#01H LJMP LKL1: JB ACC.5,L2 MOV A,#04H LJMP LKL2: JB ACC.6,NEXT1 MOV A,#07HLK: ADD A,R4 PUSH ACCK4: LCALL DELAY1 LCALL KS JNZ K4 ;若同时有其他按键,则等待(同时按视为无效) MOV R3,#07H CLR A MOV R0,#30H MOV R1,#31HMM1: MOV A,R1 ;键值给37H MO

14、V R0,A INC R0 INC R1 DJNZ R3,MM1 POP ACC MOV R0,A RETNEXT1: INC R4 ;列扫描 MOV A,R2 JNB ACC.2,N2 LJMP N1N2: LJMP KEYN1: RL A MOV R2,A LJMP K3KS: MOV A,#0F0H ;判断P1口 MOV P3,A NOP NOP MOV A,P3 CPL A ANL A,#0F0H RETDELAY1:;延时2.55ms 6341us10+1031us SETB RS0DL: MOV R5,#0AHDL2: MOV R6,#63DL3: NOP NOP DJNZ R6,

15、DL3 DJNZ R5,DL2 CLR RS0 RET INITIL: ;30H37H初值为零 MOV R3,#08H MOV R0,#30HM1: MOV R0,#00H INC R0 DJNZ R3,M1 CLR P1.0 RET;按键值播放歌曲SOP: MOV A,37H CJNE A,#01H,A11 MOV 52H,#HIGH TABLE10 MOV 53H,#LOW TABLE10 LCALL MAIN0A11: CJNE A,#02H,A22 MOV 52H,#HIGH TABLE20 MOV 53H,#LOW TABLE20 LCALL MAIN0A22: CJNE A,#03

16、H,A33 MOV 52H,#HIGH TABLE30 MOV 53H,#LOW TABLE30 LCALL MAIN0 A33: CJNE A,#04H,A44 MOV 52H,#HIGH TABLE40 MOV 53H,#LOW TABLE40 LCALL MAIN0A44: CJNE A,#05H,A55 MOV 52H,#HIGH TABLE50 MOV 53H,#LOW TABLE50 LCALL MAIN0 A55: RET DELAY: MOV R4,#05D1: MOV R5,#0FFH DJNZ R5,$ DJNZ R4,D1 RET MAIN0: MOV TMOD,#11H

17、 ; 播放歌曲程序 MOV IE,#8AH MOV TH1,#3CH MOV TL1,#0B0H LCALL KS JNZ TTM12 MOV 40H,#00HNEXT20: MOV A,40H MOV DPH,52H MOV DPL,53H MOVC A,A+DPTR MOV R2,A JZ STOP ANL A,#0FH MOV R1,A MOV A,R2 SWAP A ANL A,#0FH JNZ SING CLR TR0 JMP W1SING: DEC A MOV 22H,A RL A MOV DPTR,#TABLE00 MOVC A,A+DPTR MOV TH0,A MOV 21H,

18、A MOV A,22H RL A INC A MOVC A,A+DPTR MOV TL0,A MOV 20H,A SETB TR0 SETB TR1W1: LCALL DELAY30 INC 40H LCALL KS ;有键跳出 JNZ STOP LJMP NEXT20STOP: CLR TR0 CLR TR1 CLR P1.0 LJMP MAIN0 TTM12: LCALL K2 MOV A,37H CJNE A,#08H,TTM13 ;暂停 CLR TR1 CLR P1.0 LCALL DELAY1TTM120: LCALL KS LCALL DELAY1 JZ TTM120 LCALL

19、K2 MOV A,37H CJNE A,#08H,TTM120 SETB TR1 LJMP NEXT20TTM13: CJNE A,#09H,TTM14 ;下一曲 MOV A,52H INC A MOV 52H,A MOV A,53H INC A MOV 53H,A MOV A,36H INC A MOV 37H,A LJMP TTM2TTM14: CJNE A,#06H,TTM2 ; 上一曲 MOV A,52H DEC A MOV 52H,A MOV A,53H DEC A MOV 53H,A MOV A,36H DEC A MOV 37H,A TTM2: RETTT0: PUSH ACC

20、; 定时器中断子程序0 PUSH PSW MOV TL0,20H MOV TH0,21H CPL P1.0 ;获得脉冲 POP PSW POP ACC RETI;定时器中断子程序1T1INT: MOV TH1, #3cH MOV TL1, #0b0H RETIDELAY30: MOV R7,#2W2: MOV R4,#125W3: MOV R3,#248 DJNZ R3,$ DJNZ R4,W3 DJNZ R7,W2 DJNZ R1,DELAY30 RETTABLE00: DW 64580,64684,64777,6482 ;音符 DW 64898,64968,65030,64260 DW 6

21、4400,64524,65058,63835,64021TABLE10: ;第一首精忠报国DB 66H,52H,36H,22H,12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22HDB 32H,52H,22H,42H,38H,66H,52H,36H,22H,12H,22H,22H,32H,98HDB 24H,22H,32H,54H,52H,32H,92H,12H,92H,82H,98H,66H,52H,36H,22HDB 12H,12H,22H,32H,98H,84H,82H,92H,14H,12H,22H,32H,52H,22H,42H,38HDB 66H,

22、52H,36H,22H,12H,22H,22H,32H,98H,24H,22H,32H,54H,52H,32HDB 22H,12H,92H,82H,98H,14H,24H,34H,44H,64H,0B4H,64H,32H,52HDB 62H,0B2H,62H,52H,38H,24H,22H,32H,54H,52H,62H,52H,32H,32H,22H,38HDB 64H,0B4H,64H,32H,52H,62H,0B2H,62H,52H,38H,22H,22H,22H,32H,52H,52HDB 52H,62H,7FH,74H,04H,58H,6FHDB 00TABLE20:;第二首月亮代表

23、我的心DB 02H,82HDB 16H,32H,54H,02H,52HDB 0A6H,32H,54H,02H,52HDB 64H,74H,0B6H,64HDB 52H,5CH,32H,22HDB 16H,12H,14H,32H,22HDB 16H,12H,14H,22H,32HDB 26H,12H,94H,22H,32HDB 2CHDB 32H,52HDB 36H,22H,14H,54HDB 0ACH,92H,0A2HDB 96H,0A2H,96H,82HDB 3CH,54HDB 36H,22H,14H,54HDB 0ACH,92H,0A2HDB 16H,12H,14H,22H,32HDB 2

24、CH,02H,82HDB 16H,32H,56H,12HDB 0A6H,32H,56H,52HDB 66H,72H,0B6H,62HDB 62H,52H,58H,32H,22HDB 16H,12H,14H,32H,22HDB 16H,12H,14H,22H,32HDB 26H,92H,0A4H,12H,22HDB 1CHDB 00TABLE30: ; 第三首大海DB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24H DB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,

25、52H,64H,52H,32HDB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,94H,1CHDB 82H,92H,12H,14H,12H,14H,92H,82H,12H,14H,22H,14H,92H,12H,22H,24HDB 22H,24H,12H,92H,22H,24H,32H,24H,32H,52H,62H,54H,52H,64H,52H,32HDB 22H,32H,22H,12H,94H,82H,92H,12H,14H,12H,14H,22H,12H,1CH,32H,52HDB 62H,64H,62H,64H,0B2H,62H,52H,5

26、4H,62H,54H,32H,22HDB 12H,14H,12H,14H,24H,3CH,32H,22H,12H,14H,12H,14H,0B2H,62H,52H,54H,62H,54H,32H,52HDB 66H,0B2H,0B4H,62H,52H,5CH,32H,52H,62H,64H,62H,64H,0B2H,62H,52H,54HDB 62H,54H,32H,22H,12H,14H,12H,14H,54H,3CH,32H,22H,12H,14H,12H,14H,22H,32HDB 52H,54H,32H,54H,32H,52H,6FH,04H,02H,92H,32H,24H,12H,1

27、FHDB 00TABLE40: ;第四首彩云追月 DB 86H,92H,12H,22H,32H,52H,68H,63H,52H,34H,62H,0B2H,0B2H,62H,51H,61H,51H,31H,54H DB 62H,0B2H,0B2H,62H,52H,32H,52H,52H,51H,61H,51H,31H,34H,52H,62H,74H,32H,52H,52H,32HDB 21H,31H,21H,11H,24HDB 32H,52H,52H,32H,22H,12H,24H,32H,52H,52H,32H,62H,52H,61H,51HDB 31H,21H,21H,31H,21H,11H

28、,1CHDB 21H,31H,22H,23H,31H,21H,18H,02H,0B2H,0BCH,0B4H,72H,61H,51H,72H,61HDB 71H,61H,51H,61H,71H,61H,6FHDB 86H,94H,12H,22H,32H,52H,64H,62H,51H,31H,52H,21H,31H,21H,33H,62H,0B2H,0B2H,62HDB 51H,61H,51H,31H,54HDB 62H,0B2H,72H,61H,51H,51H,61H,51H,31H,54H,61H,0B2H,72H,61H,51H,51H,61H,51H,31H,32HDB 21H,11H,

29、32H,51H,61H,54HDB 02H,32H,24H,32H,52H,52H,32H,22H,31H,21H,11H,24H,32H,52H,62H,0B2H,72H,61H,51H,61HDB 51H,31H,32H,52H,52H,32H,62HDB 51H,31H,31H,21H,11H,91H,23H,31H,21H,1CH,12H,24H,32H,62H,51H,31H,34H,0B4H,72HDB 61H,51H,63H,71H,64HDB 0B2H,54H,72H,62H,71H,61H,54H,61H,51H,31H,21H,34H,73H,61H,54H,22H,32H

30、,52H,22H,36HDB 52H,62H,61H,31H,32H,21H,11H,21H,11H,91H,81HDB 94H,52H,62H,52H,42H,32H,22H,32H,52H,0B4H,74H,64H,52H,61H,51H,41H,5CH,02H,52H,0B4H,74HDB 63H,51H,61H,51H,31H,21HDB 00TABLE50: ;第五首看我七十二变DB 0D4H,84H,94H,82H,92HDB 12H,22H,82H,92H,02H,92H,82H,0D2HDB 82H,92H,14H,84H,02H,0D1H,0D1HDB 0C2H,0D2H,8

31、4H,0D2H,0D2H,82H,82HDB 84H,82H,82H,94H,82H,0D2HDB 82H,82H,82H,92H,02H,82H,82H,0D2HDB 0C4H,84H,0D4H,92H,0D2HDB 82H,0D2H,82H,92H,98HDB 04H,94H,88HDB 04H,94H,88HDB 04H,94H,88HDB 04H,94H,88H,04HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,22HDB 54H,4

32、4H,34H,12H,22HDB 34H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,92HDB 32H,32H,22H,12H,02H,92H,12H,22HDB 54H,44H,32H,22H,12H,92HDB 00END 第5章 仿真及调试5.1 调试:(1)按照第2章设计的硬件电路在proteus软件内画好电路图。(2)打开单片机软件开发系统keil,选择AT89C51单片机,在其中编写程序,运行生成一个hex文件。(3)电路检查无误后,双击AT89C51单片机,打开编辑元件对话框(如图5-1所示),将已经在keil环境

33、下调试好的程序hex文件加载到单片机上。图5-1 加载单片机程序5.2 仿真:(1)按下1-5中的某一按键,蜂鸣器播放当前乐曲。(2)按下6键,则蜂鸣器响起上一首乐曲。(3)按下9键,则蜂鸣器响起下一首乐曲。(4)按下8键,则蜂鸣器停止当前音乐的播放再次按下8键后,音乐继续播放。5.3 程序调试中出现的问题及解决的办法:1 有时会出现程序一点错误也没有,但就是不能正常运行的现象,最后我们发现是因为程序中有的指令书写得不规范导致的,例如有的RET返回指令一定要按正确格式书写或在两行指令间最好不要留空行。2 程序中的跳转指令的运用很重要,为保险起见,都用LJMP,我们就遇到过跳转指令用错程序无法正

34、常运行的现象。当用JNZ指令时,跳转范围比较少,这时要用一个标号中转。3 编程时要注意,在程序开始时,要写入各定时器中断的入口地址。4 编程过程中要注意加注释或分割线,否则,在程序过长时容易变得很乱,不便于查找或更改。5 程序的结构要设计的合理,避免上下乱调用的现象,这样会使程序更加清晰化。6 编程前要加流程图,这样会使思路清晰,如设计思路完全可以按着MP3的工作方式列写流程图。7 两个定时器同时工作,存在中断时序问题,刚开始时我们把定时器1设定在方式3,计250us,由于定时中断过于频繁,使CPU负载过大,导致音乐不能正常播放,时间不能正常显示。解决办法:将定时器1设定在工作方式1,16位计

35、数,计50ms,效果有很大改观。8 在歌曲中,当遇到一个音符发音为4拍,在编曲中为*CH,托因时间较长,当定时器T1此时来中断时,就会对歌曲播放产生影响,若改为发音一拍,中断对歌曲播放影响减弱,但音乐效果变差。9 改进方案:若采用可以定时时间更长的单片机,可以避免其中的一些问题。第6章 设计小结1 本学期学习单片机的时间很短,对单片机的硬件设计,软件设计掌握的深度不够,但通过此次课程设计,却改变了很多。 首先,对于硬件电路的工作原理有了进一步的学习,同样就有了进一步的认识;其次,软件方面,在程序的设计,程序的调试方面都学到了很多东西。2. 在一个好的氛围里才能踏下心来做东西,在这几天课程设计的

36、时间里,大家努力的氛围对我的影响很大,这也是我能完成课程设计的动力。另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误,克服困难,我也是这么做的,这在课程设计中十分重要。3. 在大学课堂的学习只是纯理论的专业知识,而我们应该把所学的用到现实生活中去,此次的音乐盒设计给我奠定了一个实践基础,我会在以后的学习、生活中磨练自己,使自己适应社会激烈的竞争。附录:元器件清单:名 称数量(个)型号/参数备 注单片机1AT89C51按键开关10BUTTON普通电阻410K(1个),1K(2个),100(1个)电容330pf(2个),10uf(1个)晶振112MHz三极管1PNP蜂鸣器1SPEAKER

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号