基于单片机的音频播放器及文本浏览器设计 - 图文

更新时间:2024-06-05 12:52:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

本科毕业论文(设计)

题 目:

音频播放器及文本浏览器设计

学 院: 自动化工程学院 专 业: 电子信息科学与技术 班 级: 2008级1班 姓 名: 高 森 指导教师: 章 平

2012年 6 月 10 日

青岛大学本科生毕业论文(设计)

The Design Of Audio Player And Text Browser

青岛大学本科生毕业论文(设计)

摘 要

通过移植FAT32文件系统到单片机,运用单片机的控制功能,从SD卡中读取音频文件和文本文件,分别利用单片机硬件SPI串行数据接口送音频数据到音频解码器解码,实现音频播放功能,和模拟SPI串行数据接口送文本数据到液晶显示器显示,实现文本浏览功能,以及外围时钟芯片、温度传感器实现时间及温度的显示,设计完成了一款实用的多功能播放器。硬件部分主要由单片机、音频解码器、液晶显示模块、SD卡模块四大部分组成。 关键词 单片机 FAT32文件系统 音频解码器 液晶显示 SD卡

Abstract

By transplanting FAT32 file system to the MCU, and using the control functions from it, We can Read audio files and text files from the SD card, and use the single-chip hardware SPI serial data interface to send audio data to an audio decoder decoding, we can realize the audio-play function,also we can simulate the SPI serial data interface to send text data to the LCD display to realize the text browser function, and using the clock chip, temperature sensors, we can realize time and temperature display, sum up above-mentioned functions finally we made a practical multi-function player. The part of hardware were composed of Microcontroller, Audio decoder, LCD module,and SD card module.

Keywords Microcontroller FAT32 file system Audio decoder LCD SD card

青岛大学本科生毕业论文(设计)

目 录

前 言 ............................................................................................................................... 1 第1章 设计内容 ........................................................................................................... 2

1.1 系统设计任务 ...............................................................................................................................2 1.2 总体设计方案论证 .......................................................................................................................2 1.3 音频播放方案论证 .......................................................................................................................3 1.4 文本浏览方案论证 .......................................................................................................................3

第2章 设计思路 ........................................................................................................... 4

2.1 总体设计 .......................................................................................................................................4 2.2 控制部分设计 ...............................................................................................................................5 2.2.1 单片机主要功能特性 ............................................................................................................5 2.2.2 引脚功能及管脚电压 ............................................................................................................6 2.2.3 I/O口 ......................................................................................................................................6 2.2.4 片上资源 ................................................................................................................................8 2.2.5 新增扩展功能 ........................................................................................................................8 2.3 显示部分设计 .............................................................................................................................10 2.3.1 本设计中液晶显示原理 ......................................................................................................10 2.3.2 模块接口说明 ...................................................................................................................... 11 2.3.3 读写时序 ..............................................................................................................................12 2.4 音频解码器 .................................................................................................................................13 2.4.1 MP3文件简介 .....................................................................................................................13 2.4.2 电气特性 ..............................................................................................................................14 2.4.3 相关寄存器设置 ..................................................................................................................14 2.4.4 SPI时序图 ...........................................................................................................................15 2.4.5 模块引脚说明 ......................................................................................................................15 2.5 SD卡模块 ...................................................................................................................................16

第3章 硬件电路设计 ................................................................................................. 17

3.1 单片机模块原理图 .....................................................................................................................17 3.2 LCD12864液晶模块原理图 ......................................................................................................18 3.3 VS1003音频解码器模块原理图 ...............................................................................................18

青岛大学本科生毕业论文(设计)

3.4 SD模块原理图 ...........................................................................................................................19 3.5 DS1302时钟模块原理图 ...........................................................................................................19 3.6 DS18B20温度传感器模块原理图 ............................................................................................20 3.7 按键模块原理图 .........................................................................................................................20 3.8 电源模块原理图 .........................................................................................................................21

第4章 软件设计 ......................................................................................................... 22

4.1 开发环境简介 .............................................................................................................................22 4.2 模块化程序设计 .........................................................................................................................22 4.2.1 FAT32文件系统 ..................................................................................................................23 4.2.2 12864液晶驱动 ...................................................................................................................24 4.2.3 VS1003驱动 ........................................................................................................................25 4.2.4 SD卡驱动 ............................................................................................................................26 4.2.5 DS1302、DS18B20驱动 ....................................................................................................26 4.2.6 UART驱动 ..........................................................................................................................27 4.2.7 其他功能函数 ......................................................................................................................28

第5章 系统调试 ......................................................................................................... 38

5.1 调时功能调试 .............................................................................................................................39 5.2 电子书功能调试 .........................................................................................................................40 5.3 MP3功能调试 ............................................................................................................................41 5.4 游戏功能调试 .............................................................................................................................43

结束语 ............................................................................................................................. 44 谢 辞 ............................................................................................................................. 45 参考文献 ......................................................................................................................... 46 附录一(系统原理图) ...................................................................................................... 47 附录二(部分源程序) ...................................................................................................... 48

青岛大学本科生毕业论文(设计)

前 言

世界上首台便携式MP3播放器由韩国世韩(Seahan)公司于1998年率先推出,从此这个新奇的产品就成为了业界乃至大众媒体关注的一个热门话题。人们还仿照日本索尼(Sony)公司出品的随身听WalkMan、DiscMan等,还给MP3播放器起了个名:Mpman。它使用芯片或卡作为存储媒介,无需传统的转动部件,彻底摆脱了磁带和光盘的束缚。因此,MP3播放器可以做的更小巧、更抗震和更省电。从此MP3播放器成为了业界的宠儿。更有人大胆预言:MP3播放器将在五年内彻底占有CD机的市场。然而实际上,随着技术的推进,和市场需求的激增,MP3播放器用了大概十年的时间解决了技术水准、音频质量、版权保护、产品价格、发行方式及消费心理等多方面的因素,基本淘汰了CD播放器[1]。

作为电子技术与数字音响技术的结合,MP3播放器在推出后的几年由于技术的成熟,门槛逐渐放低,制造商大多为名不见经传的带有计算机背景的小公司,于是这为众多的中小电子制造商带来了商机。经过几年的不断发展,然而市场并不如人们当初预计的那样,随着现代通讯产业的飞速发展,特别是手机行业的兴起,功能不断的完善,音、视频播放已成为掌上设备必备的功能之一,现在除了个别树立了品牌效应大厂家,还在做MP3的小厂家已成为廉价的代名词,一款单纯的音频播放器成本价已经控制在10元左右,技术已经相当成熟,作为一名电子专业的毕业生,已经完全可以设计出一款自己的MP3。

本设计旨在运用单片机的控制功能,移植FAT32文件系统到8位单片机,通过读/写SD卡,将音频文件(MP3、WMA、MIDI等)送到音频解码器解码,或文本文件(TXT)送显到液晶显示器,从而实现音频文件的播放和文本的浏览,设计完成一款实用的多媒体浏览器,主要适用于工业、交通等场合。

1

青岛大学本科生毕业论文(设计)

第1章 设计内容

本章基于系统软、硬件设计的基本原理和设计要求,本着易实现、运行稳定、价格低廉的原则,提出设计任务。硬件部分由单片机模块、液晶显示模块、音频解码器模块和SD卡模块等四大部分组成。其中,单片机主要起控制作用,具体控制有:对SD卡的读写操作;对音频解码器的控制;使液晶显示模块实现对文字、图片等内容的显示;以及键盘输入实现人机交互等。

1.1 系统设计任务

本设计的主要任务是设计一个具有音频播放功能和文本浏览功能的电子设备。对于音频播放部分,能够播放常见格式如mp3、wmv等格式的音频文件,且要求音频文件存储于SD卡中,所以能够实现播放大量任意音频文件的功能;对于文本浏览部分,可以阅读txt格式的文本文件,同样在SD卡中可以存储大量的文本文件以供阅读,文本文件的阅读通过液晶进行显示。在以上基本功能的基础上,能够实现时钟的调节与显示、温度的测量与显示以及使用一些简单的按键操作进行娱乐游戏如俄罗斯方块等。

1.2 总体设计方案论证

目前主流的可以实现音频文件播放和文本文件浏览的硬件平台有三种:基于ARM平台、基于DSP平台、基于单片机平台,以下分别对三种平台的优缺点就行论证:

ARM平台:目前主流的智能手持设备都是基于ARM平台,解决方案一般为ARM平台+LINUX操作系统,设计的产品功能强大,但硬件价格较为昂贵,本设计要求设计一个具有音频播放功能和文本浏览功能的电子设备,适用于工业、交通等非专业场合,本着价格低廉的原则,排除该方案。

DSP平台:目前DSP平台主要用于专业音、视频处理和复杂算法的实现,应用场合一般较为专业,本设计原理较为简单,本着易实现的原则,不采用该方案。

单片机平台:目前单片机的应用非常广泛,例如智能家居领域、工业自动化领域、智能仪器仪表、汽车电子与航空电子系统等。对于单片机的应用,首先应该是它的控制功能,而单片机正是具有体积小、功耗低、价格低廉以及控制功能强等优点,所以本设计基于单片机平台。

2

青岛大学本科生毕业论文(设计)

1.3 音频播放方案论证

基于单片机的音频播放实现方案一般有两种:①:采用专用的带有音频处理功能的单片机;②:采用单片机+音频解码器的方案。

采用专用的带有音频处理功能的单片机,例如凌阳单片机,可以实现简单的音频处理,但是单片机的资源相对比较贫乏,不能实现播放大量任意音频文件的功能。

采用单片机+音频解码器的方案可以释放单片机的资源,音频解码的工作可以交给音频解码器处理,单片机只用于控制,可以实现其他功能。本设计采用此方案。

1.4 文本浏览方案论证

基于单片机的文本文件浏览实现方案为:单片机+液晶显示器。而液晶显示器分为两种:带字库和不带字库。不带字库的液晶显示器用来显示中文字符比较麻烦,需要外加字库芯片,实现较为复杂,而带字库液晶解决了这一问题,但是也有不足:固定的字库只能显示固定编码的字符,若文本采用不同的编码,则无法显示。综合考虑采用带字库液晶。

3

青岛大学本科生毕业论文(设计)

第2章 设计思路

2.1 总体设计

本设计主要由单片机模块、液晶显示模块、音频解码器和SD卡模块等四大部分组成,如图2.1所示:

VS1003音频解码器用户SD卡模块MCUSTC12C5A60S2LCD12864DS1302时钟、DS18B20温度传感器等

图2.1 总体设计框图

整个系统使用单片机作为控制器,通过单片机软件编程,对外部功能模块进行控制,进而实现整个设计的功能。设计构成主要包括:

(1) 单片机控制功能:单片机主要起控制作用,具体控制有:对SD卡的读写操作;对音频解码器的控制;使液晶显示模块实现对文字、图片等内容的显示;以及解码键盘输入实现人机

4

青岛大学本科生毕业论文(设计)

交互等。

(2) 音频解码功能:音频解码使用专用的音频解码器,音频解码器在单片机的控制下,对输入的音频文件数据进行解码,转换为模拟的音频信号输出,完成音频解码功能。

(3) 文本浏览功能:液晶显示器采用带字库12864液晶,单片机送显文本文件到液晶,实现电子书功能,通过键盘人机交互实现俄罗斯方块游戏。

(4) SD卡模块功能:SD卡主要用来存储音频文件和文本文件,SD卡作为一种大容量的存储设备,可以存储大量的音频和文本等文件,SD卡模块在单片机的控制下,将存储的音频文件通过音频解码器进行播放、将存储的文本文件通过液晶显示模块进行显示。

(5) 万年历功能:采用时钟芯片DS1302和温度传感器DS18B20实现时间显示和温度显示 (6) 人机交互功能:单片机通过按键检测,进行人机交互,实现其他功能的具体操作和俄罗斯方块游戏的控制。

2.2 控制部分设计

控制部分单片机选用深圳宏晶科技公司的增强型8051内核单片机STC12C5A60S2,速度远大于传统单片机,该单片机采用3.3V-5V供电,片内集成60KB程序Flash、1KB数据Flash(EEPROM)、1280字节RAM、两个16位定时/计数器、44根I/O口线(PDIP封装)、一个硬件SPI接口、两个UART全双工异步串行口、八路10位高速ADC、两个PWM/可编程计数器,而且内部集成了MAX810专用复位电路和硬件看门狗等资源,是8位CPU中功能最为强大的处理器之一[2],芯片如图2.2.1所示:

图2.2.1 STC12C5A60S2外观图

2.2.1 单片机主要功能特性

主要功能特性: 1、CPU字长为8位;

2、40个引脚,采用PDIP-40封装;

5

青岛大学本科生毕业论文(设计)

表2.3 RAM字符地址与液晶显示区域的对应关系

③ 图形显示

显示图形时必需要先写入垂直地址然后才能再写入水平地址,否则显示地址错误,下图为GDRAM的坐标地址的排列方式,注意最左边为最高位。

图2.3.2 GDRAM的坐标地址

2.3.2 模块接口说明

本设计采用8位并行接口,PSB引脚接高电平。

表2.4 LCD模块接口说明

管脚号 管脚名称 1 2 3 4 5 VSS VCC VO RS(CS) R/W(SID) 电平 0V - H/L H/L 管脚功能描述 电源地极 对比度(亮度)调整 当RS为高电平时, 数据位DB7—DB0为显示数据 当RS为低电平时, 数据位DB7—DB0为指令数据 当R/W为高电平,E为低电平,数据被读到DB7——DB0 当R/W为高电平,E为下降沿, DB7——DB0的数据被写入 [6]

3.0+5V 电源正极 11

青岛大学本科生毕业论文(设计)

6 15 16 17 18 19 20 EA(SCLK) PSB NC /RESET VOUT A K H/L H/L H/L - H/L - VDD VSS 使能信号 8位数据线:LSB到 MSB 高电平:8位或4位并口方式,低电平:2线或3线串口方式 空脚 低电平复位有效 LCD输出电压端 背光源正端(+5V) 背光源负端(0V) 7-14 DB0-DB7

2.3.3 读写时序

图2.3.3 MCU写资料到ST7920(8位数据线模式)

图2.3.4 MCU 从ST7920读资料(8位数据线模式)

12

青岛大学本科生毕业论文(设计)

2.4 音频解码器

音频解码器采用芬兰VLSI公司出品的VS1003B芯片,该芯片功能强大但是价格低廉,内置了一颗高性能低功耗的DSP音频处理器核心,具有MP3/WMA/MIDI音频解码和ADPCM编码功能,指令RAM大小为5KBytes,数据RAM大小为0.5KBytes,可兼容SPI串行控制接口、UART串行接口,同时拥有数据输入/输出接口和4个通用I/O口。片内还自带一个可变采样率的ADC用于实时频谱分析,一个立体声DAC以及音频耳放电路用来还原音频信号[7]。芯片外形如下图所示:

图2.4.1 音频解码器外观图

2.4.1 MP3文件简介

MP3是一种目前非常流行的音频压缩技术,全称为:Moving Picture Experts Group Audio

Layer III,即动态影像专家压缩标准音频层面3,我们一般简称其为MP3。

MP3利用了Moving Picture Experts Group Audio Layer III 的技术,以超高压缩率将相对较大的音频源文件压缩成容量非常小的MP3文件,即在最大程度保留原来音质的前提下,以最小的音质损失把音频源文件压缩到最小的程度。正是由于体积小、音质好的优点使得MP3格式的音频文件充斥着整个网络音频领域,甚至人们把用来播放音频文件的播放器简称为MP3,可见其在音频压缩领域中的地位。一般一分钟左右MP3格式的音乐文件大小约为1MB左右,这样每首歌平均下来只有不到5Mb左右[8]。本设计中音频解码器对单片机送来的音频文件进行实时的解码(解压缩),还原出高品质的MP3音乐。

13

青岛大学本科生毕业论文(设计)

2.4.2 电气特性

1)AVDD(模拟部分的内核电压):2.5V—3.6V,最佳工作电压为2.8V; 2)CVDD(数字部分的内核电压):2.4V—2.7V,最佳工作电压为2.5V; 3)IOVDD(I/O电压) :0.6—3.6V,最佳工作电压2.8V; 注:VS1003B模块的AVDD = IOVDD = 3.3V,CVDD = 2.5V。 4)输入时钟频率:12兆赫兹到13兆赫兹,最佳值为12.288兆赫兹;

5)VS1003B内部时钟倍频器:芯片复位默认为1倍频—4.5倍频,推荐值为3.0 3倍频,最大值为4.5倍频用于WMA文件的回放。

2.4.3 相关寄存器设置

音频解码器VS1003B一共有16个16bit的寄存器,地址分别为0x00到 0x0F。在VS1003B初始化后的值均为0(模式寄存器 (MODE,0x00) 和状态寄存器 (STATUS,0x01)除外,其在复位后的初始值分别为0x800和0x3C)[9]。

音频解码器VS1003B功能很强大,不仅可以播放各种主流格式的音频文件,还有录音功能以及其他音频处理的能力,因此相关寄存器较为复杂,本设计中仅使用播放音频文件的功能,以下对播放音频文件时用到的各寄存器做相关介绍:

1)0号寄存器:MODE(地址0x00;R/W,可读/写)模式寄存器,是一个较为重要的寄存器,对应不同的功能设置。常用功能有:

软件复位:即向该寄存器写入0x0804,实现软件复位。 启动测试:即向该寄存器写入0x0820,开启测试。

2)1号寄存器:SCI_STATUS(0x01,R/W,可读/写)状态寄存器,通过读取该寄存器可以知道VS1003B的当前工作状态信息。

3)2号寄存器:SCI_BASS(0x02,R/W)低音/高音设置寄存器。

4)3号寄存器:SCI_CLOCKF(0x3,RW)时钟寄存器,一般播放MP3等音频文件时,向该寄存器写入0x9800,即SC_MULT为4,SC_ADD为3 ,SC_FREQ为0 。

5)11号寄存器:SCI_VOL(0xB,RW)音量控制寄存器,左、右声道音量设置分别为高八位、低八位。音量控制不是按照数值的大小而增减,而是采用衰减倍数来从最大到最小音量的衰减,从0x0000(最大声)到0xFFFF(最小声)以0.5dB步进值递减。需要注意的是要想复位时不改变音量值,则只能软件复位,硬件复位将使SCI_VOL清零(即初始化时为最大音量)。

注:若设置为静音(SCI_VOL = 0xFFFF)则将关闭模拟部分的供电。

14

青岛大学本科生毕业论文(设计)

2.4.4 SPI时序图

图2.4.2 SPI时序图

2.4.5 模块引脚说明

数据片选:VS_XDCS接P1.4; SPI同步时钟: SPI_SCL接P2.1; 数据请求:VS_DREQ接P1.5; 片选信号:VS_XCS接P3.7;

SPI同步数据输出: SPI_SI接P2.0; SPI同步数据输入:SPI_SO接P3.0;

复位信号:VS_XRESET 接P3.6;

15

青岛大学本科生毕业论文(设计)

图2.4.3 VS1003芯片引脚

2.5 SD卡模块

本模块采用弹出式SD卡接口,设计双排插针接口,方便用户设计针孔连接,且内置LM1117系列5V-3.3V稳压芯片,可同时兼容5V、3.3V供电的单片机,模块外形如下图所示:

图2.5 SD卡模块外观图

16

青岛大学本科生毕业论文(设计)

第3章 硬件电路设计

硬件部分采用Altium Designer 6软件进行PCB版图设计,该软件在2005年年底由著名软件

Protel软件的原厂商 Altium公司推出,虽然不是最新版本,但是该版本较稳定,兼容性好而获得广泛的好评。硬件部分也采用模块化设计,以下分别是各个模块具体设计原理图:

3.1 单片机模块原理图

单片机采用由宏晶公司生产的PDIP-40封装的STC12C5A60S2单片机,复位电路采用上电复位加手动复位设计,晶振采用24M外部晶振。

图3.1 单片机模块原理图

17

青岛大学本科生毕业论文(设计)

3.2 LCD12864液晶模块原理图

液晶模块为20脚插针模块,因此在硬件设计时采用20脚母座插针设计,其中使用1K的变阻器进行液晶模块手动亮度调节。

图3.2 LCD12864液晶模块原理图

3.3 VS1003音频解码器模块原理图

音频解码器模块为10脚插针模块,因此在硬件设计时采用10脚母座插针设计,其中VCC为5V供电。

图3.3 VS1003模块原理图

18

青岛大学本科生毕业论文(设计)

3.4 SD模块原理图

SD卡模块为8脚插针模块,因此在硬件设计时采用8脚母座插针设计,由于SD卡模块内置LM1117系列5V-3.3V稳压芯片,因此可以使用5V或3.3V电源均可。

图3.4 SD卡模块原理图

3.5 DS1302时钟模块原理图

时钟芯片采用由美国DALLAS公司推出的低功耗实时时钟电路DS1302,该芯片具有双电源接口设计,可以实现电源供电和电池供电两种供电模式,而且具有涓细电流充电能力,若外接电池采用1000μF大电容,可以满足3-4小时内断电的供电需求,若断电大于5小时以上,则需在初始化时设置时钟。晶振采用32.768kHz 外部晶振[10]。

19

青岛大学本科生毕业论文(设计)

图3.5 DS1302时钟模块原理图

3.6 DS18B20温度传感器模块原理图

温度传感器采用DS18B20芯片,该芯片接线方便,为一线串行接口,工作电压为3.3V-5V,可以和单片机I/O口直接相连。

图3.6 DS18B20温度传感器模块原理图

3.7 按键模块原理图

由于本设计使用按键数目较少,4个按键加上功能复用即可满足要求,因此直接采用I/O口接按键到地,在软件中延时检测低电平即可。

图3.7 按键模块原理图

20

青岛大学本科生毕业论文(设计)

3.8 电源模块原理图

电源部分是一个产品设计的关键,对系统工作的稳定性至关重要,本设计电源从电脑USB口取电(其他5V直流电源也可),经过REG1117-3.3V电压芯片转换,可以输出5V或3.3V两种规格电压。其中10μF和470μF电容为高、低频滤波电容。

图3.8 电源模块原理图

21

青岛大学本科生毕业论文(设计)

第4章 软件设计

4.1 开发环境简介

本设计采用C51语言编写程序,实现单片机对各种功能模块的控制。在单片机早期开发的时候,汇编语言比较很流行,由于介于高级语言和机器语言之间,它可以直接操作硬件,而且指令的执行速度虽然很快,对于早期资源贫乏的单片机来说,是比较理想的开发语言。但其指令格式比较难记忆,编写的程序晦涩难懂,不便于调试、维护和移植,而且受硬件系统的限制比较大,目前已经很少使用。现在单片机硬件运算性能较过去有了显著的提高,单片机的执行速度已经不是首要因素,如今单片机应用的开发过程中时,需要更好的移植和维护,更加注重程序本身的编写效率,所以C51已成为目前主流的单片机开发软件工具[11]。

本设计开发环境采用美国Keil Software公司出品的Keil uVision4,Keil uVision4软件提供了丰富且功能强大的库函数,并且集编辑、编译、连接、调试、仿真等完整的开发流程于一体。编程者仅使用该工具即可完成整个开发过程。具体开发流程如下:

(1)创建一个新工程( Project),并设置工程环境; (2)在该工程下创建C源文件,编写C51程序;

(3)编译、链接程序,按照编译器提示找出错误进行修改,; (4)调试、仿真,检查无误后最后生成.hex文件;

(5)下载单片机可运行目标代码到单片机上的程序ROM中。

4.2 模块化程序设计

整个系统设计较为复杂,因此采用模块化编程思想,具体分为以下几个模块:FAT32文件系统底层驱动、12864液晶驱动、VS1003驱动、SD卡驱动、串口驱动、DS1302和DS18B20驱动、以及其他功能子函数等。

22

青岛大学本科生毕业论文(设计)

LCD12864DS1302 VS1003 按 键 MCU DS18B20 串口调试 STC12C5A60S2 用户接口 FAT32文件系统 底层接口驱动 存储介质:SD卡

图4.1 程序模块设计

4.2.1 FAT32文件系统

FAT32文件系统是WINDOWS操作系统中常用的一种文件系统,由于FAT32文件系统在8位单片机上实现过程较为复杂,这里就不用大篇幅讲述底层接口驱动,因此罗列几个用户接口函数如下[12]:

void FAT32_Device_Init()

//SD卡设备初始化

void FAT32_Init(void) //文件系统初始化

UINT32 FAT32_Get_Total_Size(void); //获取总容量 UINT32 FAT32_Get_Remain_Cap(void);

//获取剩余容量

UINT32 FAT32_Enter_Dir(CONST INT8 *path); //进入目录

UINT8 FAT32_Open_File(struct FileInfoStruct *pfi,CONST INT8 *filepath,UINT32 item,UINT8 is_file);

//打开文件,支持通配

UINT8 FAT32_Seek_File(struct FileInfoStruct *pfi,UINT32 offset); //文件定位

UINT32 FAT32_Read_File(struct FileInfoStruct *pfi,UINT32 offset,UINT32 len,UINT8 *pbuf);

//读取文件数据

UINT32 FAT32_Read_FileX(struct FileInfoStruct *pfi,UINT32 offset,UINT32 len,void (*pfun)(UINT8));

//读取文件数据并进行数据处理

23

青岛大学本科生毕业论文(设计)

UINT32 FAT32_Add_Dat(struct FileInfoStruct *pfi,UINT32 len,UINT8 *pbuf); //向文件追加数据

UINT8 FAT32_Create_Dir(CONST INT8 *dirpath,UINT8 *ptd); //创建目录,支持创建时间 UINT8 FAT32_Create_File(struct FileInfoStruct *pfi,CONST INT8 *filepath,UINT8 *ptd); //创建文件,支持创建时间

UINT8 FAT32_Del_File(CONST INT8 *filepath); *pArg2,CONST

INT8

*sfilename,CONST

INT8

//删除文件 *tfilename,UINT8

*file_buf,UINT32

unsigned char FAT32_XCopy_File(struct FAT32_Init_Arg *pArg1,struct FAT32_Init_Arg buf_size,unsigned char *pt); //文件拷贝,支持多设备中文件互拷

UINT8 FAT32_File_Close(struct FileInfoStruct *pfi); //文件关闭

UINT8 FAT32_Rename_File(CONST INT8 *filename,CONST INT8 *newfilename); 重命名

//文件

4.2.2 12864液晶驱动

//检查忙位 void chk_busy()

//写指令到LCD

void write_com1(uchar cmdcode)

//写数据到LCDvoid write_data(uchar Dispdata) //向液晶发送一个字符串,长度64字符之内 void lcm_w_word(uchar *s)

//清屏函数 void lcm_clr(void)

//初始化LCD屏 void lcm_init()

//使用绘图的方法让一个16*16的汉字符反白 //形式参数:uchar x,uchar y,uchar wide,uchar bkcor

24

青岛大学本科生毕业论文(设计)

//行参说明:坐标水平位置,坐标垂直位置,反白行数,要反白还是清除(1:反白,0:清除) void write1616GDRAM(uchar x,uchar y,uchar sign,uchar *bmp)

//函数功能:显示16X16图形

void set1616pic(uchar x,uchar y,uchar sign,uchar tt)

//函数功能:显示16X32图形

void write1632GDRAM(uchar x,uchar y,uchar *bmp)

//函数功能: 在程写GDRAM时序初始化 void init_12864_GDRAM()

//函数功能:清屏函数

void Clean_12864_GDRAM(void)[13]

4.2.3 VS1003驱动

//写入两个字节(从高位先写)到VS1003B的功能寄存器

void VS_Write_Reg(unsigned char addr,unsigned char hdat,unsigned char ldat)

//读取两个字节(从高位先读)从VS1003B的功能寄存器 unsigned int VS_Read_Reg(unsigned char addr)

//软复位及初始化VS100B(设置时钟频率及音量等) void VS_Reset()

//写入播放的数据,即写入一字节的音频数据到VS1003B void VS_Send_Dat(unsigned char dat)

//清空VS1003B的数据缓冲区,即向VS1003B写入2048个0 void VS_Flush_Buffer()

//正弦音测试,测试VS1003B芯片是否正常

25

青岛大学本科生毕业论文(设计)

void VS_sin_test(unsigned char x)

//SPI硬件读/写

void SPI_WriteByte(unsigned char x); unsigned char SPI_ReadByte();

4.2.4 SD卡驱动

由于单片机硬件SPI接口只有一个,而VS1003B和SD卡两个SPI器件只能连接一个,出于速度考虑所以这里SD卡使用模拟SPI接口。

//利用I/O口模拟SPI写时序,发送一个字节 void SD_spi_write(unsigned char x)

//利用I/O口模拟SPI读时序,读取一个字节 unsigned char SD_spi_read() //SPI读一个字节

//SD卡写命令函数,命令字节序列首地址为pcmd unsigned char SD_Write_Cmd(unsigned char *pcmd)

// SD卡复位函数,使用CMD0(命令0) unsigned char SD_Reset()

// SD卡初始化函数,使用CMD1(命令1) unsigned char SD_Init()

//写512 Byte的数据到SD卡的扇区addr中,使用CMD24(命令24) unsigned char SD_Write_Sector(unsigned long addr,unsigned char *buffer)

//从addr扇区读取512 Byte数据到数据缓冲区buffer,使用CMD17(17号命令) unsigned char SD_Read_Sector(unsigned long addr,unsigned char *buffer)[14]

4.2.5 DS1302、DS18B20驱动

26

青岛大学本科生毕业论文(设计)

// ds18b20复位函数 void ds18b20rst()

//读一个字节

unsigned char ds1820rd()

//写一个字节到ds1820 void ds1820wr(uchar wdata)

//读取温度值并转换 read_temp()

//温度值显示 void ds1820disp()

//ds1302初始化 void Init_1302(void)

//ds1302写数据

void write_clock(unsigned char ord, unsigned char dd)

//ds1302逐位读出字节 void clock_out(unsigned char dd)

//ds1302逐位写入字节 unsigned char clock_in(void)

//ds1302读数据,供调用时钟数据

unsigned char read_clock(unsigned char ord)[15]

4.2.6 UART驱动

27

青岛大学本科生毕业论文(设计)

//串口初始化 void UART_Init()

//串口中断函数

void sio_int() interrupt 4 using 3

//串口发送一字节

void UART_Send_Byte(unsigned char mydata)

//回车换行,即单片机的串口发送0d 0a ,在“超级终端”上会有回车换行的效果 void UART_Send_Enter()

//串口发送字符串s

void UART_Send_Str(char *s)

//串口发送数值dat

void UART_Put_Num(unsigned long dat)

4.2.7 其他功能函数

1、Main()函数

Main()函数实现了各个模块的初始化,以及多级菜单的显示 流程图见图4.1:

28

青岛大学本科生毕业论文(设计)

上电复位 液晶初始化 串口初始化 SD卡初始化 FAT32文件系统初始化 时钟芯片、温度传感器初始化 初始化完毕 N 按键检测 Y 显示默认界面

图4.1 主函数设计流程图

具体程序如下: void main() {

UINT32 b,c; uchar a=0,m,n,e=0; UART_Init(); //串口初始化 init();//系统初始化 init_img();//屏幕初始化

display_img(img_intel);//开机画面 FAT32_Device_Init(); //存储设备初始化

pArg=&Init_Arg_SDCARD; //指针指向SD卡文件系统参数集合,FAT32将从这个集合中获取参数

29

青岛大学本科生毕业论文(设计)

Dev_No=SDCARD; //设备号为SDCARD,FAT32依照此设备号选择存储设备驱动 FAT32_Init();

//文件系统初始化

//第一行显示 //第二行显示 //第三行显示 //第四行显示 //延时

b=znFAT_Get_Remain_Cap();//获取剩余容量 display1_mesg(\基于单片机的* \display2_mesg(\文本浏览器及* \display3_mesg(\播放器* \ display4_mesg(\ delay_2s(); lcd_init();//清屏

display1_mesg(\自动化工程学院\display2_mesg(\电子信息科学技术\display3_mesg(\指导老师:章平 \display4_mesg(\学 生:高森 \delay_2s(); lcd_init();//清屏

display1_mesg(\总容量为(mb): \初始化文件系统,显示容量 c=pArg->Total_Size; c=c/1024; c=c/1024; m=sizeof(c); b=b/1024; b=b/1024;

display3_mesg(\剩余容量为(mb):\n=sizeof(b); display44_num(b,n); delay_2s(); Init_1302(); lcm_init();

//时钟芯片初始化

//液晶初始化

//第四行显示剩余容量

//获得的容量单位为byte,因此两次除以1024可以得到的MB单位

//第二行显示总容量

display22_num(c,m);

lcm_clr(); //清屏 Clean_12864_GDRAM(); //清屏 while(1) {

30

青岛大学本科生毕业论文(设计)

if (w == 0) { }

//标志位为0正常走时

//显示日期 //显示农历 //显示时间

displaydate(); displaynl(); displaytime();

read_temp(); //读取温度 ds1820disp(); //显示温度 displayxq(); //显示星期 if(!up) { } { } { }

game(); //按下退出键进入游戏功能

music(); //按下下键进入音乐功能

book(); //按下上键进入电子书功能

if(!down)

if(!exit)

else settime();//标志位为1,则进入调时功能

}//while循环结束 }//main函数结束

2、按键扫描函数

本设计中用到的按键较少,使用四个按键外加功能复用即可实现人机交互。

①:音频播放和文本浏览时,按键次数较少,因此采用单片机延时检测电平的方法实现按键扫描:

unsigned char keyscan() //按键扫描函数 {

unsigned char q;

31

青岛大学本科生毕业论文(设计)

if(!up) //按下UP键 {

delay(5000); while(!up); if(up) { }

delay(5000); if(up) }

}

q=0;

return q; //返回UP键值为0

//按键防抖

{

if(!down) //按下DOWN键 {

delay(5000); //按键防抖 while(!down); if(down) { }

if(!enter) //按下enter键 {

delay(5000); //按键防抖

32

delay(5000); if(down) }

q=1; return q; }

//返回DOWN键值为1

{

青岛大学本科生毕业论文(设计)

}

②:当进行俄罗斯方块游戏时,检测电平的方法不能满足设计要求,此时采用定时器中断的方法进行按键扫描:

33

while(!enter); if(enter) { }

if(!exit) //按下exit键 {

delay(5000); while(!exit); if(exit) { } q=4;

return q; //无键按下

delay(5000); if(exit) }

}

q=3;

return q; //返回exit键值为3

delay(5000); if(enter) }

}

q=2; return q;

//返回enter键值为2

//按键防抖

{

{

青岛大学本科生毕业论文(设计)

void initTimer0(void) //定时器0初始化 { }

void keyScan(void) interrupt 1 {

uchar keyCur;

static uchar keyOld = 0xff,keyTime = 0; TH0 = 0x70; keyCur = ~P3;

if(keyCur != keyOld)

keyTime = 0; keyChange = 0;

keyOld = keyCur; //保存当前按键情况 return;

//返回

//如果两次值不等,说明按键情况发生了改变

//键盘按下时间为0

//5ms

TMOD&=0xF0; TMOD|=0x01; ET0=1;

TR0=1; EA=1;

//启动定时器0

//定时器0模式控制在高4位 //定时器0工作在模式1

TL0 = 0x00;

{

}

else

if(++ keyTime == 5) {

keyTime = 0; keyOld = 0xff;

keyPress = keyCur&0x3C; //保存按键 keyChange = 1;

//如果按下时间足够

{

}

} }

34

青岛大学本科生毕业论文(设计)

3、book()子函数

book()子函数用来实现电子书的浏览,正常待机界面下按up键进入电子书功能,具体流程图如下:

按下电子书功能键 显示书籍列表 左右键选择书籍 按键检测 输入键 浏览文本 退出键到上一级 按键检测 退出键退出 左右键 上下翻页 输入键选择书签 返回默认界面

图4.2 电子书函数设计流程图

具体程序设计见附录二。

4、music()子函数

music()子函数用来实现音频文件播放,正常待机界面下按down键进入音频播放功能,具体流程图如下:

35

本文来源:https://www.bwwdw.com/article/3ai6.html

Top