片机及DSP课程设计报告.doc_第1页
片机及DSP课程设计报告.doc_第2页
片机及DSP课程设计报告.doc_第3页
片机及DSP课程设计报告.doc_第4页
片机及DSP课程设计报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

一、课设目的1、通过本设计,能综合运用单片机技术原理与应用、DSP原理与应用C语言程序设计以及数字电路、模拟电路等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。2、学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。3、了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。二、课设内容 设计一个基于单片机的音乐播放器,在播放音乐的同时并能显示播放的歌曲序号,同时可以实现上一曲、下一曲的转换;在播放的同时,还能实现暂停开始的功能。3、 问题分析、方案的提出、设计思路及原因 要想使播放器发出响声,就得设计一个能产生声响的程序,让单片机输出到扬声器。音调的高低用音阶表示,不同的音阶对应不同的频率。因此,不同频率的方波就可以产生音阶。由于频率的倒数是周期,因此可由单片机中的定时控制方波周期,当定时器计数溢出时产生中断。将与扬声器连接就可得到方波的周期,从而达到了控制频率,即音阶的目的。通过TXAL1 与TXAL2输入时钟信号,通过p1.0p1.7输出控制现实控制信号显示,有p3.2、p3.3与p3.5分别作为上一曲、下一曲和开始暂停的控制输入。显示电路是一个8位共阴极LED数码管。 单片机的P0.0-P0.7分别与数码管的A、B、C、D、E、F、G、DP相连接。晶振电路由两个1nF的电容和一个6Mhz的晶体振荡器组成。节点1与单片机的XTAL2相连接,节点2与单片机的XTAL1相连接,从而为单片机提供时间信号,为音乐的播放节拍控制提供基本时间单位:当晶体振荡频率为6.MHz,定时器工作在方式1下时,若各音阶相对应的定时器计数初值为X,则可根据下式计算X:控制电路,键一与p3.2相连、键二与p3.3相连、键3与p3.5相连。当电键按下时接口接低电平,从而实现对音乐播放器的控制。键一联通实现上一曲更换,键发声电路由数字扬声器连接p2.0接口实现音乐的输出,由控制电路发出操作指令后,单片机调用相应程序,并将音乐信号由p2.0口输出,通过驱动扬声器发出美妙的音乐。二联通实现下一曲更换,键三联通实现开始暂停操作。四、电路设计及功能说明,硬件原理框图及电路图 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS 8位微处理器,俗称单片机。总原理图51单片机显示电路电源电路键控电路复位电路晶振电路发声电路时钟电路与振荡器共同产生单片机所需的工作时钟信号功能选择电路实现播放器的功能操作显示电路实现单片机的信息显示功能开始4、 软件部分的程序流程图,算法和使用的编程技巧;初始化查询歌曲曲目上一曲、下一曲数码管显示暂停、播放等待播放关闭显示播放音乐判断是否结束?否 是结束1、总体思路主程序实现对单片机进行初始化后,进入曲目识别子程序,进行歌曲曲目判断。确定歌曲曲目后,数码管再进行显示。然后,子程序对是否播放进行循环判断,得到播放中断的指令后再进行播放。执行播放后,关闭数码管显示并调用查表子程序进行播放音乐。在播放音乐的过程中,查表子程序循环判断音乐是否结束。当音乐结束时,程序跳转回曲目识别子程序。5、 源程序清单OUT BIT P2.0 ;定义音频输出端口,p2.0N EQU 3;歌曲总数OUT_NUM EQU P1;数码管显视当前所放歌曲曲数 ORG 0000H AJMP MAIN ORG 0003H AJMP LAST_SONG ;外部中断0用于接上一曲歌按键 ORG 000BH AJMP F_T0 ;定时器0用于定时,作音符发生器用 ORG 0013Hq4: AJMP NEXT_SONG ;外部中断1接下一曲歌按键 ORG 001BH AJMP START_PAUSE ;定时器1用计数,这里用作中断,接开始/暂停键,初值为0ffH,方式2 ORG 0030HMAIN: MOV SP,#60H MOV DPTR,#TABLE ;DPRT指向每首歌曲的入口地址的地址。 MOV R0,#30H ;R0中存入数据30H,这里在以30H开始的单元存放每首歌曲的入口地址,其中30H,31H存放歌曲的节拍入口地址,32H,33H存放歌曲音符入口地址,每首歌占用四个存储存单元。 MOV R5,#00H ;R5中存放表TABLE中正在执行操作的序号 MOV R6,#1 ;R6存放正在设置入口信息的歌曲数SET_TAB: MOV A,R5 ;设置每首歌曲的入口信息,存放在以30H开始的存储单元中。 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R5 INC R0 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R0 INC R5 MOV A,R5 MOVC A,A+DPTR MOV R0,A INC R0 INC R5 INC R6 ;设置完一首歌曲后,歌曲数加一 CJNE R6,#N+1,SET_TAB ;是否设置完,没有便继续,否则进行下面的操作 ;* 对中断,计数器的相关参数进行设置 MOV TMOD, #61H ;计数器0工作方式1,计数器1工作方式2 MOV TH1,#0FFH ;给计数器1置初值0FFH,又由于是工作方式2,所以 MOV TL1,#0FFH ;计数器计数为1,相当于一外部中断。 SETB ET1 ;允许计数器1中断 SETB ET0 ;允许计数器具0中断 CLR PT0 ;计数器0为低优先级 SETB PT1 ;计数器1为高优先级 SETB IT0 ;外部中断0为跳沿触发 SETB PX0 ;高优先级 SETB IT1 ;外部中断1为跳沿触发 SETB PX1 ;高优先级 SETB EX1 ;允许外部中断1中断 SETB EX0 ;允许外部中断定0中断 SETB EA ;开中断总开关 SETB TR1 ;定时器1开始工作,作中断用 SETB OUT ;音频输出端口初始化 ;* ;设置结束 CLR F0 ;设置F0=0,用来作暂停/播放的标置位用 MOV 22H,#01H ;22H单元中存放正在播放的歌曲编号 MOV DPTR,#OUT_TAB ;将正在播放的歌曲编号送数码管显视 MOV A,22H MOVC A,A+DPTR MOV OUT_NUM,A MOV R7,#00H ;R7中存放歌曲总信息的入口地址 START0:MOV R4,#00H ;R4存放当前正在播放歌曲的第几个节拍数 MOV R0,#30H ;30H开始的单元中存放歌曲的入口信息 MOV A,R7 ;将歌曲的节拍表的入口地址送到DPTR ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR ;取出第一节拍数,其实第一个节拍不是歌曲的第一个节拍,而是表示几分音符 ;* MOV 26H,A ;将取出的音符数+节拍数保存在职26H单元中NEXT: MOV R0,#30H ;开始取出歌曲的第一个数据 MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR ;放在A中;* JZ END0 ;若为0,则表示为休止符,不唱,本次音符不唱, MOV R1,A ;不为0,取出节拍数 ANL A,#0FH MOV R2,A MOV A,R1 SWAP A ANL A,#0FH JNZ SING ;音符不为0,唱 CLR TR0 ;为0,不唱,关频率发生器 SJMP SING1 SING: DEC A ;开始唱,进行相应的数据处理 MOV R3,A RL A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOVC A,A+DPTR MOV 21H,A MOV TH0,A MOV A,R3 RL A INC A MOVC A,A+DPTR MOV 20H,A MOV TL0,A SETB TR0 ;开唱SING1:LCALL DELAY ;每个音符唱多久 JB F0,FOR ;是否暂停, AJMP NEXT ;没有暂停,继续FOR: CLR TR0 ;暂停,不唱 JB F0,$ ;等待播放 AJMP NEXT ;开始播放END0: CLR TR0 ;不唱 MOV A,22H ;唱完处理 CJNE A,#N,WW ;是不是全部歌曲都唱完 MOV 22H,#01H ;全部唱完,则从第一首开始再唱 MOV R7,#00H MOV OUT_NUM,#06H ;数码管显视第一首歌曲编号 AJMP WWWWW: MOV A,R7 ;没有全部唱完,唱下一首,歌曲的入口信息调整 ADD A,#4 MOV R7,A INC 22H CLR EA PUSH DPH PUSH DPL MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A ;数码管显视相应的歌曲编号 POP DPL POP DPHWWW: SETB EA AJMP START0 ;开始下一首的演唱F_T0: MOV TH0,21H ;定时器0置初值 MOV TL0,20H CPL OUT ;频率产生 RETINEXT_SONG: PUSH ACC ;下一曲中断程序处理,保护现场 PUSH DPH PUSH DPL CLR EA ;关中断 MOV A,22H CJNE A,#N,Q ;是最后一首吗? MOV R7,#00H ;是最后一首,则R7指向第一首,演唱第一首 MOV 22H,#01H AJMP BACK Q: INC 22H ;不是最后一首,唱下一首,R7内容加4,歌曲数加1 MOV A,R7 ADD A,#4 MOV R7,ABACK: MOV R4,#00H ;数码管显视相应的歌曲编号 MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A;* MOV B,R0 ;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A ;结果存入26H单元中 DEC R4 MOV R0,B ;恢复R0中的内容;* POP DPL ;恢复现场 POP DPH POP ACC SETB EA RETI ;中断返回LAST_SONG: PUSH ACC ;上一曲中断程序处理开始,保护现场 PUSH DPH PUSH DPL CLR EA ;关中断 MOV A,22H ;曲目数送A CJNE A,#1,QQ ;是否是第一首 MOV 22H,#N ;是第一首歌曲 MOV B,#4 ;将R7指向最后一首歌曲 MOV A,#N-1 MUL AB MOV R7,A AJMP BACK2 ;处理结束QQ: DEC 22H MOV A,R7 ;R7减4 SUBB A,#4 MOV R7,ABACK2: MOV R4,#00H MOV A,22H MOV DPTR,#OUT_TAB MOVC A,A+DPTR MOV OUT_NUM,A ;数码管显视相应歌曲的编号;* MOV B,R0;对下首要演唱的歌曲的几分拍进行调整,同时对R0中的内容进行保护 MOV R4,#00H MOV R0,#30H MOV A,R7 ADD A,R0 MOV R0,A MOV DPH,R0 INC R0 MOV DPL,R0 INC R0 MOV A,R4 INC R4 MOVC A,A+DPTR MOV 26H,A ;结果存入26H单元中 DEC R4 MOV R0,B;R0中的内容恢复;* POP DPL ;恢复现场 POP DPH POP ACC SETB EA RETI ;中断返回START_PAUSE:CPL F0 ;开始/暂停中断处理程序,将标置位取反 JB F0,RETURN ;为1返回 SETB TR0 ;为0则播放RETURN: RETI ;中断返回DELAY: MOV 27H,26H ;音符演奏时间控制D2: MOV 28H,#125D3: MOV 29H,#248 DJNZ 29H,$ DJNZ 28H,D3 DJNZ 27H,D2 DJNZ R2,DELAY RETOUT_TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H,73H ;共阴数码管显视用;OUT_TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ;共阳TABLE: DW SONG1,TABLE1,SONG2,TABLE2,SONG3,TABLE3TABLE1:DW 64580,64684,64777,64820,64898,64968,65030 DW 63628,63835,64021,64103,64260,64400,64524SONG1: DB 04H ;1=C 2/4 军港之夜DB 32H,54H,52H,32H,54H,52H,32H,12H,12H,32H,32H,54H,52H,32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24HDB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4HDB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32HDB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52HDB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 32H,52H,52H,32H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 0C2H,32H,32H,12H,21H,31H,24H,32H,34H,0D2H,0C2H,14H,14H,32H,52H,52H,32H,52H,54H,32H,34H,31H,21H,12H,24H,24HDB 34H,0E2H,0C2H,0D1H,0E1H,0D4H,12H,0E2H,32H,32H,0E2H,0D1H,0E1H,0D4H,0D2H,0E2H,32H,32H,0E2H,0E2H,0D1H,0E1H,0D4HDB 22H,0D1H,11H,0E2H,0D2H,0C4H,0C4H,32H,52H,52H,32H,62H,5H,61H,54H,31H,52H,31H,12H,31H,31H,32H,54H,52H,32H,52H,52H,32HDB 32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,34H,34H,32H,52H,52,32H,62H,51H,61H,54H,31H,52H,31H,12H,32H,12H,32H,32H,54H,52HDB 32H,52H,52H,31H,31H,32H,21H,31H,24H,0E2H,0D1H,0E1H,0D2H,0C2H,14H,14HDB 32H,52H,52H,32H,32H,21H,31H,24H,74H,0D2H,0C2H,14H,14H,14H,14HDB 00HTABLE2:DW 63835,64021,64103,64260,64400,64524,64580,64684,64777 DW 64820,64898,64968,65030,65058,65110,65157,65178SONG2: DB 02H;1=C 4/4 死了都要爱DB 04H,94HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02HDB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4HDB 04H,0C2H,0C2H,0D4H,0C2H,0D2H,0D8H,0D4H,0D2H,92HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02HDB 0A4H,0A2H,0B2H,0B4H,0C4H,0E8H,0D8HDB 0C8H,0C8H,08H,08H,78H,28H,38H,34H,24HDB 24H,64H,64H,24H,64H,72H,72H,78H,58H,54H,44H,38H,34H,14H,34H,84H,74H,74H,62H,62H,0D8H,78H,28H,38H,34H,24HDB 24H,64H,64H,24H,64H,72H,72H,72H,94H,92H,94H,0A4H,58H,58H,54H,44H ;#音不准DB 58H,58H,58H,58H,0A8H,0A8H,0A4H,0B4H,0A4H,84H,0A4H,94H,98H,98H,08HDB 84H,82H,82H,82H,82H,94H,0A2H,94H,92H,82H,74H,72H,74H,72H,72H,72H,72H,92H,91H,91H,94H,54H,74H,94H;*DB 0A8H,0A4H,0A2H,0B2H,0C4H,0B4H,0A4H,0A4H,0A4H,92H,92H,98H,82H,72H,78H,04H,0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4HDB 04H,0C4H,0D4H,0C4H,0C8H,04H,94HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92HDB 0E8H,0E4H,0E4H,0E8H,0E4H,0F4H,0D4H,0C4H,0B4H,84H,84H,92H,92H,94H,92H,02DB 0A4H,0A2H,0B2H,0B4H,0C4H,84H,82H,92H,94H,0A4H,04H,0C2H,0C2H,0D4H,0D8H,0D4H,0D2H,92H;*DB 0A4H,0A2H,0B2H,0B3H,0C4H,0E8H,0D8HDB 0C8H,0C8H,0C8H,08HDB 00H TABLE3: DW 64898,64968,65030,65086,65135,65158,65199,64260,64400,64524,64580,64684,64777,64862 SONG3: DB 03H ;G=2/4 中华人民共和国国歌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,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,52H,52H,32H,02H,12H,02H,0C4H,14H,0C4H,14H,0C4H,14H,14H,04HDB 04H,04H,04H,04HDB 00HEND;七、仿真过程综述 拿到任务书后的首先想到的是觉得这次课程设计还是比较难的,因为单片机课程的学习是在很早以前了,现在突然要用它需要在把相关知识捡起来,这需要一定的时间;而且,这次课设还需要编程,变成一直是我的弱项。但还是要认真对待,就仔细的看了所有的设计题目,根据自己的爱好和能力,我最终选择了播放器。 刚确定这个题目后觉得无从下手,不知道从什么开始做起。所以就在网上查阅了相关资料,大致浏览了一遍,看懂了几分,觉得应该从学习软件开始。因此就去图书馆借了一本相关的书,把仿真软件学了一遍并做了几个小例子练习了一下,就开始着手编程了。编程的过程是痛苦的,这需要很强的逻辑思维能力,这一部分只能耐心地慢慢来。经过查阅相关资料,和各种程序的拼凑,基本的程序是出来了,放到keil里调试时错误很多,在改错时又查阅大量的资料,曲曲折折的把程序改正好,最终形成一个.hex的文件。接下来画仿真图还是比较容易的,这一部分很轻松。当把程序加载进去开始仿真时又出现了问题,程序是对的,原理图是对的,可是一结合就是得不到想要的结果。在仔细研究,再加上和同学探讨,原来是所选择的元件有误,当把所有错误都改正以后,在仿真时就都成功了,该有的功能都有,该出现的显示也有了。 八、调试过程中的主要难点及解决思路和办法 编程调试中,用KILL将所编好的程序汇编,发现有好几处错误出现,经过仔细检查,发现一些是由于所输入的符号不是英文模式下,汇编机器无法识别,所以要将输入错误的符号在引文模式下重新输入一遍,就能改正了。 还出现了一类的错误提示是由于汇编语言

温馨提示

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

评论

0/150

提交评论