基于单片机的MP3播放器设计_第1页
基于单片机的MP3播放器设计_第2页
基于单片机的MP3播放器设计_第3页
基于单片机的MP3播放器设计_第4页
基于单片机的MP3播放器设计_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

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

文档简介

基于单片机的MP3播放器设计刘吁DesignofanMP3playerbasedonMicroControllerUnitLiuYu摘要本文介绍了一种基于51单片机的MP3播放器的设计方法,且具有无线蓝牙控制功能,可使用手机无线控制MP3播放器,该播放器采用STC12C5A60S2单片机为主控制芯片,U盘(或SD卡)作为音频文件的存储介质,BY8001语音模块作为解码器,HC-06蓝牙模块与手机无线通讯连接。BY8001语音模块从U盘(或SD卡)中读取音频文件及音乐播放关信息,通过串口1连接单片机将音乐播放信息送至单片机处理,并连接耳机(或喇叭)播放音乐,STC12C5A60S2单片机使用特有的串口2连接蓝牙模块进行数据传输,同时连接OLED显示屏实时显示音乐播放信息。实践证明,该音乐播放器连接耳机后,具备播放声音清晰,操作简便,功耗低等特点。关键词:MP3播放器;蓝牙模块;STC12C5A60S2单片机;OLEDABSTRACTThispaperintroducesadesignofanMP3playerbasedon51MCU,andhasaBluetoothfunction,youcanusethemobilephonewirelesscontrolMP3player,TheplayerusesSTC12C5A60S2MicroControllerUnitasthemaincontrolchip,SDcard(orUSBflashdisk)astheaudiofilestoragemedia,BY8001voicemoduleasadecoder,HC-06Bluetoothmoduleandmobilephonewirelesscommunicationconnection,BY8001voicemoduletoreadaudiofilesandmusicplaybackinformationfromtheSDcard(orUSBflashdisk),usetheserialporttoconnectthemusicplayerinformationtotheMCUprocessing,connectearphones(orspeakers)toplaymusic,STC12C5A60S2MCUusingserialporttoconnectBluetoothModule,whileSTC12C5A60S2single-chipconnectionOLEDdisplaytoreal-timedisplaymusic.Itishasprovedthatthemusicplayerconnectedtotheearphones,withasmoothsoundplayback,simpleoperation,lowpowerconsumption.Keywords:MP3player;Bluetoothmodule;STC12C5A60S2MCU;OLED

目录摘要 IABSTRACT II绪论 2第1章系统方案设计与论证 21.1系统方案选择 21.2系统设计思路 21.3系统功能及要求 2第2章系统主要器件及应用 22.1STC12C5A60S2单片机介绍及应用 22.30.96寸OLED显示屏介绍及应用 22.4语音模块BY8001介绍及应用 22.5U盘/SD卡应用及格式介绍 22.6音频输出设备 22.7手机硬件最低配置需求 2第3章系统硬件电路设计 23.1最小系统电路设计 23.2蓝牙无线控制电路设计 23.3OLED显示屏电路设计 23.4BY8001语音模块电路设计 23.5印制电路板设计 23.5.1PCB板应用介绍 23.5.2PCB板图设计的一般步骤 23.5.3PCB板图设计应注意的问题 23.5.4系统PCB板图制作信息 2第4章系统软件设计 24.1系统软件概述与思路 24.2OLED显示程序设计 24.3串口通讯程序设计 24.4按键扫描程序设计 24.5上位机程序设计 2第5章系统调试与结果分析 25.1调试过程分析 25.2所遇问题解决方法 2结论 2致谢 2参考文献 2附录一电路原理图 2附录二实物图 2附录三元件清单 2附录四程序代码 2绪论1.课题研究的背景与意义生活压力大、节奏快早已不是一个陌生的话题。随着现代社会的快速发展,人们的生活水平也在逐步提高,但是由于工作和生活节奏的加快,人们所感受到的压力也越来越大。现代生活给人们带来便利和丰富的物质资源的同时,人们也在为社会的发展建设奉献着自己的一份力量,伴随而来的便是沉重的压力和脆弱的生理防线。现在的社会法则奉承着奋斗,竞争理念,讲究生产效率和生产水平,人们无时无刻不处于这种压力之中,这使得人们需要寻找另一方式来释放生活压力,缓解疲劳,舒缓心情。生活中的人们越来越多的使用播放器来欣赏音乐,目前多以MP3播放器为主流,MP3播放器小巧便捷,音质佳,非常适合在大多数场合使用。在科技飞速发展的今天,几乎每个人随身都配有一部手机,而如今的手机无一不装有MP3播放器,MP3音乐播放器是集音频播放、数据存储为一身的电子产品,现在的MP3播放器样式五花八门,其结构功能一直是电子领域研究者所要研究的对象。所涉及的MP3是MPEG-1(MovingPictureExpertsGroup)音频III(layerIII)的简称,其中的III层算法相比其他的压缩算法而言,虽在算法较为复杂,但既实现了高压缩比,音质效果也显著。使用MP3算法可以在低码率的情况下基本上可以达到CD音质效果。如果存储一段不压缩的无损音频,那么导致数据流码率非常大,这使得音乐传输很不方便,也致使MP3格式作为网络音频传输、音乐存储、数字广播的主要方式。MP3在多年前就抢了CD/MD的风头,一举夺得了音乐领域市场的头把交椅。时隔多年,MP3凭借高压缩比,低码率,接近CD音效质量的绝对优势,依然没有衰退的迹象,如今依靠强悍的功能,多变的造型以及新颖元素设计的添加仍然充满生机与活力。现今的MP3技术已经非常成熟,MP3领域市场已不关心MP3播放器如何运行,而是把注意力投向了MP3播放器的功耗方面,在未来的MP3播放器的市场上,无线蓝牙MP3播放器的普及将可能成为一种趋势。本文提出了一种基于单片机的MP3播放器的设计方案,并且具有无线蓝牙功能,这很好的体现了此次设计的灵活性。该设计方案已基本实现,能够实现MP3播放器的一般功能。2.音乐播放器国内外现状据中国产业调研网发布的《中国MP3播放器行业现状分析与发展前景研究报告》(2015年版)显示,经过近年来的迅速发展,MP3音乐播放器作为一种便携的音频播放设备,早已融入广大消费者的生活。另外,目前硬盘、闪存、主控芯片、液晶屏幕等主要部件的技术已经非常成熟,随着MP3产品的设计理念不断改善,性能、集成度、产业化程度不断提高,生产成本也已经降到了较低价位。现在大部分业务已经开始在控制体验,界面设计,网络功能,智能化,人性化等方面实现产品升级。这既开拓了MP3领域市场,也避免打价格战的风险。近年来,国内MP3播放器品牌取得显著发展,凭借在性价比的绝对优势使之能与国外强势品牌抗衡。展望近几年来国外MP3播放器现状,韩国MP3播放器地位在数码产品领域正逐步降低,美国MP3播放器市场的销量却屡创新高,而日本则将对市场销售的MP3播放器征收一部分税,可见MP3播放器市场正在进一步扩大。3.蓝牙MP3普及时代到来如今的MP3技术已日趋成熟,除基本功能和音效等以外,在便捷性等方面,人们开始提出更高的需求,当下最具发展潜力的便是无线数据传输技术,自从智能手机出现以后,蓝牙的广泛普及,给了人们一定的启示,蓝牙MP3的普及时代到来已是大势所趋。听歌的过程可以挣脱线材缠绕的束缚,让音乐随身而动。不同的设备之间可以通过蓝牙进行数据通讯,功能的融合,比如手机来电时,可以自动由MP3播放切换到电话的接听。一场无线的蓝牙革命,已经进入倒计时阶段。蓝牙技术属于短距离无线通讯技术,一般情况下,传输距离在十米以内,但随着科技的发展,传输距离可达到一百米之外。在不久的将来,生活或工作的电子设备(PC机、笔记本电脑、打印机、传真机、数码相机、移动电话、家电设备等)或许可以通过蓝牙连接形成一个局部的微型局域网,局域网之间又可以进行通讯,覆盖范围更广。蓝牙传输的距离和速度虽低于WLAN,但是功耗更低,资源节约且更环保,对人体有害的电磁辐射更小。随着蓝牙技术的迅猛发展,相关配件的成本也会越来越低,现如今,MP3等便携式播放器领域开始出现了蓝牙应用的萌芽。三星发力在今年开始在多款新机型中配备蓝牙功能。国产厂家蓝魔也推出了新款蓝牙MP3V150,其他一些国内厂家如初露头角的TMSON也有揭竿而起的势头。国内外厂商大踏步向蓝牙迈进,似乎国内MP3市场,蓝牙普及的春风不远了。4.课题设计主要内容拟解决的问题本次课题需要设计一个基于单片机的MP3播放器,并且采用OLED显示屏实时显示音乐播放信息,例如播放歌曲名、音量、播放进度、模式及曲目量,并且实现MP3格式音乐的流畅播放及对音频文件的存储功能。该设计主要有单片机最小系统、音频解码模块、OLED显示模块以及蓝牙模块构成。解码模块不断地从存储设备中提取音频文件并自动解码然后送至功放或者耳机播放音乐,单片机主要提取音乐文件的音乐播放信息,通过OLED显示屏给予显示,以及实时发送命令控制音频解码模块。通过课题的内容要求及理论剖析,拟需解决的问题主要有三个:其一,单片机与解码芯片的接发数据量巨大,而彼此之间通过串口连接,需要保证数据传输的可靠性和实时性;其二,在软件编程方面,需要对收发的大量数据进行处理和转换,其间涉及的变量众多,须保证各函数模块之间的低耦合性和协调性。尤其是在处理波特率的问题上,误差不能太大须精准地编写好波特率发生器的初始化;其三,MP3播放器与上位机(手机)的蓝牙无线通讯时,要保证上位机通过蓝牙发送的数据无误,对手机APP(手机蓝牙串口助手)内编写的数据需与播放器的控制指令相一致,做到按键和手机的双重控制。第1章系统方案设计与论证1.1系统方案选择STC12C5A60S2单片机5V转3.3VLCD1602显示屏键盘5V电源SD卡模块SD卡方案一:采用宏晶公司的的高速1T增强型STC12C5A60S2单片机作为主控芯片,音频解码模块采用VS1003解码模块,U盘模块(CH375)及SD卡模块用于将U盘及SD卡的MP3文件提取出来,然后单片机读取数据将MP3音频文件送至VS1003解码器解码并连接耳机、外部功放播放音乐。相关的音乐播放信息通过LCD1602STC12C5A60S2单片机5V转3.3VLCD1602显示屏键盘5V电源SD卡模块SD卡耳机VS1003解码器CH375U盘耳机VS1003解码器CH375U盘图1-1系统结构图方案一方案二:此方案所选的单片机同样是STC12C5A60S2单片机,它是每机器周期1个时钟的高速单片机,工作频率0~35MHz,最大相当于普通8051单片机的420MHz,足够满足此次设计要求。采用BY8001-16P语音模块作为解码器,内置解码和功放功能,可直接接3W的喇叭,同时采用OLED显示屏为播放信息输出设备,另外接蓝牙模块,可使用手机无线控制MP3音乐播放器。方案分析:方案一和方案二同时采用了STC12C5A60S2单片机,主要是因为此单片机为1T的高速单片机,具有一个时钟/机器周期,增强型8051内核,且内置高达60KB大容量FLASH存储器。另一个主要的原因是此单片机比普通单片机多一串口,而此次设计需用到两个串口,分别与蓝牙和MP3模块通讯,贴合系统设计要求。方案一的VS1003解码器虽为一款高性能的音频解码芯片,但外部定义端口较少,VS1003驱动编程较为麻烦,CH375U盘模块也需编写U盘驱动设计FAT16文件格式及MP3格式,程序编写方面不易操作。OLED显示屏具备自发光,厚度薄,视角广,显示效果比LCD1602好,且能显示汉字,更宜作为此次的MP3播放器显示屏以显示歌曲名等相关字符信息.BY8001解码器内置解码和功放功能,自动解码MP3/WAV格式的音乐文件,减轻了编程工作量,其播放音质效果不比VS1003解码器差。综合对比宜选用方案二作为此次课题方案。1.2系统设计思路本次毕业设计课题需要设计一个基于单片机的MP3播放器,要求实现对MP3音频文件的存储功能和播放功能,同时采用OLED显示屏实时显示音乐播放信息,例如播放歌曲名称,音量以及播放进度等,具有两种输入方式控制MP3音乐播放器的状态,一种是传统按键,另一种是运用手机通过蓝牙模块控制播放器。连接喇叭或耳机播放音乐。此课题研究的系统设计框图如图1-2所示。STC12C5A60S2STC12C5A60S2单片机OLED显示屏dPjkpin屏BY8001模块蓝牙模块5V电源时钟电路复位电路按键SD/U盘喇叭手机终端串口2串口1耳机图1-2MP3播放器总体设计框图该设计系统主要有STC12C5A60S2单片机、时钟电路、复位电路、电源电路、按键、BY8001解码模块、OLED显示模块、音频输出设备以及HC-06蓝牙模块组成。时钟电路、复位电路及STC12C5A60S2单片机组成了工作最小系统,支持单片机顺利运行的最基本硬件条件,HC-06蓝牙模块以单片机通过串口2(TXD2和RXD2引脚)连接,以支持手机蓝牙无线控制,解码模块引脚可同时插入SD卡和U盘,并优先选择U盘进行数据传输。并用串口1(TXD1和RXD1引脚)进行通讯。OLED显示屏模块为6引脚SPI接口,与单片机通过SPI方式连接,由于单片机从BY8001解码模块采集到的音乐播放信息是四个字节的ASCII字符,需经字符转换处理才能将信息输出到OLED显示屏。1.3系统功能及要求此次系统设计的主要内容是设计一款基于单片机的MP3音乐播放器,该MP3音乐播放器不仅能实现主流播放器的基本功能,且能够做到传统机械按键和手机终端对该MP3播放器的双重控制。此播放器的主要特点如下:该播放器配有八个传统独立功能键(上一首/快进、下一首/快退、音量+、音量-、播放/暂停、停止、音效、设置循环模式),涵盖了对播放器控制的基本功能。可同时插放U盘和SD卡,并优先选择U盘读取MP3音频文件。采用OLED显示屏显示音乐播放信息并能显示汉字歌曲名。使用3W小喇叭播放外音,也可插入耳机聆听音乐(插入耳机后喇叭断开)。所播放的歌曲音质清晰、流畅,声音优美。可使用手机APP无线蓝牙控制该MP3音乐播放器的状态与传统按键实现功能一致。即使MP3格式音频文件是进过压缩后低码率传输,但对于单片机来说可不容忽视,语音模块与单片机是通过串口进行连接,传输数据速度不及并口传输,则须选择运行速度快的单片机,STC12C5A60S2单片机便符合要求,另外在软件的编写方面需达到程序条理清晰,逻辑清楚,可执行度高的要求。第2章系统主要器件及应用2.1STC12C5A60S2单片机介绍及应用EQ单片机以其高可靠性、高性价比、低电压、低功耗等一系列特点,近几年来应用非常广泛,广泛应用于工业控制系统、数据采集系统、智能化仪表以及通信设备、日常消费类产品、玩具等,并且已经深入到日常生活的每一个角落。此次设计选用了宏晶公司的STC12C5A60S2单片机,其具有一个时钟/机器周期,增强型8051内核,处理速度比传统8051快8~12倍,该单片机时钟有5~35MHz可选,相当于普通8051的60~420MHz,代码指令可以完全兼容8051系列单片机,且增加了2路PWN,8路10位A/D转换,专用复位电路以及多增加了一个串口2。(1)STC12C5A60S2单片机管脚如图2-1所示。图2-1STC12C5A60S2单片机引脚图(2)51单片机有4个并行I/O口,分别为P0-P3(STC12C5A60S2额外增了P4口)。每个并行口由8个引脚组EQ\x\to(INT0)成,都可以用作普通I/O操作。除了P1口外,其它并行口都有复用功能。P0口(32~39脚):当向外部存储器读/写数据时,PO口是复用口,P0和P2口配合完成低8位地址的传送后,P0口在传送8位数据。P1口就看见(1~8脚):只具有I/O功能。P2口(21~28脚):当向外部存储器读/写数据时,P2口用于传送高8位地址P3口(10~17脚):P3口除了具备通用I/O口功能,还具有非常重要的复用功能。EQEQEQ端口位第二功能注释端口位第二功能注释P3.0RXD串口输入端P3.4TO定时器/计数器0输入端P3.1TXD串口输出端P3.5T1定时器/计数器1输入端P3.2EQ\x\to(INT0)外部中断0输入端P3.6EQ\x\to(WR)外部数据存储器写选通信号P3.3EQ\x\to(INT1)外部中断1输入端P3.7EQ\x\to(RD)外部数据存储器读选通信号表2-1P3口复用功能表2.2HC-06蓝牙模块介绍及应用HC-06蓝牙模块是一款专门为智能数据传播而设计的,符合V2.0+EDR蓝牙规范,且具有体积小,功耗低,收发灵敏迅速等优点。只需要配备少许的外围元件就可以实现其强大的功能,该模块用于短距离无线数据传输领域,能方便地与手机、PC机以及单片机相连接,减少了线材的缠绕束缚,类似于单片机的串口,广泛应用于POS机、无线键盘、鼠标、工业遥控、无线数据采集、智能家居、楼宇自动化以及井下定位。由于HC-06蓝牙模块的串口电平为3.3V,故该模块采用的是增加了5V转3.3V电平转换芯片的蓝牙模块,其实物图如图2-2所示图2-2HC-06蓝牙模块实物图第一次使用HC-06蓝牙模块式需要对其进行参数设置,通过AT指令进行设置,比如设置设备名称,配对密码,修改波特率等。这里我们采用电脑进行修改,通过USB转串口线(CH340芯片)连接电脑与蓝牙模快,USB线的TXD、RXD分别与模块的RXD、TXD相连。本设计使用从机模式,AT指令的参数设置是在没有配对连接的情况下(指示灯闪烁)进行字符传输的。(1)蓝牙模块AT指令集见表2-2所示。(2)蓝牙模块引脚说明见表2-3所示。本次使用的蓝牙模块设置的参数为默认,即蓝牙模块名称为HC-06,波特率设为9600b/s,无校验位,配对密码为1234。表2-2蓝牙模块AT指令集AT指令对应功能返回参数AT测试通讯OKAT+BAUD1改蓝牙串口通讯波特率OKAT+NAMEname改蓝牙名称OKsetnameAT+PINxxx配对密码OKsetPINAT+PN无校验OKsetPINAT+PE偶校验无AT+P奇校验无表2-3蓝牙模块引脚说明序号引脚名称功能1VCC接3.6V-6V电压2GND接地3RXD模块的串口输入端,接单片机的TXD4TXD模块的串口输出端,接单片机的RXD注:状态STATE引脚和使能EN引脚未使用2.30.96寸OLED显示屏介绍及应用采用OLED显示屏作为音乐播放信息的输出设备,OLED,即有机发光二极管(OrganicLightEmittingDiode)。OLED由于同时具备自发光,不像LCD显示屏需要背光源、且OLED屏具有对比度高、厚度薄、视角广、反应速度快、显示效果好、使用温度范围广、构造工艺简单等优异的特性,现广泛用于手机,相机等数码产品领域。此次采用128*64分辨率的蓝色显示屏,并采用6针SPI接口方式,去掉了CS片选引脚。0.96寸OLED屏SPI接口模块如图2-3所示。图2-36针SPI接口OLED表2-4OLED引脚用途描述引脚序号引脚名称引脚描述1GND电源地2VCC电源正(接3-5.5V)3SCL在SPI接口方式通信中为时钟管脚4SDA在SPI接口方式通信中为数据管脚5RSTOLED的RES#脚,用来复位(低电平复位)6D/COLED的D/C#E脚,数据和命令控制管脚本次采用的显示屏内部备有驱动芯片SSD1306,其内部具有升压功能,不需要额外添加升压电路。因为0.96寸OLED显示屏为128*64的分辨率,SSD1306将点阵分为8页,每页有128个字节,通俗地说就是将整个像素点分成8层,每层具有8*128个像素,每一层的每一列是一个字节(低位在前,高位在后),依次从左到右,从上到下计算。2.4语音模块BY8001介绍及应用BY8001语音模块是此次毕业设计的核心器件,是深圳市百为电子科技有限公司自主研发的一款小巧的新型高品质插卡语音模块,支持MP3、WAV格式双解码。该语音模块内置MicroSD卡插槽,外部也可接U盘或USB数据线连接电脑更换音频文件内容,且自带功放,可直接驱动3W的喇叭。BY8001语音模块的引脚功能如图2-3所示

图2-4BY8001-16P引脚图图2-5BY8001-16P实物图BY8001内置标准UART异步串口接口,属于3.3VTTL电平接口。该模块与单片机的通讯数据格式为一个起始位、一个停止位和八个数据位,每次传输10位数据,故单片机应采用工作方式1才能与语音模块进行正确的数据传输,波特率设置为9600。BY8001语音模块引脚定义描述见表2-5所示语音模块的命令通讯数据有6或7字节组成,单片机发送命令数据对播放器进行相应的控制,其数据全部为十六进制数。指令中的“长度”是指长度、操作码、参数、校验码的个数,“校验码”是指“长度”与“操作码(与参数)”按位异或得到的值。此次所用的BY8001语音芯片的串口允许的波特率为9600b/s,其他的波特率并不适用,这一点要特别注意,同时采用无校验的数据格式,在使之与单片机进行数据传输之前需使用电脑串口调试助手进行通讯测试且应用公式计算出命令数据的校验码。起始码和结束码固定,分别是0X7E和OXEF,每个数据有双字节组成。校验码由长度、操作码及参数经异或运算得出。现以数据(7E0431192CEF)指令说明每个数据有高字节和低字节组成按位异或,即:04⊕31⊕19=2C1)由于需要的控制指令较多,手动计算量大,可通过计算器进行计算,并选择程序员模式、十六进制和双字格式。如图为一段截取的计算器计算数据图如图2-6所示。表2-5BY8001语音模块引脚定义序号管脚名称功能描述备注1BUSY播放时输出高电平,停止为低忙信号2RXUART异步串口数据输入3.3V的TTL电平3TXUART异步串口数据输出3.3V的TTL电平4DACRDAC右声道输出可外接功放、耳机5DACLDAC左声道输出可外接功放、耳机6SPK1外接单声道无源喇叭两端接2W/4Ω或1W/8Ω以上喇叭7SPK28VCC电源正极3.6-5V9IO5触发输入口5接地触发10IO4触发输入口4接地触发11IO3触发输入口3接地触发12IO2触发输入口2接地触发13IO1触发输入口1接地触发14GND电源负极系统地,外接大功率功放时,大电流不要流过这个地脚15DPUSB数据线读U盘或用USB数据线连接电脑更换TF卡内容16DMUSB数据线图2-6计算器计算数据画面BY8001语音模块与单片机通讯连接之前需连接电脑进行通讯测试,这里使用USB转TTL电平接口(SiliconLabcp2102modules)作为两者的中介桥梁。通过电脑串口调试助手发送相关的控制指令,同时也接受语音模块返回的参数信息,下图2-7所示为一段截取的串口调试助手收发语音模块数据的界面。图2-7串口调试助手发送的数据在串口调试助手中,必须选择9600b/s的波特率,否则无法通讯,并选择HEX文件发送,这里尝试发送了一个调节音量的通讯控制指令,然后返回OK表示成功发送。2.5U盘/SD卡应用及格式介绍MP3播放器采用U盘作为MP3格式音频文件的存储媒介,U盘是一种闪存盘,带有USB接口无需物理驱动器只需在电脑上安装U盘驱动程序即可做到即插即用的效果,且体积小巧便捷,存储容量大,使用U盘便可存储多首歌曲文件。如今只是作为数据存储用途的U盘,开发出更多的功能:加密U盘、杀毒U盘以及音乐U盘等。而U盘中带有FAT32文件管理系统,用于对存储的数据方便进行管理以及读写,FAT32文件系统分4个字节表示每个扇区的配置文件,存储空间利用率、安全性、灵活性高。U盘里面的MP3文件通过BY8001读取,以每次512Byte读取一个扇区送至内部的解码模块进行解码。如图2-8为本次使用的U盘实物图。图2-8U盘图2-9MicroSD卡MicroSD卡即TF卡,是一种大容量、小尺寸,闪存式的新一代存储设备,数据传输速度快,且具有热插热拔特性。在SD卡规范中,理论上的读写速度可到104M/s,并且可以转换为MiniSD卡和普通SD卡使用,广泛应用于手机、平板电脑、MP3/MP4、导航仪等小型手持式数码产品,MicroSD卡实物图如图2-9所示。本音乐播放器选用MicroSD卡作为第二种存储装置,此播放器可同时接入U盘和SD卡,并优先选择U盘进行读取音频文件。MicroSD卡通过语音模块内置的卡槽与之连接,格式化为FAT32文件格式。将MP3格式文件存储至TF卡中,并通过SPI接口工作模式与语音模块连接。2.6音频输出设备此次系统设计可接入的音频输出设备既可是扬声器亦可是耳机。所用的喇叭是一款功率3W、内阻4Ω的优质迷你扬声器,此喇叭广泛应用于小音响、便携式播放器产品。外观为亮帽型,材质为铁壳内磁、橡胶PU边且音质较佳。该播放器可插入3.5mm的通用耳机,耳机是一对转换单元,它接收语音模块所发出的电讯号,利用贴近耳机的扬声器将其转化成可以听到的音波。另外,如果在耳机插座处接入大功率有源音响可以达到更加出色的音质效果。2.7手机硬件最低配置需求此次设计的MP3播放器具有无线蓝牙控制功能,使用日常使用的智能手机就能经蓝牙控制MP3播放器的状态。满足系统设计要求的手机终端需为安卓或苹果智能机具备能够通过应用商店下载相关APP功能且该手机自带蓝牙功能,其内存不小于1GB容量,CPU主频应在1GHz以上。第3章系统硬件电路设计3.1最小系统电路设计系统设计的最小系统即为单片机正常工作的基本控制电路,有复位电路、时钟电路和电源电路组成。一个复位按钮K1、一个电解电容C1和10kΩΩ电阻构成了手动复位电路,系统接通电源时,单片机自动上电复位后进入正常运行状态。当系统运行出现问题时,可以人为按复位键,使Vcc的5V电平直接加到RST端,只需保持两个机器周期的高电平便可迫使单片机复位。采用两个电容C2,C3和11.0593MHz的晶振构成了时钟电路,单片机内部有个振荡电路,与时钟电路相连,产生自激振荡,便构成了一个完整的振荡信号发生器。起振电容容值为30pf,方便起振。电源插座J1、自锁开关SW1和470μf电解电容C10构成了电源接口电路,其中电容C10起到电源稳压的作用。下图3-1为最小系统电路图。图3-1最小系统电路图3.2蓝牙无线控制电路设计本次设计使用HC-06蓝牙模块与单片机通过串口2进行通讯,将蓝牙模块的TXD,RXD分别与单品机RXD和TXD相连。蓝牙与手机无线连接时指示灯无闪烁,通过手机上的蓝牙串口助手发送控制命令给蓝牙模块,蓝牙模块透明传输数据给单片机处理。蓝牙模块电路如图3-2所示。图3-3蓝牙控制电路3.3OLED显示屏电路设计OLED显示屏的主要的任务是将音乐播放信息显示出来,采用SPI接口方式,SLK引脚为芯片提供时钟信号,SDA引脚输入命令和数据,结合汉字取模软件可以显示出任何汉字甚至是图像,OLED连接到单片机只需四个引脚即P2.0~P2.3,占用的I/O口很少,却可以实现强大的显示功能,图3-4为OLED显示电路。图3-4OLED显示电路3.4BY8001语音模块电路设计BY8001语音模块仅通过两根串口线(TXD,RXD)与单片机相连,U盘(或SD卡)直接接至语音模块,自行解码,并将音乐播放信息传输给单片机处理,并且BY8001语音模块设有I0~I5五个触发引脚,可以直接接按钮触发控制,但此方案需更多的外围元件,线路复杂,且控制功能及效果不理想,故采用串口控制,按钮接至单片机。语音模块的音频输出引脚(SPK1,SPK2)连接喇叭两端以及五脚耳机插座的左声道和右声道引脚。这样可以在耳机插入的情况下,喇叭自动断开,由耳机播放歌曲。下图3-6为BY8001语音模块的设计电路图。图3-6BY8001语音模块电路图3.5印制电路板设计3.5.1PCB板应用介绍现如今,生活中的每种电子设备,小到U盘、电子手表、计算机,大到计算机、通讯设备、航空航天飞机,电子雷达系统,其无一不存在电子元器件,它们之间的电气连接就要使用到印制电路板(Printedcircuitboard,PCB),系统PCB图如图3-8所示。在大学的学习期间普遍使用万用板作为元器件的组装基板,即将所用的元器件焊接到万用板后,再使用细导线将各个元器件连接到一起,整个过程耗时耗力,且整板的电路电气连线脆弱,降低了整板的质量和可靠性。而用印制电路板制造的电子产品具有以下优点:(1)能够实现电路中各个元器件间的电气连接,代替复杂的布线,简化了电子产品的装配、焊接、调试工作。(2)缩小了整板的体积,并提高了整板的质量和可靠性。(3)采用统一的PCB制图,有利于装备生产的自动化和焊接的机械化,提高了生产效率。该系统在确认方案并设计好系统硬件电路图后,采用印制电路板作为组装基板以实现元器件间的电气连接。该PCB板由于所用元器件不多,连接线路较简单,且主要线路集中在底层,顶层只通过过孔连接了几条电源线及地线。故采取单层印制电路板制作且只在底层共地敷铜。PCB板实物图如图3-7所示。图3-7PCB板实物图图3-8系统PCB图图3-8为此次设计所用的PCB图,PCB板的尺寸大小为96*68mm2,相比之前使用万用板焊接的电路板尺寸缩小了很多,该印制电路板由顶层、底层、阻焊层、丝印层组成以及禁止布线层组成,各工作层面的功能如表3-2所示,且为单面印制电路板,电路的绝大部分线路放在底层,而顶层只通过导孔连接了几条电路线,并只在顶层放置元器件。其中较宽的导线为地线和电源线,可允许较大电流通过。在PCB板的底层进行了共地敷铜,这样减少了底线阻抗,提高了抗干扰能力,减少了环路面积。表3-2PCB各工作层功能介绍层面类型功能层面颜色顶层放置元件及导线红色底层放置导线蓝色阻焊层用于除焊盘处即PCB涂绿油处——丝印层绘制元件轮廓、编号及文本信息绿色禁止布线层定义放置元件和布线区域有效区紫色3.5.2PCB板图设计的一般步骤(1)设置Protel99se的PCB工作环境参数。打开软件,执行命令Tools/Preferences,按照要求对工作环境的工作层面颜色、显示/隐藏、默认参数、信号完整性等进行设置。(2)添加元件库,Protel99se中自带的元件库封装并不能满足设计要求,一些元器件的封装在元件库不能找到,如U盘、BY8001语音模块、耳机等,需要自定义元件封装并添加至元件库中。(3)在确认先前绘制好的系统电路原理图电气连接无误情况下,为各个元器件添加封装,生成网络表。这点很重要,否则后续工作将无意义。(4)规划电路板,在禁止布线层绘制电路板的物理外形尺寸和电气边界,这里采用手动绘制电路板,执行菜单命令Place/Line放置连线,绘制出一个尺寸96*68mm2的闭合边框。(5)载入网络表,网络表和元件封装是同时载入的,为了保证网络表和元件封装成功,在设计原理图是务必要给每一个元件制定封装形式,并且该封装形式能够在当前PCB已经载入的封装库中找到。执行Desigen/LoadNets命令即可导入网络表。(6)PCB手动布线,执行Design/Rules,进行安全间隔的设置、分层布线的设置、高频和低频信号线的设置、过孔的设置、不同线之间的宽度设置、地线的设置、敷铜设置等。此次的系统设计采用手动布线使元件布局整齐美观,便于连线。(7)丝印层文本信息放置合适位置,底线大面积敷铜。(8)进一步检查PCB板图的元件布局和电气连线,PCB板一旦制作完成修改起来较为麻烦。3.5.3PCB板图设计应注意的问题在本次PCB设计过程中,考虑到系统的尺寸和可靠性的要求,在设计中会遇到需要以下解决应注意的问题:(1)在原理图设计时,元件的布局不够合理。在设计中由于元件位置放置不当可能导致走线复杂,可能出现交叉等情况,并且在绘制元器件时应注意其引脚的顺序位置,引脚连接错误可能导致整板无法使用。(2)Protel99se软件与win7有部分不兼容,元件库无法正常加载至当PCB封装库中,这里使用PCB编辑器下方的Find按钮,可将指定目录下的元件库添加到当前元件库。(3)线路集中在PCB板底层,将PCB的底层进行大面积敷铜,有利于地线阻抗的降低,使电源和信号传输都能稳定,提高了整板的抗干扰能力和可靠性3.5.4系统PCB板图制作信息该系统设计中绘制PCB图所使用的PCB设计软件为Protel99se,PCB板生产厂家是温州精亿电子厂PCB板尺寸为96*68mm2,PCB型号为单层印制电路板且该PCB板底层大面积共地敷铜。第4章系统软件设计4.1系统软件概述与思路系统软件设计是本次系统设计的重要组成部分,基于硬件电路条件,整个程序细分为若干个功能模块来完成,主要有显示程序模块、按键程序模块、通讯查询程序模块以及蓝牙通讯程序模块。STC12C5A60S2单片机正好有两个串口,分别对应连接蓝牙模块和BY8001语音芯片,单片机程序中的主函数完成对OLED显示屏初始化和串口初始化,之后依次调用显示函数、按键查询函数、播放状态函数。程序中开了串口中断和定时器0中断,在串口1中断子程序中接收播放状态信息,串口2中断子程序中处理蓝牙模块发送过来的数据。由于按键1(按键2)复用上一首和音量+(下一首,音量-)功能,因此定时器0中断程序记录按键按下的时间来检测按键是长按还是短按。程序要完成以下功能:控制播放、暂停、停止,音量加减,快进快退,音效及循环模式,显示歌曲序号,总量,当前歌曲时间,音效,循环模式,音量。主程序流程图如图4-1所示4.2OLED显示程序设计OLED显示屏采用SPI接口方式与单片机进行通讯以交换信息,在单片机的SCK时钟移位上升沿脉冲下,数据按高位在前低位在后传输,此次所用的OLED显示屏的SPI接口引脚去掉了MISO引脚,只作为从机模式。该OLED显示程序包含图片数据文件(Bmp.h),字符文件(Oledfont.h)和操作文件(Oled.c),其OLED显示程序流程图如图4-2所示显示程序开始显示程序开始OLED初始化调用字符坐标函数取字符文件中对应数据显示字符(汉字)数据返回主程序图4-2OLED显示程序流程图开始开始系统初始化是否插入U盘通讯查询查询是否成功?读取播放状态信息更新数据显示判断按键是否按下?发送相应控制指令给语音模块语音模块保持播放当前状态是否插入TF卡YNYNYNYN图4-1系统主程序流程图由于该播放器要求OLED显示屏显示字符以及汉字信息,甚至是图像,而OLED显示屏内部并不自带字符,这需在程序中建立个字库文件,从其中调取对应的字符显示到屏幕上,这里结合PCtoLCD2002.exe取模软件,该软件可以将字符、汉字以及图像转换成点阵数组,将转换后的数组复制到程序中的字符文件中,便可以使OLED显示想要的字符了。在此感谢此软件的原作者,设计出功能强大,方便快捷的液晶取模软件。PCtoLCD2002.exe取模软件界面如图4-3所示。图4-3PCtoLCD2002.exe取模软件4.3串口通讯程序设计系统中的蓝牙模块和BY8001语音模块都要与单片机建立串口通讯,语音模块通过串口发送音乐播放信息数据给单片机处理,同时接受单片机发送的命令字,然后执行相应的操作。必不可少地使用到了程序中的串口中断。蓝牙模块的接收、按键按下和程序中的通讯查询不定时地触发中断,进入串口中断服务子程序。其中通过蓝牙接受的数据放入变量n中,然后根据变量n中的数据执行相应动作。串口通讯流程图如图4-5所示。在系统程序中使用到了两个串口中断服务子程序,串口1用于单片机与BY8001之间的数据通讯,TXD用于单片机发送控制指令至语音模块,使之执行相应的动作。而蓝牙模块也需要使用串口通讯,在调试过程中,如果将蓝牙模块与BY8001语音模块接至同一串口即串口1,导致串口的RXD输入端只受蓝牙模块的控制,而单片机无法接受音乐播放信息,故使用STC12C5A60S2单片机额外的串口2进行独立通讯传输。串口2与串口1有所不同的地方是,串口2在编程软件中未定义头文件,需要自定义相关地址,并且系统设计所要使用到的相关寄存器没有位寻址功能,这也需要逻辑运算设置对应位的状态。串口2相关寄存器宏定义如图4-4所示。图4-4串口2寄存器定义串口中断服务子程序串口1是否接收中断?清除中断标志串口中断服务子程序串口1是否接收中断?清除中断标志接收缓冲器SBUF中的数据是否正确接收数据?将四个ASCII字符转换成数值返回到断点处串口2接收标志位S2CON.bit1=1?接收中断标志位RI清零将接受的数据放入变量nNYYYNN4.4按键扫描程序设计程序中的按键扫描模块需同时处理判断蓝牙模块和按键发送过来的数据,通过接收的命令字作出相应的动作。另外有几个按键具有复用功能,如上一首和音量+共用一个按键,短按为切换上一首,长按则切换成音量+。因此按键扫描程序还需要正确判断长按和短按,然后分别执行不同的操作,程序中采用开启定时器T0的方式来判断按键按下的时间长短。约5ms中断一次,有中断次数小于40次为短按,否则为长按。按键扫描流程如图4-6所示。按键子程序开始按键子程序开始是否有按键按下?延时去抖是否有按键按下?按键“长按”控制处理返回主程序是否接收到蓝牙数据?按键“短按”控制处理NNNNYYYY按键时长是否大于200ms?图4-6按键扫描程序流程图4.5上位机程序设计在此次毕业设计课题中,使用上位机即手机APP(蓝牙串口助手)无线控制MP3音乐播放器,该软件为蓝牙客户端通信工具,所占内存仅为72KB大小,可用于硬件的串口蓝牙模块(TTL电平)通信,通过设置相应的控制按键,并在按键中编入控制代码,能够准确地无线控制MP3播放器的状态。在使用蓝牙控制MP3播放器之前,需先设置蓝牙模块的有关参数,本系统设计中采用9600b/s波特率,无校验位数据格式。然后开启手机蓝牙与HC-06蓝牙模块进行配对,用串口助手扫描蓝牙设备,会找到名称为HC-06的设备,连接即可(当连接成功时,指示灯从闪烁状态变为无闪烁)下一步就是启用键盘模式,在按键中写入控制字,按下按键即可发送数据对播放器进行控制。上位机各按键代码见表4-1所示。图4-7、图4-8分别是上位机APP搜索蓝牙设备显示界面以及手机蓝牙控制界面。表4-1按键代码序号按键名称代码1音效0xBF2上一首0xFE3播放/暂停0xEF4下一首0xFD5音量减0xFA6模式0x7F7音量加0Xf9、、、4-7搜索蓝牙设备显示界面图4-8手机蓝牙控制界面第5章系统调试与结果分析5.1调试过程分析从硬件模块选择,硬件搭建再到程序编写,最后进行系统的调试分析,最终达到此次设计预期的效果,本次MP3播放器的毕业设计课题由二人一组,整体任务有两人合作完成,本人负责硬件电路设计,另一搭档负责软件编写。整个系统设计是个不断学习,反复尝试的过程,设计期间难免会遇到非常棘手的问题,故对于系统的调试任务,就显得尤为重要。本章主要讲解对软硬件的调试工作。在硬件搭建的过程中,考虑到后期的程序文件占用控制器的存储器空间比较大以及可能要执行多串口通讯,首先在单片机的选择上,我们使用了STC12C5A60S2单片机,此单片机内部具有64KFLASH程序存储器足以容纳下烧录的程序(程序大小达到9K),另外外部具有2个串口,可以方便与解码器和蓝牙模块独立相连。在硬件焊接完成和程序下载后,发现喇叭可以播放音乐,但显示屏却无任何反应,或许问题太细微且关键,调试了几天并没有发现程序上的功能错误,最终在电路板上找到了关键所在,原来在OLED与单片机连接的线路中出现了虚焊,之后问题得到解决。在满足毕业设计的要求下,额外增加了蓝牙无线功能,写好蓝牙驱动后,调试过程中,发现用手机发送的一字节数据与检验接受的数据不一致。比如发送0x0F返回0x8F当后四位大于7时,数据就正确比如发送0x8F返回0x8F,根据这个原理,在程序中加于校正得到正确的数据。在软件调试过程中,需要处理的变量很多,如何分配好各个变量之间的关系是整个软件编程的难点,其中串口中断服务程序中的数据处理令人头疼,从解码器接受的数据送至OLED乱码,经过反复调试后,发现接受的数据信息为ASCII字符,需要经过字符转换才能显示。另一个问题是如何解决串口占用问题,蓝牙模块发送的数值与解码器发送的数值不一样,最后分析,可使用IF语句来选择性的将SUBF缓冲器送给相应的变量。5.2所遇问题解决方法(1)问题情况:喇叭可以播放音乐,但OLED显示屏未有任何反应。解决方法:重新检查电路板线路,发现单片机与OLED连线出现虚焊,使用电烙铁在虚焊处重新焊接后问题解决(2)问题情况:OLED显示屏显示的播放时间进度断断续续,不能有效的显示播放进度解决方法:程序中频繁的使用中断,导致执行程序中的显示函数的时间间隔不确定性大,换用STC12C5A60S2高速单片机,未出现卡顿现象,流畅地实时显示音乐播放信息。(3)问题情况;在确认线路正确且单片机通讯正常情况下,不能正确与语音模块进行通讯,但使用电脑在线调试语音模块也可以正常通讯。解决方法:在使用电脑串口调试助手与语音模块通讯过程中,发现只能使用9600b/s波特率才能正确通讯,程序中的波特率发生器也设置为9600,最后问题出现在晶振上,只有选用11.0592MHz的晶振才能产生9600b/s的波特率,先前使用的是12M晶振导致误差较大,传输数据出错。(4)问题情况:对STC12C5A60S2单片机的串口2的程序编写过程中,出现编译错误,提示串口2的相关特殊寄存器未定义,无法通过编译生成HEX文件。在KeiluVision4软件下方提示栏出现图5-1所示错误。图5-1未成功编译结果解决办法:"REG51.h"头文件中未宏定义串口2的相关地址,在头文件额外定义了串口2的地址,最终编译未出错。图5-2成功编译结果(5)问题情况:在确定程序中的波特率设置无误情况下,对语音模块的部分控制指令通讯失败,未能正确控制播放器的状态。解决方法:在设置波特率为9600b/s的状态下,需要计算校验码值通过长度值与参数值的异或运算得出。如果校验码正确会返回“OK”参数否则无返回。系统实物图和演示效果详见附录,此次设计采用PCB板制作MP3播放器,使其更加小巧便携,既可通过按键控制播放器也可使用手机蓝牙无线控制播放器,并且效果显著,本系统设计要求已基本实现。结论本系统设计通过深刻的理论思路分析,合理地选择了较为可行的方案。该方案是基于单片机的MP3播放器设计,采用OLED显示屏实时显示音乐播放信息,例如播放歌曲名、音量、播放进度、模式及曲目量,并且实现MP3格式音乐的流畅播放及对音频文件的存储功能。解码模块不断地从存储设备中提取音频文件并自动解码然后送至功放或者耳机播放音乐,单片机主要提取音乐文件的音乐播放信息,通过OLED显示屏给予显示,以及实时发送命令控制音频解码模块。另外该设计选用BY8001解码器将存储介质中的MP3格式的音频文件解压送至喇叭播放音乐。省去了单片机从FAT16文件的扇区提取数据间接地送给解码器解码等操作,加快了解码的运行速度,并且采用了OLED显示屏显示播放信息,是现今数码显示设备的首选,相比LCD显示屏具有更好的显示效果更贴切于实际。本论文的又一特色是使用了蓝牙模块控制播放器,在其他的MP3播放器中是较为新颖的,况且蓝牙播放器在现今发展潜力很大,是未来几年音乐播放器领域的强有力的发展方向。设计中主要难点在与程序编程方面,尤其在接发串口的数据处理,在编写之前做了大量的学习准备工作,须熟悉单片机与外围串口设备通讯的机制以及进行大量的反复编程调试。从课题选择到完成毕业论文的完成,少不了大学四年所学的专业知识,并且经过一步步的研究、查阅、讨论、调试才能够完成整个环节的任务。这不仅提升了自身的学习和资料收集能力,更让自己感受项目的完成,必须要有脚踏实地,坚持不渝的品质。致谢我一直认为自己是个有好运的人,在人生的每个阶段都能有贵人相助,今天能够顺利完成本次毕业设计与曾经帮助过我的人是分不开的,至此表示感谢。首先要感谢的是指导我毕业设计的指导老师刘树博老师,刘树博老师学识渊博,待人亲切,为人谦逊。在此次的系统设计期间,密切地关注了学生的毕业设计进度,不忘提出有针对性的建议。每次在耗材选择和理论分析上遇到问题惑而不解时询问刘树博老师,他总能及时地和学生讨论,给出确实有效的建议。刘树博老师在工作上认真稳重,精益求精,表现出特有的学者风范,让我由衷钦佩,这将对我日后的工作中起到很大及促进作用。还用感谢我的搭档黄志同学,在系统设计上给予我很大的启发,一起完成了这的毕业设计,并且他那鼓舞人心的热情鼓舞着我,致使我遇到问题时以一种平和的心态面对,而不会焦灼不安。感谢大学期间的单片机老师朱兆优先生,他让我打下了夯实的单片机知识基础,才让我在这次的毕业设计中不会显得那么束手无策。感谢身边的老师,同学对我的支持和帮助,感谢东华理工大学对我的培养,提供给我们美好的学习环境,让我深知作为的一名学生的义务,责任及使命,体会人生的价值和意义。最后我要感谢我的父母,谢谢他们的养育之恩以及一直以来给我的支持,提供给我上大学的机会,使我有幸能接触到更大更广的视野。参考文献[1]范红刚,魏学海,任思璟.51单片机自学笔记.北京航空航天大学出版社,2010.1[2]谭浩强.C程序设计第四版[M].北京清华大学出版社,2010.[3]谭浩强.C语言程序设计学习辅导[M].北京.北京清华大学出版社,2007.[4]朱兆优,陈坚,邓文娟.单片机原理与应用.北京:电子工业出版社,2012.7[5]钟国文,贾卫华.电路CAD设计.北京:北京理工大学出版社,2009.8[6]童诗白,华成英.模拟电子技术基础.2006北京:清华大学[7]谷树忠,姜航.AltiumDesigner教程-原理图、PCB设计与仿真.北京电子工业出版社[8]于振南.嵌入式FAT32文件系统设计与实现[M].北京:北京航空航天大学出版社,2014.[9]郭天祥.新概念51单片机C语言教程[M].北京:电子工业出版社,2009.[10]中景园电子.0.96寸OLED显示屏使用手册.淘宝[11]何谐,唐大权,张淑廷,陈雪.一种基于51单片机的音乐播放器的设计[J].现代电子技术,2014,第37卷(16期)[12]中国产业调研网.中国MP3播放器行业现状分析与发展前景研究报告[R].2015[13]李军.便携式MP3播放器的方案分析及其技术研究[J].电声技术,2004(7):27⁃29.[14]STC12C5A60S2Handbook[EB/OL].[15]Atmel.AT83C51SND1CUsers'Guide[Z].2005.[16]TC35iATCommandSetV03.01.http:.附录一电路原理图图1MP3播放器原理图附录二实物图图2实物图附录三元件清单元器件名称元器件规格数量(个)电解电容10μF1电解电容470μF1瓷片电容30pF2瓷片电容1041按键6×6×5mm39自锁开关8.5×8.51电源接口Header2H1喇叭3W1OLED显示屏0.96寸1解码模块BY8001-16P1单片机STC12C5A60S21蓝牙模块HC-061晶振11.0592MHz1电阻1KΩ,1OKΩ,3KΩ,30Ω1,1,1,2USB母口A型1附录四程序代码Main.c#include"REG51.h"#include"oled.h"#include"bmp.h"#defineS2RI0x01sfrAUXR=0x8E;sfrIE2=0xAF;sfrBRT=0x9C;sfrS2CON=0x9A;sfrS2BUF=0x9B;#defineucharunsignedchar#defineuintunsignedintuinttimes,timer;uchardat[20],bz,bits,time,ACIS,shu[4],bits,vox=15;ucharsec,min,min1,sec1,mode,audio,vol=15,state,EQ,ms;uintsum,sum_song;bitSD,Again,wc;uinta;ucharn;ucharonce;voiddelay(uintT){ while(T--);}voidwrite_send(uchardat) //发送一个字节数据给BY8001{ SBUF=dat; while(!TI); TI=0;}voidsend_6(uchara1,a2,a3,a4,a5,a6) //发送六个字节数据给BY8001{ uchara7; write_send(a1); write_send(a2); write_send(a3); write_send(a4); a7=a2^a3^a4; // 异或 write_send(a7); write_send(a6);}voidsend_5(uchara1,a2,a3,a4,a5) //发送五个字节数据给BY8001{ uchara6; write_send(a1); write_send(a2); write_send(a3); a6=a2^a3; //异或 write_send(a6); write_send(a5);}voidshow(){ a=7*sum_song-3;OLED_ShowChar(16,2,0x30+min/10%10); OLED_ShowChar(24,2,0x30+min%10); OLED_ShowString(32,2,":"); OLED_ShowChar(40,2,0x30+sec/10%10); OLED_ShowChar(48,2,0x30+sec%10); OLED_ShowString(56,2,"-"); OLED_ShowChar(64,2,0x30+min1/10%10); OLED_ShowChar(72,2,0x30+min1%10); OLED_ShowString(80,2,":"); OLED_ShowChar(88,2,0x30+sec1/10%10); OLED_ShowChar(96,2,0x30+sec1%10); OLED_ShowCHinese(96,0,0); OLED_ShowChar(112,0,0x30+vox/10%10); OLED_ShowChar(120,0,0x30+vox%10); OLED_ShowChar(0,4,0x30+sum_song/100%10); OLED_ShowChar(8,4,0x30+sum_song/10%10); OLED_ShowChar(16,4,0x30+sum_song%10); OLED_ShowString(24,4,"/"); OLED_ShowChar(32,4,0x30+sum/100%10); OLED_ShowChar(40,4,0x30+sum/10%10); OLED_ShowChar(48,4,0x30+sum%10); OLED_ShowCHinese(0,6,a); OLED_ShowCHinese(16,6,a+1); OLED_ShowCHinese(32,6,a+2); OLED_ShowCHinese(48,6,a+3); OLED_ShowCHinese(64,6,a+4); OLED_ShowCHinese(80,6,a+5); OLED_ShowCHinese(96,6,a+6); switch(EQ) //音效显示 { case0:OLED_ShowString(80,4,"N"); break; case1: OLED_ShowString(80,4,"P"); break; case2:OLED_ShowString(80,4,"R"); break;case3: OLED_ShowString(80,4,"J"); break;case4: OLED_ShowString(80,4,"C"); break;case5: OLED_ShowString(80,4,"B"); break;} switch(state) //播放状态显示 { case0:OLED_ShowCHinese(96,4,1); break;case1:OLED_ShowCHinese(96,4,3); break;case2:OLED_ShowCHinese(96,4,2); break;}switch(mode) //播放模式显示{ case0:OLED_ShowString(112,4,"A"); break;case1: OLED_ShowString(112,4,"F"); break;case2: OLED_ShowString(112,4,"O"); break;case3: OLED_ShowString(112,4,"R"); break;case4:OLED_ShowString(112,4,"N"); break;}if(SD==0) //U盘/SD卡显示{OLED_ShowString(112,6,"U");}else{OLED_ShowString(112,6,"S"); }}voidread_dat(){ if(state!=1&&ACIS>7)ACIS=0; switch(ACIS) { case0: send_5(0x7E,0x03,0x13,0x01,0xEF);// 播放模式 break; case1: send_5(0x7E,0x03,0x12,0x01,0xEF);// 查看当前EQ音效 break; case7: send_5(0x7E,0x03,0x10,0x01,0xEF);// 播放状态 break; case2: send_5(0x7E,0x03,0x1C,0x01,0xEF);// 歌曲播放时间 break; case3: send_5(0x7E,0x03,0x1D,0x1e,0xEF);// 歌曲总时间 break; case4: send_5(0x7E,0x03,0x18,0x01,0xEF);// 查看当前设备US break; case5: if(SD==1) { send_5(0x7E,0x03,0x15,0x01,0xEF); //SD卡总曲目 }else { send_5(0x7E,0x03,0x16,0x01,0xEF); //U盘总曲目 } break; case6: if(SD==1) { send_5(0x7E,0x03,0x19,0x01,0xEF); //SD播放当前曲目数 }else { send_5(0x7E,0x03,0x1A,0x01,0xEF); //U盘当前曲目 } break; } }voidkey(){ ucharfs=255; P0=0xff; if((P0!=0xff)||(n!=0)) { delay(1000); //消除按键抖动 P0=0xff;if(P0!=0xff||(n!=0)) { if(P0==0xff) {fs=n;} else{fs=P0;} time=0; P0=0xff; while(P0!=0xff) { if(time>39&&Again==0) { Again=1; // time=40; switch(fs) { case0xfe: //音量+ if(vol<30)vol=15; if(vox<30)vox++; send_6(0x7E,0x04,0x31,vox,0x22,0xEF); break; case0xfd: if(vol>0)vol=15; if(vox>0)vox--; //音量— send_6(0x7E,0x04,0x31,vox,0x22,0xEF); break; case0xfb: times+=28; if(times>timer)times=timer; //快进 min=times/600; sec=times/10%60; send_5(0x7E,0x03,0x0A,0x09,0xEF); break; case0xf7: if(times>27)times-=28; //快退 elsetimes=0; min=times/600; sec=times/10%60; send_5(0x7E,0x03,0x0B,0x08,0xEF); break; } } show(); // read_dat(); } switch(fs) { case0xfe: if(time<40) { send_5(0x7E,0x03,0x04,0x07,0xEF); //上一首 state=1; once=1; ACIS=6; } break; case0xfd: if(time<40) { send_5(0x7E,0x03,0x03,0x00,0xEF); //下一首 state=1; once=1; ACIS=6; } break; case0xfb: if(time<40) //短按快进 { times+=27; if(times>timer)times=timer; min=times/600; sec=times/10%60; send_5(0x7E,0x03,0x0A,0x09,0xEF); } break; case0xf7: if(time<40) //短按快退 { if(times>26)times-=27; elsetimes=0; min=times/600; sec=times/10%60; send_5(0x7E,0x03,0x0B,0x08,0xEF); } break; case0xef: if(state==2|state==0) { state=1; send_5(0x7E,0x03,0x01,0x02,0xEF); //播放歌曲 }else { state=2; send_5(0x7E,0x03,0x02,0x01,0xEF); //暂停歌曲 } break; case0xdf: state=0; send_5(0x7E,0x03,0x0E,0x0D,0xEF); //停止歌曲 break; case0xbf: EQ=(EQ+1)%6; send_6(0x7E,0x04,0x32,EQ,0x36,0xEF); //设置音效 break; case0x7f: mode=(mode+1)%5; //设置循环模式 send_6(0x7E,0x04,0x33,mode,0x35,0xEF); break; } } n=0; } }voidmain(){ TMOD=0x21; //定时器T1工作方式2,定时器T0工作方式1 TH1=0xfd; //波特率9600 TL1=0xfd; TH0=0x3c; TL0=0xb0; SCON=0x50; //只发送串口工作方式1 EA=1; //开中断 ES=1; //开串口中断 ET0=1; //开T0中断 TR1=1; //开定时器1 S2CON=0x50; BRT=0XFD; AUXR=0x10; IE2=0x01; LCD1602_cls(); //LCD1206初始化 OLED_Init(); //初始化OLEDOLED_Clear(); LCD1602_Save(ss); //自定义字符 TR0=1; //开定时器0 send_6(0x7E,0x04,0x31,15,0x22,0xEF); //设置音量初值15 while(1) { times=min*600+sec*10; //歌曲当前时间值 timer=min1*600+sec1*10; //歌曲总时间 show(); //显示

温馨提示

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

评论

0/150

提交评论