基于c53单片机的音乐播放器的设计.doc_第1页
基于c53单片机的音乐播放器的设计.doc_第2页
基于c53单片机的音乐播放器的设计.doc_第3页
基于c53单片机的音乐播放器的设计.doc_第4页
基于c53单片机的音乐播放器的设计.doc_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

摘要在当今社会,单片机的应用几乎是无处不在。利用单片机制作的电子产品也成为人们生活、娱乐与工作的不可或缺的设备。在这个竞争激烈的社会,人们对休闲娱乐的追求无疑更高更强烈了。以音乐为例,之前人们都是在家听音乐。现如今,人们已经没有过多的闲暇时间留在家中享受这种天籁之音了。繁重的工作迫使人们放弃 音乐。为了解决这种问题,一些制造商开始制作音乐播放器,于是就有了现今市场上流行的各种音乐播放器。市场上有很多音乐芯片和音乐模块,但这种模块价格昂贵,设计复杂。利用单片机制作的音乐播放器,不仅价格便宜,而且设计简单易行,只需要配合简单的外围电路就可以实现多种功能,备受消费者与电子产品开发者的青睐。本次设计提出一种基于STC89C53单片机的音乐播放器的设计,该音乐播放器与以往普通的音乐播放器相比,功能更加完善。它不仅具有播放音乐同时显液晶显示屏示歌曲名称的基本功能,还能浏览电子书、显示实时时钟信息及温度信息。通过单片机配合外围器件,如液晶显示屏、实时时钟芯片DS1302、温度计数器DS18B20及独立式按键就可以实现上述功能。1 引言 随着科学技术的飞速发展,电子产品的开发越来越受到人们的关注,各种各样的电子产品也进入越来越多人的生活。在众多的电子产品中,音乐播放器备受人们的青睐。目前市场上流行的音乐播放器音质相当好。但遗憾的是,这些音乐播放器的功能都比较单一。除了具有选择曲目和显示歌曲名称外,一般情况下都不再具有其他功能。随着音乐播放器市场的激烈竞争以及人们对音乐播放器的要越来越高,功能简单的音乐播放器已不再能够满足人们的需求,由此制造商从各个方面提升音乐播放器的附加功能,以此来扩大音乐播放器的适用领域。市场上有很多音乐模块或者音乐芯片,可以直接产生各种曲子,但这种模块价格比较昂贵,电路结构也较复杂。现当今,单片机的应用无处不在。利用单片机控制音乐播放也多不胜举,利用单片机存储音乐,控制播放最为广泛。它有功能多、价格优、外部电路简单的特点,深受音乐爱好者及音乐芯片制造商的青昧,用单片机配合蜂鸣器就能够产生简单的音乐,配合液晶显示器就能够实现液晶显示,再或者配合按键就能够实现按键控制。总之,用单片机配合简单的外围电路就能够实现多种功能要求。2 单片机基础知识介绍2.1 单片机概述单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲,一块芯片就成了一台计算机。 MCS-51单片机是美国INTEL公司于1980年推出的产品,与MCS- 48单片机相比,它的结构更先进,功能更强,在原来的基础上增加了更多的电路单元和指令,指令数达111条,MCS-51单片机可以算是相当成功的产品,一直到现在,MCS-51系列或其兼容的单片机仍是应用的主流产品,各高校及专业学校的培训教材仍与MSC-51单片机作为代表进行理论基础学习。MCS-51系列单片机主要包括8031、8051和8751等通用产品。DP-51S单片机仿真实验仪是由广州致远电子有限公司设计的DP系列单片机仿真实验仪之一,是一种功能强大的单片机应用技术学习、调试。2.2 单片机的应用领域 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分为如下几个范畴:1. 在智能仪器仪表的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。2. 在家用电器中的应用可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭煲、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在3. 在工业控制中的应用用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。4. 在计算机网络和通信领域中的应用现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机、电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。5. 单片机在医用设备领域中的应用单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。 此外,单片机在工商、金融、科研、教育、国防航空等领域都有着十分广泛的用途。2.3 单片机的发展趋势 单片机现在可以说是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流C51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供了广阔的天地。纵观单片机的发展过程,可以预示单片机的发展趋势,大致有:1. 微型单片化现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(RAM)、只读程序存储器(ROM)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)、WDT(看门狗)、有些单片机将LCD(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。2. 低功耗CMOS化MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各 个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。像80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于要求低功耗像电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。 3. 主流与多品种共存现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATMEL公司的产品和中国台湾的Winbond系列单片机。所以80C51占据了半壁江山。而Microchip公司的PIC精简指令集合(RISC)也有着强劲的发展势头,中国台湾的HOLTEX公司近年的单片机产量与日俱增,与其底价质优的优势,占据一定的市场份额。此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补、相辅相成、共同发展的道路。九十年代以后,单片机在结构上采用双CPU或内部流水线,CPU位数有8位、16位、32位,时钟频率高达20MHZ,片内带有PWM输出、监视定时器WDT、可编程计数器阵列PCA、DMA传输、调制解调器等。芯片向高度集成化、低功耗方向的发展,使得单片机在大量数据的实时处理、高级通信系统、数字信号处理、复杂工业过程控制、高级机器人以及局域网等方面得到大量应用。这类单片机有NEC公司的MPD7800,MITSUBISHI公司的M337700,REVKWELL公司的R6500。3 系统硬件原理及设计3.1 设计概述基于单片机的音乐播放器可应用于MP3,MP4,扩音器等很多方面,并可作为很多系统的辅助功能,作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括“Do”、“Re”、“Me”等音阶在内的各种频率的声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,我设计了一款多功能音乐播放器,本播放器分为按键控制模块、液晶显示模块和放音模块。本播放器可实现浏览电子书、播放音乐及显示实时时钟信息和当前温度值功能。通过按键控制可实现曲目选择和电子书翻页及在不同功能间切换。液晶显示器可以显示曲目名称、电子书内容及实时时钟信息和当前温度值。核心器件我采用了STC89C53单片机,本播放器具有电路简单,功能强大,易于拓展等特点。3.2 STC89C53芯片介绍系统微处理器采用宏晶科技公司的8位单片机STC89C53,该单片机是8位高性能MCU,超低功耗:掉电模式下典型功耗0.5uA,空闲模式下典型功耗2mA,正常工作下典型功耗47mA。具有8K Flash存储器,512Kb RAM、 EEPROM、降低EMI功能、 ISP(在系统编程)功能。单片机内部的看门狗电路经过特殊处理,是真正的看门狗,可放心省去外部看门狗。缺省为关闭,打开后无法关闭,单倍速和双倍速可反复设置。另外,掉电模式可由外部中断唤醒,特别适合于电池供电系统。3.3 液晶显示器简介在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通用器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是汉字、数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光二极管、LED数码管、液晶显示器。发光二极管和LED数码管比较常用,软硬件都比较简单。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。在单片机系统中应用液晶显示器作为输出器件有以下几个优点:(1)显示质量高由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器那样需要不断刷新新亮点。因此,液晶显示器画面质量高且不会闪烁。(2)数字式接口液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。(3)体积小、重量轻液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。(4)功耗低相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。本设计采用LCD1602作为液晶显示屏。1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别。3.3.1 LCD1602显示原理液晶显示的原理是利用液晶的物理特性, 通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,这样显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。3.3.2 LCD1602主要技术参数显示容量:162个字符芯片工作电压:4.5V5.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm3.3.3 LCD1602引脚功能说明1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下所示: 第1 脚:VSS为地电源。第2 脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5 脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6 脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。第16脚:背光源负极。3.3.4 LCD1602的指令说明1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。 指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。 指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。 指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。 指令7:字符发生器RAM地址设置。 指令8:DDRAM地址设置。 指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据。 指令11:读数据。在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。LCD1602在写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是显示位置加80H。3.4 实时时钟芯片DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与微处理器进行同步通信,即SCLK(7)、I/O(6)、RST(5)。DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。 此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 DS1302增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。 3.4.1 引脚功能及结构DS1302的引脚功能如表1所示:表1 DS1302引脚功能表引脚号引脚名称功能1VCC2主电源2、3X1、X2振荡源,外接32768Hz晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。I/O为串行数据输入输出端(双向),后面有详细说明。SCLK始终是输入端。 DS1302的外形及内部结构如图1所示:图1 DS1302外形及内部结构3.4.2 DS1302的工作原理DS1302与微处理器进行数据交换时,首先由微处理器向电路发送命令字节,命令字节最高位MSB(D7)必须为逻辑1,如果D7=0,则禁止写DS1302,即写保护;D6=0,指定时钟数据,D6=1,指定RAM数据;D5D1指定输入或输出的特定寄存器;最低位LSB(D0)为逻辑0,指定写操作(输入),D0=1,指定读操作(输出)。控制字节总是从最低位开始输出。 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。 3.5 DS18B20芯片介绍DS18B20数字温度计以9位数字量的形式反映器件的温度值。可以测量-55度到+125度范围内的温度,分辨力为0.5度。该芯片通过一个单线接口接收与发送信息,因此与中央微处理器之间只需要一根连接线即可。该芯片有两种供电方式。一种是由外部+5V电源直接供电。此时,芯片引脚VDD接外部电源,GND接地;另一种是使用寄生电源。此时,电源从数据线本身获得。在信号线处于高电平期间把能量储存在内部电容里,在信号线处于低电平期间消耗电容上的电能工作,直到高电平到来再次给寄生电源(电容)充电。由于DS18B20依靠一个单线接口通讯,在这种条件下,必须首先建立ROM操作协议,才能进行存储器和控制操作。因此,控制器必须首先提供下列5个ROM操作命令之一:(1)读ROM(2)匹配ROM(3)搜索ROM(4)跳过ROM(5报警搜索。当总线上挂有多个DS18B20器件时,通过这些命令可以区分每个器件。本设计中采用单总线上挂接一个DS18B20。成功完成一次ROM操作命令后,就可以对DS18B20进行读写操作了。总线控制器可以提供六个存储器和控制器命令中的任一个。在对DS18B20进行任何操作前之,都必须对其进行初始化。3.5.1 DS18B20测温原理DS18B20内部有两个振荡器。一个是高温度系数振荡器,另一个是低温度系数的振荡器。高温度系数振荡器受温度变化的影响较大,低温度系数的振荡器受温度变化的影响教小。同时, DS18B20内部还有两个减法计数器,分别为减法计数器1和减法计数器2。芯片开始工作后,先将-55度所对应的基数值装入减法计数器1和温度寄存器。之后由高温度系数振荡器来确定一个门周期,在此门周期内对低温度系数振荡器产生的固定频率的脉冲进行减法计数。当减法计数器1减为0时,温度寄存器内的值加1。此时,-55度所对应的基数值再次被装入减法计数器1,继续对低温度系数的振荡器产生的脉冲进行减法计数,直到门周期被关断。减法计数器2对高温度系数振荡器产生的脉冲进行减法计数,当减法计数器2减到0时,门周期被关断,此时停止对温度值的累加计数。这就是DS18B20的测温原理。由于测温过程中,传感器会存在抛物线性,所以测温过程中,还需要有一个斜坡式累加器,它是用来补偿温度传感器的非线性的,以此达到获得较高的分辨力。补偿是通过改变计数器对温度每增加一度所需计数的值来实现的。3.6 系统硬件电路设计前面介绍了各个芯片的结构及工作原理,对它们的使用方法及需要注意的事项有了一定的了解,接下来就需要对系统进行分模块设计硬件电路了。本设计主要分为按键控制模块、液晶显示模块及放音模块,最终实现播放音乐、浏览电子书及显示实时时钟信息和当前温度值的功能。采用单片机配合外围电路即可实现播放器的设计。微处理器采用STC89C53,按键采用独立式按键,液晶显示器采用LCD1602,使用简单的蜂鸣器就可以实现简单音乐的播放。时间信息的获取采用实时时钟芯片DS1302,温度的采集与测量采用温度传感器DS18B20。3.6.1 按键控制模块设计在单片机控制应用系统中,一般都会设置键盘,它是与单片机进行人机交互的最基本途径。常用的键盘有独立式键盘及矩阵式键盘。独立式键盘适用于按键数目较少的场合,矩阵式键盘适用于按键数量多的系统中。在本设计中,需要通过按键控制实现曲目选择、电子书翻页及各功能间切换。由于使用的按键数目较少,因此我采用了独立式键盘。将按键与单片机的P1口相连并接地。图2为按键与单片机的硬件连接电路图。图2 按键与单片机的硬件连接电路图从单片机与键盘的接口处获取的信息实质上是一个开关量。按键没有按下时,P1口为高电平,反之,P1为低电平。当单片机检测到P1口为低电平时,就响应相应的服务子程序,实现既定的功能。3.6.2 液晶显示模块设计在单片机的控制应用系统中,有时需要知道系统输出的具体信息是什么。这时装置就需要外围设备中有显示装置来显示输出信息。一般情况下,与单片机配合使用的显示装置主要有LED数码显示管、二极管和液晶显示器。由于在本设计中需要显示歌曲名称及电子书内容等数字、文字信息,所以我采用了液晶显示器1602。图3为液晶显示器与单片机的硬件连接电路图。图3 液晶显示器与单片机的硬件连接电路图当音乐播放器处于播放音乐模式时,液晶显示屏显示歌曲名称;当音乐播放器处于浏览电子书模式时,液晶显示屏显示电子书内容;当音乐播放器处于显示实时时钟信息及温度值模式时,液晶显示屏显示时间信息及当前温度值。3.6.3 实时时钟信息及温度值采集模块设计一般的音乐播放器只具有播放音乐及浏览电子书功能。在本设计中,我增加了显示实时时钟信息及温度值信息功能。实时时钟信息的采集我采用了实时时钟芯片DS1302来实现。温度信息的采集与测量我选用了温度计数器DS18B20来实现。这两个芯片与单片机的链接都比较简单。其中,DS1302与单片机只需要连接三根线就能实现两者间的通信。DS18B20与单片机的连线更简单,只需要连接一根线就足以实现两者间数据与指令的传递。图4为DS1302和DS18B20与单片机的硬件连接电路图。图4 DS1302和DS18B20与单片机的硬件连接电路图。3.6.4 放音模块设计利用单片机设计的音乐播放器,外围电路只需要配合简单的蜂鸣器就可以实现对音乐的播放。图5为放音模块硬件电路图。图5 放音模块硬件电路图3.6.5 系统整体硬件电路设计各模块设计完成后,组合在一起即为系统的整体硬件电路。如图6所示。图6 系统整体硬件电路图4 系统软件原理及设计本设计为多功能音乐播放器,主要分为按键控制模块、液晶显示模块、放音模块三部分,可以实现播放音乐功能、显示实时时钟信息功能、显示温度值功能、浏览电子书功能。液晶显示模块主要用来显示实时时钟信息、显示温度值、显示电子书内容及当前所播放曲目的名称。液晶显示器采用LCD1602。按键控制模块控制曲目的选择及电子书的翻页。放音模块用来播放已经存储好的音乐。在软件设计过程中,采用分模块进行设计的方法,逐步实现播放器的各功能。4.1 放音模块设计乐曲中不同的音符,实质就是不同频率的声音。通过单片机产生不同的频率的脉冲信号,由蜂鸣器放出,就产生了美妙和谐的乐曲。一般来说单片机不像其他专业乐器那样能奏出多种音色的声音,即不包含相应幅度的谐波频率,单片机演奏的音乐基本都是单音频率。要想使用单片机演奏音乐,就需要弄清楚音调和节拍两个概念。音调表示一个音符唱多高的频率。节拍表示一个音符唱多长的时间。4.1.1 音调的形成所谓音调是音乐学中的名词,与平时所说的音高十分类似。在音乐中常把中音C上方的A音定为标准音高,其频率f=440Hz,其余音均与其进行比较。f1和f2为两个音符,如果这两个音符的频率相差一倍时,也即f2=2*f1时,则称f2比f1高一个倍频程。在音乐中音符1(do)与音符,音符2(来)与音符等等之间正好相差一个倍频程,在音乐学中称它相差一个八度音。在一个八度音内,有12个伴音。以1八音区为例,12个伴音是:1#1、#12、2#2、#23、34、4#4、#45、5#5、#56、6#6、#67、7。由于人耳听觉的效果,这12个音阶的分度基本上是以对数关系来划分的。只要知道了这12个音符的音高,也就是其基本音调的频率,就可根据音符之间的倍频程关系得到其他音符基本音调的频率。知道了一个音符的频率后,便可以让单片机发出相应频率的振荡信号,从而产生相应的音符声音。一般说来,常采用的方法就是通过单片机的定时器进行定时中断,在中断服务程序中将单片机上外接扬声器的I/O口来回置高电平或置低电平,从而让蜂鸣器发出声音。为了让单片机发出不同频率音符的声音,只需要将定时器预置不同的定时值就可实现。以标准音高A为例,介绍如何确定一个频率所对应的定时器的定时值。标准音高A的频率f=440Hz,其对应的周期为:T=1/f=1/440=2272us因此需要在单片机I/O端口输出周期为T=2272us的方波脉冲。单片机输出高电平和低电平信号均为t=T/2=2272/2=1136us也就是说,单片机上定时器的中断触发时间为1136us。如果单片机采用定时器为工作方式1,它以振荡器的十二分频信号为计数脉冲。设外接晶振的振荡器频率为f,则定时器的预置初值由下式来确定: t=12*(count-THL)/f式中,count=65536,THL为定时器待确定的计数初值。因此定时器的高低计数器的初值为 TH=THL/256=(count-t*f/12)/256 TL=THL%256=(count-t*f/12)%256 如果单片机外接12MHz的晶振,则f=12MHz。将t=1136us和f=12MHz代入上面两式,即可求出标准音高A在单片机定时器工作方式1下的定时器高低计数器的初值为 TH0=(65536-1136*12/12)/256=FBH TL0=(65536-1136*12/12)%256=90H根据上面的求解方法,我们就可以求出其他音调相应的计数器的预置初值。4.1.2 节拍的产生在一张完整乐谱的开头,都有如1= C 4/4、1=G 3/4等等的标识。这里1=C,1=G表示乐谱的曲调,简单地说就是跟音调有关系;这里4/4、3/4用来表示节拍。对于音符的节拍,这里以3/4为例加以说明。它表示乐谱中以四分音符为节拍,每一小节有三拍。对于一拍的发音时间,如果乐曲没有特殊说明,一般说来,一拍的时长大约为400450ms。如果这里规定一拍的时长为400ms,那么以四分音符为节拍时,四分音符的时长为400ms,八分音符的时长为200ms,十六分音符的时长为100ms。从而,在单片机上可以采用循环延时的方法来实现控制一个音符唱多长的时间。首先,需要编写一个精确的基本时长的延时程序,比如说以十六分音符的时长为基本的延时时间,那么,对于一个音符,如果它为十六分音符,则只需要用一次延时程序,如果它为四分音符,则只需要调用四次延时程序,如果它为二分音符,则只需要调用八次延时程序,依次类推。4.1.3 单片机演奏音乐的方法前面介绍了基本音符的音调和节拍,并详细讲解了如何在单片机系统中来实现一个基本的音符。在单片机上实现音乐播放,一般只需要逐个播放音符即可。用单片机播放音乐的方法如下:(1)初始化单片机定时器;(2)将乐谱中的每个音符的音调及节拍变换成相应的音调参数和节拍参数;(3)将乐谱中音符的参数做成数据表格,存放在存储器中;(4)通过程序取出一个音符的相关参数,驱动蜂鸣器播放该音符;(5)该音符唱完后,接着取出下一个音符的相关参数,如此直到播放完毕最好一个音符,根据需要也可循环不停地播放整个乐曲。需要注意的是,对于一个乐曲中的休止符,一般将其音调参数设为FFH,而其节拍参数为00H来表示即可。4.2 液晶显示模块设计 在本设计中,液晶显示器采用LCD1602。它是字符型液晶显示模块。通过微处理器对液晶显示器写入相应的命令,就可以实现液晶屏显示数字和字符。本设计采用液晶显示器显示曲目名称及电子书内容和实时时钟信息与温度值。下图为液晶显示器通用的操作流程图:设置模式清屏写入命令设置显示位置写数据初始化检测忙信号图7液晶显示器操作流程图在液晶显示字符之前,需要先将要显示的内容存入数据存储器,当液晶显示器接受到相应的指令时,自动从数据存储器中读取已存在的内容送往液晶显示器显示。下面的程序是液晶显示模块的软件设计:#include#include/*定义液晶显示器与单片机的引脚连接*/sbit rs=P20;sbit rw=P21;sbit e=P22;/*将需要显示的内容写入程序存储器*/unsigned char code dis1=ZuiLangManDeShi; unsigned char code dis2=Ye Qu;/*延时1ms*/void dely(unsigned char ms)unsigned char i;while(ms-)for(i=0;i100;i+)_nop_();_nop_();_nop_();_nop_();/*检测液晶显示器忙信号*/bit lcd_bz()bit result;rs=0;rw=1;e=1;_nop_();_nop_();_nop_();_nop_(); result=(bit)(P0&0x80);e=0;return result;/*写命令*/ void lcd_wcmd(unsigned char cmd) while(lcd_bz();rs=0;rw=0;e=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();_nop_();_nop_();e=1;_nop_();_nop_();_nop_();_nop_();e=0; /*设置显示位置*/ void lcd_pos(unsigned char pos) lcd_wcmd(pos|0x80); /*写数据*/void lcd_wdat(unsigned char dat)while(lcd_bz();rs=1;rw=0;e=0;P0=dat;_nop_();_nop_();_nop_();_nop_();e=1;_nop_();_nop_();_nop_();_nop_();e=0;/*初始化*/void lcd_init()lcd_wcmd(0x38);dely(1);lcd_wcmd(0x0c);dely(1);lcd_wcmd(0x80);dely(1);lcd_wcmd(0x06);dely(1);lcd_wcmd(0x01);dely(1);/*液晶显示主函数*/void main(void)unsigned char i;lcd_init();/ 初始化LCDdelay(10);lcd_pos(0x01);/设置显示位置i = 0;while(dis1i != 0)lcd_wdat(dis1i);/显示字符i+;lcd_pos(0x42);/ 设置显示位置i = 0;while(dis2i != 0)lcd_wdat(dis2i);/ 显示字符i+;while(1);将以上程序烧录到主芯片后,就可以通过单片机控制液晶显示器显示字符及数字。4.3 实时时钟信息采集模块此款音乐播放器不仅能够播放音乐,还能显示实时时钟信息。本设计采用DS1302实时时钟芯片采集时钟信息。DS1302与CPU的连接只需要三条线,即SCLK(7)、I/O(6)、RST(5),硬件联系较为简单,便于单片机对DS1302的读写操作。其中,实时时钟信息的显示用LCD1602。实际上,在调试程序时可以不加电容器,只加一个32.768kHz的晶振即可。只是选择晶振时,不同的晶振,误差也较大。在对DS1302芯片进行读写操作前,需要先对其进行初始化,以确保能够准确的读写芯片,使芯片更精确的实现既定功能。以下程序是实时时钟信息模块的软件设计:/*定义DS1302与单片机的引脚连接*/sbit SCLK=P24;sbit DATE=P25;sbit RST=P23;/*向1302写数据*/void Write1302(unsigned char date) unsigned char i;SCLK=0;delaynus(2);for(i=0;i=1; /*根据相应的命令输入相应的数据*/ void WriteSet1302(unsigned char cmd,unsigned char date) RST=0;SCLK=0;RST=1;Write1302(cmd);delaynus(5);Write1302(date);SCLK=1;RST=0; /*读取1302数据*/ unsigned char Read1302(void) unsigned char i,date;delaynus(2);for(i=0;i=1;if(DATE=1)date|=0x80;SCLK=1;delaynus(2);SCLK=0;delaynus(2);return date; /*根据命令读取1302相应的值*/unsigned char ReadSet1302(unsigned char cmd)/根据命令读取1302相应的值unsigned char date;RST=0;SCLK=0;RST=1;Write1302(cmd);delaynus(2);date=Read1302();SCLK=1;RST=0;return date;/*初始化*/void IntDS1302(void) unsigned char flag; flag= ReadSet1302(0x81);if(flag&0x80) WriteSet1302(0x8E,0x00); WriteSet1302(0x80,(0/10)4|(0%10); WriteSet1302(0x82,(0/10)4|(0%10); WriteSet1302(0x8a,(0/10)4|(0%10); WriteSet1302(0x84,(0/10)4)*10+(value&0x0f);display_Second(seconds);lcd_pos(0x06);lcd_wdat(line0);value=ReadSet

温馨提示

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

评论

0/150

提交评论