《单片机课程设计《数字音乐盒的设计》(共31页).doc》由会员分享,可在线阅读,更多相关《单片机课程设计《数字音乐盒的设计》(共31页).doc(31页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上单片机原理及接口技术课程设计报告课题名称: 数字音乐盒的设计学院:自动控制与机械工程学院专业:机械设计制造及其自动化班级:姓名:时间:2012年1月目录 1.概述.2 1.1设计任务.2 1.2设计内容.2 .2 .3 3.3 硬件电路图及功能.54.软件设计.5 4.1软件程序设计.5 4.1.1 程序流程图.5 4.1.2 程序源代码(见附录A).64.2音乐程序的设计原理.7 4.2.1 建立音乐的步骤.7 4.2.2 单片机音乐的产生原理.7 7. 附录B C调各音符频率与计数值T的对照表.28附录C简谱对应的简谱码、T值、节拍数.291. 概述本设计是以AT
2、89C51芯片的电路为基础,外部加上放音设备,以此来实现音乐演奏控制器的硬件电路,通过软件程序来控制单片机内部的定时器使其演奏出优美动听的音乐。用户可以按照自己的喜好选择音乐并将其转化成机器码存入单片机的存储器中。对于不同型号的单片机只需要相应的改变一下地址即可。该软、硬件系统具有很好的通用性,很高的实际使用价值,为广大的单片机和音乐爱好者提供了很好的借鉴。1.1 设计任务设计一个基于MCS-51系列单片机AT89C51系列单片机的音乐盒,利用按键切换演奏出不同的乐曲。蜂鸣器发出某个音调,使用两个按键,一个用来选择上一首歌曲,另一个切换下一首歌曲。1.2 设计内容音乐盒可以经常发出宜人的音乐旋
3、律,能给生活增加不少的乐趣。用51系列单片机设计一个音乐盒。功能如下:1利用I/O口产生一定频率的方波,驱动蜂鸣器,发出不同的音调,从而演奏乐曲(最少三首乐曲,每首不少于30秒)。2采用LCD显示信息,显示乐曲编号,播放时间或剩余时间,开机时有英文欢迎提示字符。3. 可通过功能键选择乐曲,暂停,播放。2. 系统总体方案介绍2.1 系统组成框图音乐盒的系统结构以AT89C51单片机位控制核心,加上几个按键、时钟复位电路、蜂鸣器、LCD模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐播放|暂停的样式以及蜂鸣器发音。系统组成框图如图2.1所示。图2.1 系统组成框图2.2 音乐盒的
4、功能结构图音乐盒的功能结构如图2.2所示。13号开关负责切换播放歌曲,播放歌曲共3首,分别是同一首歌、世上只有妈妈好和精忠报国。4、5号开关负责切换歌曲:上一首和下一首,6号开关负责歌曲的暂停和播放,7号开关是开机键。 开始歌曲的暂停|播放歌曲选择13图2.2 音乐盒功能结构图3. 硬件设计AT89C5124按键文字型LCD(162)蜂鸣器电源3.1 总体设计框图图3.1当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱 动蜂鸣器,放出乐曲。同时启动定时器T1,显示乐曲播放的时间,并驱动LCD,显示歌曲号及播放时间。也可在LED显示歌曲号。3.2各部分硬件设计及其原理 3.2.
5、1 按键电路设计按键电路如图3.2所示:P1.0-P1.5控制按键,其中P1.0-P1.1扫描行,P1.4-P1.5扫描列。图3.2 按键电路 3.2.2 LCD显示电路设计与原理如图3.3所示文字型LCD(162)的D0-D07端口与AT89C51端口P0.0-P0.7相连接VSS与VEE两端接地。P2.0-P2.2作为LCD的RS,R/W,E的控制信号。用P0.0-P0.7作为LCD的D0-D7的控制信号。图3.3 LCD显示电路 3.2.3 时钟振荡电路AT89C51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反
6、馈元件的片外石英晶体或者陶瓷谐振器一起构成自然振荡器。外接石英晶体及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。对外接电容C1,C2虽然没有什么严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性。如果使用石英晶体,我们推荐电容使用30PF10PF,而如果使用陶瓷振荡器建议选择40PF10PF。用户也可以采用外部时钟。采用外部时钟的电路如图示。这种情况下,外部时钟脉冲接到XTAL1端,即内部时钟发生器的输入端,XTAL2则悬空。由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以对外部时钟信号的占空比没有特殊要求,但最小高电
7、平持续时间和最大的低电平持续时间应符合产品技术条件的要求。振荡器电路图如下:图3.4 单片机内部、外部振荡电路3.3 硬件电路图及功能总体硬件电路实现功能如下,如图3.5所示电路中用P1.0P1.5控制按键。P0.0P0.7控制LED。P3.0控制蜂鸣器。电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。图3.5 硬件电路图4. 软件设计4.1 软件程序设计4.1.1 程序流程图主程序流程图4.1.2 程序源代码(见附录A)4.2音乐程序的设计原理4.2.1 建立音乐的步骤1. 先把乐谱的音符找出,然后建立T值表的顺序。2. 把T值表建立在TABLE1,构成发音符是计数值放在“T
8、ABLE”。3. 简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序的“TABLE”处。4.2.2 单片机音乐的产生原理1.要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚上得到此频率的脉冲。2.利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法。3.例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每计数9
9、56次时将I/O反相,就可得到中音DO(523Hz)。计数脉冲值与频率的关系公式如下: N=Fi2Fr N:计数值; Fi:内部计时一次为1us,故其频率为12MHz; Fr:要产生的频率;4.其计数值的求法如下: T=65536-N=65536-Fi2Fr 例如:设K=65536,F=Fi=1MHz,求低音DO(261MHz)、中音DO(523MHz)、音DO(1046MHz)的计数值。 T=65536-N=65536-Fi2Fr=65536-2Fr=65536-/Fr 低音DO的T=65536-/262=63627 中音DO的T=65536-/523=64580 高音DO的T=65536-
10、/1047=650595.C调各音符频率与计数值T的对照表如附录表B所示。专心-专注-专业表4-1 节拍与节拍码对照节 拍 码节 拍 数节 拍 码节 拍 数11/4拍11/8拍22/4拍21/4拍33/4拍33/8拍41拍41/2拍51又1/4拍55/8拍61又1/2拍63/4拍82拍81A2又1/2拍A1又1/4拍C3拍C1又1/2拍F3又3/4拍表4-2各调1/4节拍的时间设定 各调1/4节拍的时间设定曲 调 值DELAY曲 调 值DELAY调1/4125毫秒调4/462毫秒调3/4187毫秒调3/494毫秒调2/4250毫秒调2/4125毫秒1/4拍的延迟时间=187毫秒DELAY: M
11、OV R7,#02D2: MOV R4,#187 别的延迟值,只需修改这儿的值为相应值,即可。D3: MOV R3,#248 DJNZ R3,$ DJNZ R4,D3 DJNZ R7,D2 DJNZ R5,DELAY 节拍值放在R5,决定节拍 RET相关知识:每一音符使用1个字节,字节的高4位代表音符的高低,低4位代表音符的节拍,节拍与节拍码的对照如表4-1所示。 节拍与节拍码的对照。如果1拍为0.4秒,1/4拍是0.1秒,只要设定延迟时间就可求得节拍的时间 。假使1/4拍为1DELAY,则1拍应为4DELAY,以此类推。所以只要求得1/4拍的DEALY时间,其余的节拍就是它的倍数,如附录表B
12、所示为1/4和1/8节拍的时间设定简 谱 发 音 简 谱 码 T值。5. 调试5.1 检查硬件连接在PROTUES检查各硬件管脚是否连接正确,线路逻辑是否正确,例如:晶振电路的连接,复位电路是否设计正确。5.2 检查软件系统1根据系统的原理结构检查各流程图是否正确,再根据流程图来检查程序是否也正确。2将所有程序组织起来,在软件环境下运行,检查程序是否正确。通过对硬件和软件系统的认真检查,反复测试,如果没有出现问题即可把源程序编译成HEX文件装载到单片机中,对硬件进行仿真。5.3 测试结果5.3.1总体运行图图5.1 系统总体运行图6. 课程设计体会这学期学习单片机的课时不多,对单片机的硬件设计
13、,软件设计掌握的深度不够,但通过此次课程设计,明显的改善了,首先对于硬件电路的工作原理有了进一步的学习,同时有了一个提升;软件方面,在程序的设计,程序的调试方面都有了很大的进步。 在一个好的氛围里才能踏下心来做东西,在这一段时间里,同学们都认真对待这次课程设计,除了自己做好自己的课题外,在遇到不懂的地方互相讨论,查阅资料,互助解决问题。另外在编程中出现问题时,一定要戒骄戒躁,脚踏实地,认真看书,仔细分析,仔细调试,就一定会发现错误。我们也是这么做的,这一点在这次的课程设计中十分重要。通过这次课程设计,我体会到了成功的喜悦,听着自己设计的程序下载到单片机中播放出音乐,心理非常自豪。这次的课程设计
14、在一定程度上改变了我学习单片机这门课程的态度,从最初的认为学它没有什么实际意义,到如今爱上单片机学习,并希望能将理论运用到实践,设计出更好更完整的系统。我明白了一个人要想做好一件事,就必须具备自信心,耐心,还要有毅力,要胆大心细,要勇于尝试,要手脑并用,最后才能交出一份令人满意的答卷。对我而言,知识上的收获重要,精神上的丰收更加。让我知道了学无止境的道理。我们每一个人永远不能满足于现有的成就,人生就像在爬山,一座山峰的后面还有更高的山峰在等着你。挫折是一份财富,经历是一份拥有。这次课程设计必将成为为我人生旅途上一个非常美好的回忆在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完
15、成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!7. 参考文献 1 吴亦峰,陈德伟,单片机原理与接口技术,北京:电子工业出版社,2010年11月 2 黄智伟 全国大学生电子设计竞赛系统设计M,北京:北京航空航天大学出版社,2006.6. 3 黄智伟 凌阳单片机课程设计指导M,北京:北京航空航天大学出版社,2006.11. 4 李广弟,朱月秀,王秀山.单片机基础M,北京:北京航空航天大学出版社,2001.7. 5 赵曙光,郭万有,杨颂华.可编程逻辑器件原理开发与应用M,西安:西安电子科技大学, 2000. 6 候伯亨.VHDL硬件描述语言与数字逻辑电路设计M, 西安:
16、西安电子科技大学出版社, 1999. 7 康华光. 模拟电子技术基础(第四版)M, 武汉:华中理工大学出版社,1999.附录A 程序源代码及注释RS BIT P2.0;定义液晶显示端口标号RW BIT P2.1E BIT P2.2;*L50MS EQU 60H L1MS EQU 61HL250MS EQU 62HSEC EQU 65HMIN EQU 64HHOU EQU 63HORG 0000H ;*LJMP MAINORG 000BHLJMP TT0ORG 001BHLJMP T1INTORG 1000HMAIN: ;-;液晶初始化MOV SP,#70H ;设置堆栈指针MOV P0,#01H
17、 ;清屏CALL ENABLE ;调用延时程序MOV P0,#38H ;8位,2行显示LCALL ENABLEMOV P0,#0FH ;屏显ON,光标ON,闪烁ONLCALL ENABLEMOV P0,#06H ;计数地址加1,显示幕ONLCALL ENABLE;-内存初始化LCALL INITIL ;-KEY1:LCALL KEYLCALL MODD LJMP KEY1;-键盘扫描KEY:NOPNOPLCALL KSJNZ K1 ;有按键转到K1LCALL KAIJILCALL SOPXN:LJMP KEYK1:LCALL MODDLCALL MODDLCALL KSJNZ K2LJMP K
18、EYK2:MOV R2,#0FEH ;读键盘MOV R4,#00HK3:MOV A,R2MOV P1,AMOV A,P1JB ACC.4,L1 ;为1跳转,第一行无按键MOV A,#00HLJMP LKL1:JB ACC.5,NEXT1MOV A,#0CH;-LK:ADD A,R4PUSH ACCK4:LCALL DELAY1 ;若同时有其他按键,则等待LCALL KSJNZ K4;-MOV R3,#07H CLR AMOV R0,#30HMOV R1,#31HMM1:MOV A,R1MOV R0,AINC R0INC R1DJNZ R3,MM1POP ACCMOV R0,A RET;-NEX
19、T1:INC R4 ;-列扫描MOV A,R2JNB ACC.3,N2LJMP N1N2:LJMP KEYN1:RL AMOV R2,ALJMP K3;-KS:MOV A,#0F0H ;判断P1口MOV P1,ANOPNOPMOV A,P1CPL AANL A,#0F0HRET;-DELAY1:SETB RS0DL:MOV R5,#0AHDL2:MOV R6,#63DL3:NOP NOPDJNZ R6,DL3DJNZ R5,DL2 CLR RS0 RET;- ;30H-37H初值为零;-INITIL: MOV R3,#08HMOV R0,#30HM1:MOV R0,#00HINC R0DJNZ
20、 R3,M1 RET;-;显示 ;-MODD: MOV P0,#8EHLCALL ENABLE MOV A,37HMOV DPTR,#TABLE3 MOVC A,A+DPTRLCALL WRITE2 RET;-;开机提示字;-KAIJI:MOV A,37HCJNE A,#0FH,DFFMOV P0,#80H ;设光标地址 LCALL ENABLEMOV DPTR,#TABLE1;写数据LCALL WRITE1 DFF:RET;-;按键值播放歌曲;-SOP:MOV A,37HCJNE A,#01H,A11LCALL MODDMOV 52H,#HIGH TABLE10MOV 53H,#LOW TA
21、BLE10LCALL INITILE2LCALL MAIN0A11:CJNE A,#02H,A22LCALL MODDMOV 52H,#HIGH TABLE20MOV 53H,#LOW TABLE20 LCALL INITILE2 LCALL MAIN0A22:CJNE A,#03H,AAALCALL MODDMOV 52H,#HIGH TABLE30MOV 53H,#LOW TABLE30 LCALL INITILE2 LCALL MAIN0 AAA:RET ;*INITILE2:MOV L50MS,#20MOV L1MS,#00HMOV L250MS,#00HMOV SEC,#00HMOV
22、 MIN,#00HMOV HOU,#00HMOV A,HOUMOV B,#10DIV ABADD A,#30H ;将BCD吗转化为ASIIC码MOV P0,#0C8H ;显示小时十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0C9H ;显示小时个位CALL ENABLECALL WRITE2MOV A,#3AHMOV P0,#0DH ;显示冒号CALL ENABLECALL WRITE2MOV A,MINMOV B,#10DIV ABADD A,#30HMOV P0,#0CBH ;显示分十位CALL ENABLECALL WRITE2MOV
23、A,BADD A,#30HMOV P0,#0CCH ;显示分个位CALL ENABLECALL WRITE2MOV A,#3AHMOV P0,#0CDH ;显示冒号CALL ENABLECALL WRITE2MOV A,SECMOV B,#10DIV ABADD A,#30H MOV P0,#0CEH ;显示秒十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位CALL ENABLECALL WRITE2MOV P0,#0C0H ;设光标地址 CALL ENABLEMOV DPTR,#TABLE2;写数据CALL WRITE1
24、 RET;*写指令ENABLE: CLR RSCLR RWCLR ELCALL DELAY SETB ERET;*写数据WRITE1:MOV R1,#00HA1:MOV A,R1MOVC A,A+DPTRCALL WRITE2INC R1CJNE A,#0FEH,A1 ;未到字符串末尾继续RETWRITE2:MOV P0,ASETB RSCLR RWCLR ECALL DELAYSETB ERET;*延时DELAY:MOV R4,#05D1:MOV R5,#0FFHDJNZ R5,$DJNZ R4,D1RET ;-显示开机,查表TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92
25、H,82H,0F8HDB 80H,90H,88H,83H,0C6H,0A1H,86H,8EHTAB1:DB 89H,86H,0C7H,0C7H,0C0HTAB2:DB 0C6H,88H,0C0HTABLE1:DB WELCOME! ,0FEHTABLE2:DBDFF WB ,0FEHTABLE4:DB CAU,0FEHTABLE3:DB 30H,31H,32H,33H DB 34H,35H,36H,37H;-;播放歌曲程序;-MAIN0:MOV TMOD,#11HMOV IE,#8AH MOV TH1,#3CHMOV TL1,#0B0H LCALL KSJNZ TTM12 MOV 40H,#0
26、0H;-NEXT20:MOV A,40HMOV DPH,52HMOV DPL,53HMOVC A,A+DPTRMOV R2,AJZ STOPANL A,#0FHMOV R1,AMOV A,R2SWAP AANL A,#0FHJNZ SINGCLR TR0JMP W1;-SING:DEC AMOV 22H,ARL AMOV DPTR,#TABLE00MOVC A,A+DPTRMOV TH0,AMOV 21H,AMOV A,22HRL AINC AMOVC A,A+DPTRMOV TL0,AMOV 20H,ASETB TR0SETB TR1W1:LCALL DELAY30INC 40HLCALL
27、KS ;-有键跳出JNZ STOPLJMP NEXT20;-STOP:CLR TR0CLR TR1LJMP MAIN0 ;-TTM12:LCALL K2MOV A,37HCJNE A,#0EH,TTM13CLR TR1LCALL DELAY1TTM120:LCALL KSLCALL DELAY1JZ TTM120LCALL K2MOV A,37HCJNE A,#0EH,TTM120SETB TR1LJMP NEXT20TTM13:CJNE A,#0CH,TTM14MOV A,52HINC AMOV 52H,AMOV A,53HINC AMOV 53H,AMOV A,36HINC AMOV 37
28、H,ALJMP TTM2TTM14:CJNE A,#0DH,TTM2MOV A,52HDEC AMOV 52H,AMOV A,53HDEC AMOV 53H,AMOV A,36HDEC AMOV 37H,A;- TTM2:RET;*;定时器中断子程序0;*TT0:PUSH ACCPUSH PSWMOV TL0,20HMOV TH0,21HCPL P3.0POP PSWPOP ACCRETI;*;定时器中断子程序1;*T1INT: MOV TH1, #3CHMOV TL1, #0B0HDJNZ L50MS,X4MOV L50MS,#20;*-每秒种时钟刷新秒显示一次SECSET:MOV A,SE
29、CMOV B,#10DIV ABADD A,#30H MOV P0,#0CEH ;显示秒十位LCALL ENABLELCALL WRITE2MOV A,BADD A,#30HMOV P0,#0CFH ;显示秒个位LCALL ENABLELCALL WRITE2MOV A,SECINC AMOV SEC,AXRL A,#60X4:JNZ OUTMINSET:MOV SEC,#00H ;*每分钟刷新分显示一次MOV A,MININC AMOV MIN,A MOV B,#10DIV ABADD A,#30HMOV P0,#0CBH ;显示分十位LCALL ENABLELCALL WRITE2MOV
30、A,BADD A,#30HMOV P0,#0CCH ;显示分个位LCALL ENABLELCALL WRITE2MOV A,MIN MOV B,#3MUL ABMOV B,#100DIV ABMOV R2,AMOV A,#10XCH A,BDIV ABMOV A,MINXRL A,#60JNZ OUTHOUSET:MOV MIN,#00H ;*每小时刷新小时显示一次 MOV A,HOUMOV B,#10DIV ABADD A,#30H ;将BCD吗转化为ASIIC码MOV P0,#0C8H ;显示小时十位CALL ENABLECALL WRITE2MOV A,BADD A,#30HMOV P0
31、,#0C9H ;显示小时个位CALL ENABLECALL WRITE2MOV A,HOUINC AMOV HOU,AXRL A,#10JNZ OUTSJMP OVERFLOWOUT:RETI;*溢出处理OVERFLOW:MOV L50MS,#20MOV L1MS,#00HMOV L250MS,#00HMOV SEC,#00HMOV MIN,#00HMOV HOU,#00HRETI;-DELAY30: ;延时子程序MOV R7,#2W2:MOV R4,#125W3:MOV R3,#248DJNZ R3,$DJNZ R4,W3DJNZ R7,W2DJNZ R1,DELAY30RET;-TABLE
32、00: ;决定音调的定时初值DW 64580,64684,64777,64820DW 64898,64968,65030,64260DW 64400,64524,65058,63835,64021;-;第一首同一首歌;-TABLE10:DB 88H,14H,24H,36H,42H,34H,14H,28H,14H,94HDB 1FH,88H,14H,24H,34H,32H,42H,54H,14HDB 46H,32H,54H,22H,32H,32H,22H,2CH,38H,54H,74HDB 76H,62H,68H,54H,52H,62H,74H,62H,52H,3FHDB 46H,42H,54H,64H