目录
1.课设目的......................................................................................................
2.课设内容......................................................................................................
二.问题分析方案的提出、设计思路及原因...............................................
1.问题分析及方案的提出.......................................
2.设计思路及原因..........................................................................................
三.电路设计及功能说明,硬件原理框图及电路图(包括接口芯片简介)
1.电路设计及功能说明...................................................................................
2.硬件原理框图及电路图(包括接口芯片简介).............................................
四. 软件部分的程序流程图,算法和使用的编程技巧............................
五. 源程序清单,对关键的语句(段)要给出简洁的注释..........................
六. 仿真过程综述........................................................................................
七. 调试过程中的主要难点(自己遇到的)及解决思路和办法.................
八.课设结果及分析、收获、体会和建议..................................................
九. 参考文献(必须参照课本后面的格式写)....................
a.通过本设计,使学生综合运用《单片机技术原理与应用》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。
b.学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。
c.了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等
1.问题分析及方案的提出:目前单片机的应用渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。本课题即是在这种背景下,对基于MCS-51单片机的MP3播放器的设计与实现进行了硬件及软件的设计,并给出了一套完整的解决方案,实现了单片机MP3播放器对音乐的演奏。
2.设计的思路及原因:基于单片机的MP3播放器可应用于MP3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"Do"、"Re"、"Me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,我设计了一款特殊的"MP3播放器",本播放器可实现播放、暂停、选曲等功能。由于时间及条件限制,本设计实现了一种简单的MP3播放器,其核心器件采用AT89S52单片机,本播放器具有电路简单,功能强大,易于拓展等特点。在此基础上,可以添加按键,1602显示屏等模块,实现切换歌曲,歌名显示,动感音乐屏等功能[2]
以stc89S52为核心,通过单片机的定时器产生一定长度的方波,方波脉冲驱动扬声器发声。要产生音频脉冲,只需算出某一音频的周期(1/音频),然后取半周期的时间定时。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O口反相,就可在I/O脚上得到此频率的脉冲。当键盘有键按下时,判断键值,启动计数器T0,产生一定频率的脉冲,驱动蜂鸣器,放出乐曲。同时在LCD显示歌曲序号和歌曲名称[5]。总体如图3-1所示:
图3-1 总体方案图
2.硬件原理框图及电路图(包括接口芯片简介)
a.Stc89c52简介:
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
STC89C52引脚图、原理图,如下图所示:
STC89C52引脚具体介绍如下:
① 主电源引脚(2根)
VCC(Pin40):电源输入,接+5V电源
GND(Pin20):接地线
②外接晶振引脚(2根)
XTAL1(Pin19):片内振荡电路的输入端
XTAL2(Pin20):片内振荡电路的输出端
③控制引脚(4根)
RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。
ALE/PROG(Pin30):地址锁存允许信号
PSEN(Pin29):外部存储器读选通信号
EA/VPP(Pin31):程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。
④可编程输入/输出引脚(32根)
STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。
PO 口(Pin39~Pin32):8位双向I/O口线,名称为P0.0~P0.7 P1口(Pin1~Pin8):8位准双向I/O口线,名称为P1.0~P1.7 P2口(Pin21~Pin28):8位准双向I/O口线,名称为P2.0~P2.7 P3口(Pin10~Pin17):8位准双向I/O口线,名称为P3.0~P3.7
STC89C52主要功能,如下表所示:
主要功能特性
b.时钟振荡电路
89S52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自激振荡器。片外石英晶体或者陶瓷谐振器及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。这里我们采用电容30pF,晶振采用12MHZ。电路图如图3-2-3所示:
图3-2-3 时钟振荡电路
3.2.4 复位电路
复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
复位电路采用RC充电电路组成上电复位单片机电路,当系统上电时,在上电初期,电容C充电,使复位脚持续高电平,当C充电到达一定程度复位脚电位会慢慢变低,最后被电阻R完全拉低,高电平复位的时间由充电的时间决定,充电时间又由R与C的阻值和容值之积决定。一旦单片机复位脚拉低后就一直都低电平,只有下电后再上电才重新开始复位过程。电路图如图3-2-4所示:
图3-2-4 复位电路
本方案采用独立式按键接口设计,各按键相互独立,每个按键单独占用一根I/O口线,每根I/O口线的按键工作状态不会影响其他I/O口线上的工作状态。因此,通过检测输入线的电平状态可以很容易判断哪个按键被按下。键盘工作方式采用定时扫描方式,采用定时器T0定时,通过读取输出数据,识别按键工作状态。
键盘按键所用开关为机械弹性开关,利用了机械触点的合断作用。由于机械触点的的弹性作用,一个按键开关在闭合和断开的瞬间均有一连串的抖动。抖动时间的长短由按键的机械特性决定,一般为10~100ms。电平信号的波动,有可能令CPU误解为多次按键操作,从而引起误处理。为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响。
按键的消抖通常有软件和硬件两种消除方法。如果按键较多,硬件消抖将无法胜任,常采用软件消抖。本设计虽然按键少但还是采用常规的软件延时的方法:在第一次检测到有键按下时,执行一段延时子程序后,再确认电平是否仍保持闭电平,如果保持闭合状态电平,则确认真正有键按下,进行相应处理工作,消除了抖动的影响。
判断键盘程序流程如图3-3所示:
图3-3 键盘判断程序流程图
常见的基于单片机设计的MP3播放器基本不能显示歌曲。该音乐播放系统设计上增加液晶显示器,可为使用者提供曲目信息。由于LED数码管只能显示数字而无法显示其他中英文字符,并对成本及功能考虑,因此从设计的成本及功能的角度考虑,采用LCD-1602显示模块,它可以显示每首曲目的英文名字。LCD-1602驱动电路简单,可以由单片机直接输出命令驱动。LCD各引脚功能如图表3-4所示:
表3-4 LCD引脚功能
编号 |
符号 |
引脚说明 |
编号 |
符号 |
引脚说明 |
1 |
VSS |
电源地 |
9 |
D2 |
双向数据口 |
2 |
VDD |
电源正极 |
10 |
D3 |
双向数据口 |
3 |
VL |
对比度调节 |
11 |
D4 |
双向数据口 |
4 |
RS |
数据/命令选择 |
12 |
D5 |
双向数据口 |
5 |
R/W |
读/写选择 |
13 |
D6 |
双向数据口 |
6 |
E |
模块使能端 |
14 |
D7 |
双向数据口 |
7 |
D0 |
双向数据口 |
15 |
BLK |
背光源地 |
08 |
D1 |
双向数据口 |
16 |
BLA |
背光源正极 |
VDD:电源正极,4.5-5.5V,通常使用5V电压。
VL:LCD对比度调节端,电压调节范围为0-5V。接正电源时对比度最弱,接地电源时对比度最高,但对比度过高时会产生“鬼影”,因此通常使用一个10K的电位器来调整对比度,或者直接串接一个电阻到地。
RS:MCU写入数据或者指令选择端。MCU要写入指令时,使RS为低电平;MCU要写入数据时,使RS为高电平。
R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据。
E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块。
D0-D7:8位三态双向数据总线。如果MCU的I/O口资源紧张的话,该模块也可只使用4位数据线D4-D7接口传送数据。本充电器就是采用4位数据传送方式。
BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VDD,BLK接地,实测该模块的背光电流为50mA左右。
BLK: LED背光地端。
3.5 播放模块
通过扬声器实现发声,当三极管基级由单片机控制变成高电平时,V1导通并工作在饱和区,由于集电极和发射极之间的电压差几乎等于0,故相当于蜂鸣器的另一个脚接地,扬声器会发出声。当三极管基级由单片机控制变成高低电平时,V1不导通并工作在截止区,那么扬声器的另一个脚接到高电平,扬声器不发出蜂鸣声。可以通过改变三极管基级的开关频率来控制蜂鸣器发出各种不同频率的声音。另外,需要三极管驱动,而不能由单片机口线直接驱动,因为扬声器的工作电流比较大(大概100mA),故单片机口线不能承受。
图3-5扬声器发声模块图
1.软件部分的程序流程图
音乐发声设计原理[8]:
(1)总体原理:
一首乐曲是由多个音符构成的。每个音符都对应着一个确定的频率,乐曲中不同的音符,实质就是不同频率的声音;另外每个音符会根据乐曲的要求设定一个确定的节拍。可以控制单片机产生不同频率不同节拍的脉冲信号,由蜂鸣器发出就产生了美妙和谐的乐曲。
(2) 单片机产生不同频率脉冲信号的原理:
1)要产生音频脉冲,只要算出某一音频的脉冲(1/频率),然后将此周期除以2,即为半周期的时间,利用定时器计时这个半周期的时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期的时间再对I/O反相,就可以在I/O脚上得到此频率的脉冲。
2)利用单片机内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率的方法如下:
例如,频率为523Hz,其周期天/523 S=1912uS,因此只要令计数器计时956uS/1us=956,在每计数956次时就将I/O反接,就可得到中音DO(532Hz)。
计数脉冲值与频率的关系公式如下:
N=Fi/2/Fr
其中N表示计数值;Fi表示内部计时一次为1uS,故其频率为1MHz;Fr表示要产生的频率。
3)其计数值的求法如下:
T=65536-N=65536-Fi/2/Fr
计算举例:
设K=65536,F=1000000=Fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、 高音DO(1046Hz)的计数值。
T=65536-N=65536-Fi/2/Fr=65536-1000000/2/Fr=65536-500000/Fr
低音DO的T=65536-500000/262=63628
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1047=65059
4) 每个音符使用1个字节,字节高4位代表音符高低,低4位代表音符 节拍。假设1/4节拍为1DELAY,则1拍应为4DELAY,以此类推。只要求得1/4拍的DELAY时间,其余节拍则为它的倍数,本设计取4/4调值,延时时间为125ms,其中节拍码与实际节拍对照表4-1-1。
表4-1-1简谱对应的频率、简谱码和计数初值表
简谱 |
发音 |
频率(Hz) |
计数初值 |
简谱码 |
5 |
低音SO |
392 |
64260 |
1 |
6 |
低音LA |
440 |
64400 |
2 |
7 |
低音SI |
494 |
64524 |
3 |
1 |
中音DO |
523 |
64580 |
4 |
2 |
中音RE |
587 |
64684 |
5 |
3 |
中音MI |
659 |
64777 |
6 |
4 |
中音FA |
698 |
64820 |
7 |
5 |
中音SO |
784 |
64898 |
8 |
6 |
中音LA |
880 |
64968 |
9 |
7 |
中音SI |
988 |
65030 |
A |
1 |
高音DO |
1046 |
65058 |
B |
2 |
高音RE |
1175 |
65110 |
C |
3 |
高音MI |
1318 |
65157 |
D |
4 |
高音FA |
1397 |
65178 |
E |
5 |
高音SO |
1568 |
65217 |
F |
|
不发音 |
|
|
0 |
表4-1-2节拍码与实际节拍对照表
节拍码 |
实际节拍 |
节拍码 |
实际节拍 |
节拍码 |
实际节拍 |
1 |
1/4拍 |
5 |
1又1/4拍 |
C |
3拍 |
2 |
2/4拍 |
6 |
1又1/2拍 |
F |
3又3/4拍 |
3 |
3/4拍 |
8 |
2拍 |
|
|
4 |
1拍 |
A |
2又1/2拍 |
|
|
建立音乐步骤:
1)先把乐谱的音符找出,然后由上表建立T值表的顺序。
2)把T值表构成一个编码表,构成发音符的计数值放在计数初值编码表里。
3)简谱码(音符)为高位,节拍为(节拍数)为低4位,音符节拍码放在程序 的简谱编码表里。
建立编码表具体如下:
1)定时值为十六进制4位数,拆分为两组,如5对应的定时值为FD80H,拆分FDH和80H两组.前者装入定时器的高位TH0,后组装入定时器的低位TL0。
2)在程序中使用定时器T0方式1来产生来产生歌谱中各音符对应频率的音频脉冲,由P3.7输出,经三极管将信号放大后驱动蜂鸣器发出不同音节的声音。
3)程序中的节拍控制是通过调用延时子程序DELAY的次数来实现,1拍为500ms,即需要调用4次DELAY;3/4拍需要调用3次DELAY;2/4拍需要调用2次DELAY。
4)节拍的控制码在表TABLE中位于音符码的后面。
5)当一个音符的发音时间到时,再查下一个音符的定时常数和延时常数。依此进行下去,就可演奏出悦耳动听的乐曲。
程序流程图如图4-1所示:
图4-1 主程序流程图
如图4-2所示,开始播放自定义音乐程序时,指针指向乐谱第一个字节,将第一字节拆分为高低字节,其高字节即为音符中音高对应定时器定时常数,低字节即为音符中节拍对应的1/4节拍的次数,同时启动中断定时器0工作在方式1,由定时器定时常数得到相应音高,通过延时子程序设定1/4节拍的时间,由节拍次数得到节拍,再读取下一个乐谱字节,循环下去则演奏出美妙和谐的乐曲[9]。
图4-2 音乐播放子程序流程图
2.算法及使用技巧:原理图上有五个按键开关,有一个是接p17,表暂停,另外4个分别表示相应的歌曲
五.源程序清单,对关键的语句(段)要给出简洁的注释
六. 仿真过程综述
1.首先安装protues软件
2.安装好软件新建工程
七.调试过程中的主要难点(自己遇到的)及解决思路和办法
1.使用Keil uVision3编写源代码的时候,歌曲的源代码只能从网上找了
2.在一开始使用Proteus 8 Professional的时候,对软件并不是那么熟悉,全英文的,找元器件的时候比较费事,而且这款软件也并不是那么的准确,在硬件连接的时候用的是扬声器,在仿真上声音还是挺大的,但实物连接后声音很小,最后不得不在加个三极管
3.在做最后一个模块的时候1602显示屏无法显示字母,最后在舍友王翰林的帮助下加了滑动变阻器才可以实现
八. 课设结果及分析、收获、体会和建议
这次课设在老师和舍友的帮助下完成此次课程设计。这次课设培养了学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。
回顾起此次单片机课程设计,我仍感慨颇多,的确,从选题到定稿,从理论到实践,在接近两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对单片机汇编语言掌握得不好……通过这次课程设计之后,一定把以前所学过的知识重新温故。
通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新可以是在原有的基础上进行改进,使之功能不断完善,成为真己的东西。
九.参考文献(必须参照课本后面的格式写)
[1] 马忠梅,籍顺心,张凯,马岩,《单片机的C语言应用程序设计》,北京航空航天大学出版社,2003年
[2]清翔零基础教你学单片机课程
[3] 赵建领,《51系列单片机开发宝典》,电子工业出版社.2007年