以前说过要写个带歌词显示的mp3,但是一直没有时间。前一阵子抽4个晚上写出来了,后来又陆续做了改进,现在正式出炉了! & O0 q0 r+ k( d9 W
* M! l/ [6 R3 u# f( N( f p
硬件环境: . i4 n7 }; j( S! b' N
是网站的mp3板,还是去年卖的缺陷板,当时是这个板第一次做板,但是有点小错误。当时我仔细看了看问题不大就购了一块。虽然贴了个标签说不可以用作mp3用途,但是我还是做了。 $ ~( j+ k/ F3 B6 ]3 s, v 这个板的问题就是ch375的接线搞成5v版本的了,还有ch375的晶振离芯片太远,并且离数据线太近,这会导致ch375工作不稳 定。后来我通过改变晶振端的电容来稳定起工作。还有就是AVCC没有接VCC,还有个小毛病是232的RXD中少串了个电阻,直接接会导致无法isp下 载。 0 L' k) R# L0 F 9 l" c7 ^& o, \1 h, b' T, ?. [* R8 x 板子回来东西也是过了很久一个一个焊上去的,3310是从ppa2001那转让来的(在此表示感谢,他顺便还送了我很多PCB板)。最近从armok这里弄了些零件才算弄完整了。 , d& I& F. {. E# Z$ G! S- i# K$ M$ q
软件平台: ) [: |# g" l) X1 F
AVRSTudio4.13 + WinAVR20070525 ; z3 c! Y; r2 J9 @2 j ) l ~. k1 ^8 w 到了公司用起了source insight才觉得AVRSTudio的编辑器太滥了,所以我是用source insight编辑代码,直接命令行敲命令make,用avrdude + jtagice下载代码 2 h5 ^; b- O7 K/ X! ?2 p 0 S( A7 |9 K# ~: Y# {% X. J - j) B5 B3 j! M+ x9 K3 K# l0 @% I功能描述: % |7 ^ c d4 @' r1 \ 程序包含两部分bootloader+application 8 g& F4 B! l' B# F9 K( N& ~' [9 U! l4 v0 y9 c( a0 f
bootloader是前一阵子在坛子里搜到的stk500的bootloader,我对它作了修改,以和我的程序匹配。 9 k* n6 F4 y7 W
& z0 F- r/ Y' ?
bootloader需要配置成2Kbytes的,可以复位按住start/puse,或者在主程序中按VOL+建,另外复位后10秒如果没有操作则自动进入bootloader # c5 w* t G* l, U2 s2 X 9 V) |. P6 h' ]) z7 e; R4 f; o' _8 R" Z, D3 [2 b# F) {/ w
application部分完成的就是mp3的播放功能: * _% h/ [6 d! Z- }. F
$ T. j: E/ l1 U \* V& g 5个按键,功能上我只对start/pause作了修改,这个按键是用作模式选择的,可以选择单曲重复,全曲重复,随几播放(shuffle) $ z3 G1 M; |3 c: W9 }: U mp3文件可以存放在任意目录,但是总的文件夹数目受到限制(目前代码限制136个)。也可以采用以前的惯用方法,把文件放在特定目录下,这个需要修改程序fat.h文件中的一个宏定义FIX_DIRECTORY。 ( B+ X$ L) w3 B- @/ x7 \
歌词文件可以存放在歌曲所在的目录和一个默认目录下,代码中是\\lrc 即根目录下的lrc文件夹下。 & m& L- W( m+ O: _( ~& {, L) ?
/ Y3 V+ `$ \9 D# s* m: R
程序对歌词提供了完整的支持,支持标准的lrc文件规范。[XX:XX]&[XX:XX.XXX],可以多个时间tag共用一句歌词。 " c9 s+ b+ g. J8 Q' [: U$ Z程序处理歌词的方法是,根据mp3文件的文件名(短/或长文件名)去寻找lrc后缀的文件。注意:文件名采用前段匹配的方式,即只要歌词文件前面 的和音乐文件匹配即可。如:细说往事.mp3 和 细说往事-南方二重唱.lrc是可以对应起来的。另外对于文件名中的大小写是区分的,如 may it be.mp3 和May it be.lrc是对应不起来的。 4 e' q: u- G9 o& l! P7 P4 v
7 j8 i2 \( T6 N, c* V% o* g( F 找到歌词文件后程序会对其解析,然后对所有数据进行排序。将结果存到ram或eeprom中。程序中使用静态单向链表来描述各个时间 tag,真正的歌词数据则放到一个数组里。目前这数组在内部ram中试640字节,eeprom中有1500字节。程序优先使用ram如果ram放步下则 会存到eeprom中。eeprom剩下的空间用于存放文件夹的信息,用于支持文件的任意存放。 $ @+ { z A" `% I
; X$ h& }5 H. n1 h) y; ` C 由于部分歌词会存放到eeprom中,eeprom的操作很慢,所以歌词推荐那种使用多个tag公用一个歌词的形式,[xx:xx][yy:yy]XXXX 。当然不是这种也支持了。像这种歌词: ; d9 E# R% W+ ~: ]# T
5 x! h( q8 h* s2 D& _8 F' j1 n$ l
[ti: Bohemian Rhapsody (Mercury)] / D, l" A) @$ ]+ c" I% R* Q
[arueen] ! v! P; O6 u, H3 `( N. c
[al:A Night At The Opera (c)1975] . p5 ?: c0 _5 Z) J! g : g" u& V8 p' H5 p# H, b# i+ S[00:01]Is this the real life 7 w& A A$ h ]8 |1 }. e
[00:04]Is this just fantasy 2 {' r- Q$ Z; s% g* @+ H
[00:07]Caught in a landslide , @$ B, M% b3 S6 ?
[00:10]No escape from reality ; R" q! L8 d. }' C2 B1 s[00:15]Open your eyes 3 X; [* r% g) i. x) c% a
[00:18]Look up to the skies and see + S1 G+ n3 @4 @: M4 ~8 `( k7 ^5 h$ R[00:25]I'm just a poor boy, I need no sympathy # v% G- D4 P( i[00:31]Because I'm easy come, easy go, 4 z2 P' `6 ]; |( L- Q* r( o[00:35]little high, little low, + k/ V; Z) ~$ z5 [
[00:38]Anyway the wind blows, doesn't really matter to me, 6 i8 z* W4 t' D6 K. c S3 m
[00:48]- to me -, 0 x+ v+ i R4 i: _' f* c
7 B/ E0 R9 w' Q5 s2 H5 F* x/ M0 C
[00:55]Mama, just killed a man, . G+ c' K( n' k0 [, e1 M* \[01:01]Put a gun against his head, 2 v( p. t7 d* `& ^, v
[01:05]Pulled my trigger, now he's dead, ) v2 C' y& v" s" V" F+ p* ^( Z
[01:09]Mama, life had just begun, Y2 J/ F! T% ~6 O( V. x
[01:15]But now I've gone and thrown it all away + w: B, v4 l! x, g5 Y& g4 b
[01:22]Mama, ooo, ) ?+ [* {% {4 J9 A# T
[01:29]Didn't mean to make you cry ) R. D1 J9 }( R0 H! k. v' B' W[01:32]If I'm not back again this time tomorrow ! p1 c5 ~" J; F* y0 D- p+ J* I[01:37]Carry on, carry on, as if nothing really matters , W6 h" G# c( _! y# { + Y, l0 F' M. W. h) t[01:54]Too late, my time has come, ' v# H" f# N, Y/ N7 w2 N[02:01]Sends shivers down my spine, 8 S* M) ~) W$ ^. x* l. l1 Y" T
[02:04]Body's aching all the time, 3 [' \9 g1 L! W) n* `" j b- x
[02:08]Goodbye everybody - I've got to go $ C: S' h' `/ t d$ N; W" y3 z2 h[02:14]Gotta leave you all behind and face the truth 5 b& P# \. U/ J; E! b `
[02:21]Mama, ooo $ Q; U2 R% o: Y
[02:28]I don't want to die, ' \9 N; t: R& c% T' R* h
[02:31]I sometimes wish I'd never been born at all 4 C0 j2 u! m+ N* f/ s
. W. w t( y: ]% E$ \4 e/ O
[03:05]I see a little silhouetto of a man, ! }. q& O* g+ i) ~2 y. Y7 r
[03:08]Scaramouche, scaramouche will you do the Fandango + u, |& B4 `% ?
[03:11]Thunderbolt and lightning - very very frightening me # G" S0 m4 n" ]$ A. ^7 Y( k
[03:16]Galileo, Galileo, / Y/ X" D( u% N& C[03:17]Galileo, Galileo 1 {4 \& ^6 ?; W9 [
[03:19]Galileo figaro - Magnifico 5 O7 @* T# Y, \2 f) |9 i1 ]0 \
[03:22]I'm just a poor boy and nobody loves me 4 F- T! v5 P0 w6 P! g! P[03:25]He's just a poor boy from a poor family - D* ?2 H' R( i) c% e% o2 v9 v' V
[03:29]Spare him his life from this monstrosity 5 j* x, ]/ m. F8 p# K' `
[03:33]Easy come easy go -, will you let me go % Y2 p- a9 ^; t0 S$ g[03:36]Bismillah! No -, we will not let you go - let him go , ^2 j% H/ }) c2 y# Z6 A[03:40]Bismillah! We will not let you go - let him go % W f) T$ M. S# h- V[03:43]Bismillah! We will not let you go - let me go , b3 Z9 F, W" r5 g
[03:46]Will not let you go - let me go # [3 N; D# m6 f y5 H' R4 Y[03:48]Will not let you go - let me go 7 l9 S% d) j5 r S4 T3 {8 v
[03:50]No, no, no, no, no, no, no # n7 O1 t: V: x1 G! e s% |[03:53]Mama mia, mama mia, mama mia let me go * D6 B& H+ {) d' K+ x[03:56]Beelzebub has a devil put aside for me, for me + o; M8 q( M% x4 C! G
[04:03]for me - ) O$ h' J# z5 ~% G2 k5 W# W2 C , h8 g: P% ~5 b/ N# U x. ~4 v) U0 q[04:14]So you think you can stone me and spit in my eye % q( o1 P" t: _/ Q[04:20]So you think you can love me and leave me to die ( n2 j" S. }, ~2 t[04:25]Oh Baby - Can't do this to me baby - . K# h6 E8 X3 e# s e
[04:32]Just gotta get out - just gotta get right outta here 9 e) K- ?" d) g" p! Z$ n/ a+ w
' M: ^; l) K0 L2 A3 i6 X
[05:10]Nothing really matters, ; s3 n: C! h$ A# N: ~/ l6 o[05:14]Anyone can see, 8 O9 e. [9 P$ q. p[05:18]Nothing really matters -, nothing really matters to me ) n. W- w$ x7 f$ E$ V: R/ C6 }: n4 p% D9 o6 F4 T
[05:40]Any way the wind blows... # `6 B& `6 ]5 I6 k5 d# ^ / y2 |4 k! T% `+ ]/ g+ S: T这样程序至少要花10秒钟才能把多余的数据存到eeprom中 # Z' p6 f) R& e4 Q
5 n1 B! ?$ M, V- h
像这种: " k3 ^6 l$ p/ Z- q; ~[ti:细说往事] & W. _8 ] N$ J[ar:南方二重唱] * o7 m" i6 k" W( q% Y# x
[al:细说往事] . v6 ^* h: x. H n[by:炫网资讯 Liuxuan.com] ! D4 |3 l; d) r: M+ g2 D# V
[00:00.00]细说往事 - 南方二重唱 ! M$ x: [4 U4 g4 A/ k% W0 h# d
[00:09.56]词/曲:李子恒 % ]8 c' O5 g6 C: s[00:12.24] * }. x0 p) l5 g( n, P[02:55.60][00:14.89]蓝蓝的天 8 h6 d( Y5 ]' E" g6 U9 F* }[02:58.17][00:17.31]往事一缕轻烟飘过你的眼廉 8 Z o! W7 ?3 L1 u! a
[03:05.12][00:23.89]沉默的眼 & m2 O7 f3 m O- q, ]. B
[03:07.19][00:25.75]请回答我还爱不爱我的从前 : @5 U) f+ \& {; q" F9 w% w+ l
[03:13.56][00:32.82]我的从前 4 C1 T" D1 h! u0 a! r/ d1 S v; a
[03:16.06][00:35.03]有你陪伴的梦和一张疼爱的脸 1 `: U& u& Z+ B[03:22.80][00:41.49]如今细说往事 7 W! w8 V; Z7 L[03:25.05][00:43.95]往事如烟 0 w' m N) a! L2 l' K; y6 ^[03:26.61][00:45.65]我是否还算是你的誓言 / W3 g/ @9 V2 o4 A7 ^- t, k+ T7 m[03:30.60][00:49.97] 8 b# F6 r/ r2 G# `( H) E6 Q/ e3 o[04:09.91][02:04.40][00:50.93]白云翩翩 q" X- \7 c+ X1 N1 Q: N
[04:11.78][02:06.32][00:52.83]心事一面银幕飘过你的窗前 0 P+ g7 x q! U( C[04:18.63][02:13.12][00:59.79]寂寞的窗 + H8 @$ V" e E: l @& J[04:20.53][02:15.07][01:01.45]请开启我被岁月紧锁的思念 8 C: Y( C/ C9 x[04:27.54][02:22.02][01:08.45]我的思念 % q( a1 U7 E# C- a0 Z( L
[04:29.58][02:24.00][01:10.63]有你牵挂的心和一首叫做誓言 0 ]" R1 ^1 b; c/ k) Q# |$ ^0 A
[04:36.30][02:30.59][01:16.91]如今细说往事 3 z- T% a0 N) ]4 e9 e# S[04:38.48][02:32.97][01:19.50]往事如烟 " Z( j l- e; t, N2 U/ o! v+ _
[04:40.13][02:34.51][01:21.09]我是否还算是你的从前 . E! M: n* o2 {$ l[04:46.16][02:39.20][01:26.58] 1 d+ Y: s! x, ?( L/ h$ K9 @[03:34.05][01:28.01]往事从头 " S' c) E) Y4 M
[03:35.59][01:30.17]轻轻细说梦的演变 : j# K: w- E: e& z[03:42.30][01:36.95]多年以后 + G. ?3 b, A$ ~$ v[03:44.56][01:39.04]是否还有爱的容颜 x3 L; R" i6 w/ j3 |[03:51.42][01:45.93]往事从头 & g: V" M' J' L. d& U
[03:53.52][01:47.97]轻轻细说沧海桑田 4 u( ~; Y3 S: m. M
[04:00.20][01:54.65]是否能够 ; n! O; d! G D, G[04:02.40][01:56.87]回到从前再走一遍 " k! `" g7 G5 s: K
[04:08.67][02:02.68] & z R! C- S) _" [* d7 c4 F 6 }: ?3 P4 W" {3 j- \2 K就比较好了,用不着eeprom了。 ; h( I/ |" \4 U3 ^' s程序不仅在LCD上显示信息在串口也会show一些, 9 t& Y8 T/ d9 a3 v# G/ K% V9 l
) i2 i0 s1 U# f: N ( I. L# U2 }4 [5 N* z说说字库文件: . i3 c# ?7 j% H% k- A# Y
总共有四个文件:st12.sys,st16.sys,gbk2uni.sys,uni2gbk。其中st12/16是12*12 和16*16点阵字库。其余两个为gbk和unicode互转的文件。 7 R3 x8 }: C/ Z% p9 R1 i; H
其中st16和gbk2uin.sys没有用到,但是我程序中没有去掉,如果想去调请在程序中改,在LCD_GBK.c文件的初始化中改。 2 q5 i% f4 \ b 字库是GBK字库,不是GB2312,所以支持很多汉字,总共两万多个,所以再生僻的都可以正常显示,如下面的繁体: 2 ?/ \+ S$ w. r7 Q7 k& W+ `! L% ~' h1 `; ~6 f9 p
[ti:失恋阵线联盟] " V% F L$ v" M9 `2 S* c[ar:草蜢] " s" E7 ]; _- D$ g[al:] 3 f8 B: O4 l8 t0 J[by:ZJM] ; X) ^: W/ ]2 M
[00:00]失戀陣線聯盟 # ?% s# t8 U0 c
[00:10]演唱:草蜢 / H. p. [' I a0 Z( p/ x9 I! ]2 d
' l( N1 f" |' p
[00:14] : |% U- s# i5 Q' j- o[01:43][00:16]她總是只留下電話號碼 3 [5 s' g. S4 l7 |
[01:47][00:19]從不肯讓我送她回家 8 L5 V4 b9 q3 j[01:50][00:23]聽說你也曾經愛上過她 5 Z! x6 s. X+ J: i
[01:54][00:26]曾經也同樣無法自拔 " Q3 J' f9 o+ l, _: c/ i
[01:57][00:30]你說你學不會假裝瀟洒 8 `- O% O; e2 s3 B0 B" M
[02:01][00:34]卻教我別太早放棄她 7 a1 G8 I6 ?# B( V& X[02:05][00:37]把過去全說成一段神話 % G4 ?8 v1 c6 T& r$ F W% \[02:08][00:41]然後笑彼此一樣的傻 ! o% A- ]8 l3 U; G
[02:12][00:45]我們這麼在乎她卻被她全不抹煞 7 n4 |' Q9 V9 B# g" a1 S5 O
[02:16][00:48]越疼她越傷心永遠得不到回答 ) v& m% J. {$ D H) D( a: E4 j
[02:19][00:52]到底她怎麼想應該繼續猜測嗎 5 R; U+ X, f0 Y. J5 n& r9 r[02:23][00:56]還是說好全忘了吧 7 S( K( p3 L2 R2 b2 B
[02:27][00:59]找一個承認失戀的方法 5 J: ?4 b% w, C {# c& G5 t
[02:30][01:03]讓心情好好的放個假 : u' c+ {+ V% D! [: n) Y$ l
[02:34][01:06]當你我不小心又想起她 . U' C# v3 h0 ~
[02:45][02:41][02:37][01:10]就在記憶裡畫一個"X" * b* j" q) t5 u[01:14](Music) " f9 e7 n B3 |. h; p5 o/ v
& a, h" y9 h* W# j1 e- @+ N( V$ {+ M3 X$ @
! S3 u1 v. ]% G/ A# N1 ]
# j% W" H5 L* i. P* a: \0 _ 4 `' T% _+ F/ v2 G s! `2 [( V o% r/ ~4 k% x0 T. w% y- A5 K
2 p) y8 \) y; O4 H" t/ n + Z: w6 ^8 M6 q+ x ^' f, k
回复:DIY STM32之MP3素材整理
回复:DIY STM32之MP3素材整理
于成功了!经过两个多月的业余时间的努力,我自己制作的MP3
7 l1 i+ w Q l" Q |) r7 |
随身听终于完成了。a方案是tmega8+vs1011,典型的单片机+解码芯片
由于自己有一个256MB的SD卡,所以我的 4 L5 z# j( Z W
; o8 S" P; k% B5 H' ~0 A
MP3是插SD卡的,这样省了不少成本,反正我的数码相机又不 7 A6 _+ ? R! x3 E! f h/ b7 |' _
是经常使用,闲着也是闲着。大概成本算下来,自己做这样一个M " m0 P/ p+ M5 z5 q
P3大概才要120左右,不过最大的乐趣还是来自DIY的乐趣^-^ 0 l: G ~ v5 o8 L$ f
采用的方案是单片机+DSP解码芯片,音质非常好,绝对比普通的MP3 ; I1 o. u6 [; W/ C
3 q, ^8 z2 f* t5 Y6 g" Z
要好。
mega8 mp3 player
vs1003手册上说可以解码吗mp3 wma和midi格式的音乐。
试验发现播放wma音乐可以像播放mp3那样播放,只要把wma文件数据送给vs1003就可直接播放。
刚开始在从正在播放的wma音乐转入下一首音乐会出现不能播放的问题。
wma格式不像mp3格式那样容易播放,因此不能播放的原因是其不能正确结束当前播放的数据帧。
后来查datasheet发现可以通过设置SCI_MODE的SM_OUTOFWAV位来结束wma的播放。
3 ~- O3 [2 A5 S
由于我的程序没有判断当前播放的音乐是什么类型音乐的程序。所以我有找了个变通的方法,
就是复位。 " i0 @$ f+ |. t& Z; |. y; g v+ m
我用的是软件复位,通过设置SCI_MODE的SM_RESET位来实现。
即在播放每一首歌前复位一下vs1003就可解决wma歌曲的切换。
按手册上的要求复位前最好向VS1003填充2048个0 且这些数据要根据DREQ引脚的请求送给芯片。
另外复位后还要延时约1.35ms芯片才能恢复到先前的工作频率。
接下来就可以发送你的mp3或wma数据了。 % E% d+ O \% {
不过这种方法只能整首的播放wma音乐,不能快进。如要快进VLSI网站上有示例代码。
现在我的mp3可以播放mp3和wma两种格式的音乐了,至于midi有空再研究。
8 Y1 F! u4 W0 q5 P7 c' B: M
不知阿永第三版的mp3板是否支持wma,如果没有可以考虑把它加上去,不复杂的,只要按我上面的方法就可。
今天早上我又把vs1003的midi功能做出来了。 1 n) P3 }8 ]* ~# `# r3 v0 p& ?+ u
不过在播放midi之前要把SMF1格式的midi转成SMF0格式的midi文件。
在应用手册上的网址http://www.gnmidi.com/下载转换程序GN1:0转换。 3 K% a9 ~' ~* Y" _6 Y9 d
将转换后的文件拷到sd卡中按播放mp3及wma的方式播放即可。 `) `& e9 T% |) Q! T B7 p
/ |! g& x5 w& w8 U N6 H; g6 h
但要注意在从正在播放的midi曲子跳出来,在复位前就不要填充2048个零了
如果填充了将会花很长时间才能进入下一首歌的播放,因为midi需要的数据量很小。 . I3 J2 \( E! f3 M0 K# K+ `0 A
同样如果按暂停键,你也会等一段时间让vs1003把内部已有的数据处理完。 # e; @ {: }2 J \
! t9 p( ^4 P: Y" r8 s2 \) n
播放出来的音乐没有在电脑上播放的效果好,类似于手机上的midi音乐。 9 f$ g, w2 o" y4 A; q2 A6 p
' O$ ~# Z! t. ?) l. R3 T: @
我做的播放器的图片(在通用板上手工焊的) 9 `1 Q! {( d: A8 [: b7 y+ w ]- i
另外一个问题: 7 ^: \; q& F+ _' k4 U7 g
当midi正常播放至结束时,不能按照判断数据是否送完为标准来判断歌曲是否放完。
在播放mp3和wma格式时用这种方法,由于损失的时间很短所以听不出来。
而在放midi时,虽然你的数据送完了,但是由于vs1003内还有2048字节的数据还没解码完。 % i1 G/ v1 F5 u0 t1 r5 }0 A0 S
所以这时跳到下一首歌必然引起一段音乐无法播放完。 & w9 j" b U( Z
因此在送完所有数据后还要填充2048个数据,我用的是2048个零,才能恰好使midi音乐播放完,其实在播放mp3和wma时也要做同样的处理才对。
上传一下我写的程序
里面包含了SD卡的驱动,完整的FAT16操作程序,及VS1003的程序。 + \) l* g" h- ?" i
整个程序花了我半个月时间。
其中SD卡驱动只包含了初始化,读一扇区,写一扇区的功能。
% a6 b: E: |6 W# b. U( O# R' M
FAT16部分 ( e, U* p2 L* C6 \- b
本来是针对我的毕业设计做的,现在顺便做了个mp3,所以其中有好多函数是不须要的。
但是有需要做文件系统的可以参考一下。 * a- K* Q; [: @% E* G" b
这部分含有,创建文件,删除文件,创建目录,删除目录,重命名,打开文件,写文件,显示目录内容等。另外为了配合mp3的操作多添加了几个函数。 9 r" `5 o% y" c1 i2 \
但是写文件部分做的不完善。不支持长文件名的创建。 9 k0 M% F8 v8 W# l# @) N" W; z; e
+ ~4 c3 r: o( A' L9 l0 b c1 f6 s
在主程序中放置了播放mp3的操作,同时注释掉了一些关于文件系统的函数。 6 @1 H; G, ^; e2 E2 w0 @6 N
如果把mp3的播放函数去掉,把原来的文件系统函数加上,可以直接使用。
显示用串口调试工具显示,播放mp3时会显示文件名的短文件名项,初始化的时候会显示初始化信息。
在用作fat16操作时可以像普通dos 操作一样。 - t+ Y/ x+ C4 M ~
比如显示根目录内容可以输入dir \
具体信息可通过输入help查看帮助。 7 ~ ^' l. Y. i0 X2 s! ]2 N' y7 s1 ?
' R9 ]( L# G5 K% i/ F7 K3 v
关于这个mp3的原理图我就不画了
总共几个脚我用文字描述一下。
7 s$ C( d/ N3 Y }3 q
SD卡的cs接m32的SS引脚 - i+ w. u6 ] F/ g/ y
其它的MISO MOSI SCK就不用说了
VS1003的
XCS接 PB0
XRESET接 PB1 ( E6 L$ V7 L. z/ i% M7 i
DREQ接 PB2 . r8 G" w; n1 T" T
XDCS接 PB3 + q4 W$ @( q6 F) v% h
其它几根SPI数据线按标准接
PLAY/STOP键接 PD5
PREV键接 PD4 2 R3 H. J$ a" P9 C) N& J
NEXT键接 PD3 & G" _! k5 e# f9 a* ~( A
V- 接 PD2
V+ 接 PD6 ) U P7 u) {; b4 K2 V X; a- J6 Z0 k
# V4 Y/ }6 I7 O: `% r1 u k0 z3 A
如须更改可在程序中修改
! Y1 _9 H+ s6 \+ y! z0 r9 p. K
VS1003的电源是这样接的,3.3V接IO电源,模拟电源用3.3串接一个1N4007,核电源在1N4007后接一个快恢复管1N5819。其它的按VS1003手册给的接法就行了。 8 s: \& _2 [. v6 v' p5 D
如果要手工在通用板上焊VS1003的话,建议先给VS1003各个脚上好锡,然后焊好四周的8个脚用作固定,可以用电阻引脚之类的东西。然后用 细的漆包线,可以从小变压器上拆,把头上的漆用刀子刮掉上上锡。接着用普通的烙铁,记住烙铁不能沾锡,仔细焊上然后把线引到附近固定后接到你要的地方就行 了。
VS1003有很多电源脚内部是连在一起的,如果想偷懒的话可以只焊一根,或者只焊重要的脚就可以了,我上面做的mp3就是这样做的,工作没问题。不然48个脚要我焊焊上一天呢。 6 r8 I# J) s$ k- T9 U5 J
8 N' h3 M+ ~" m) {* Y- P+ q
发布一个带完整歌词显示的mp3(基于本站的mp3板)_个人业余玩AVR暂告一段落
* M! l/ [6 R3 u# f( N( f p
硬件环境: . i4 n7 }; j( S! b' N
是网站的mp3板,还是去年卖的缺陷板,当时是这个板第一次做板,但是有点小错误。当时我仔细看了看问题不大就购了一块。虽然贴了个标签说不可以用作mp3用途,但是我还是做了。
这个板的问题就是ch375的接线搞成5v版本的了,还有ch375的晶振离芯片太远,并且离数据线太近,这会导致ch375工作不稳 定。后来我通过改变晶振端的电容来稳定起工作。还有就是AVCC没有接VCC,还有个小毛病是232的RXD中少串了个电阻,直接接会导致无法isp下 载。
板子回来东西也是过了很久一个一个焊上去的,3310是从ppa2001那转让来的(在此表示感谢,他顺便还送了我很多PCB板)。最近从armok这里弄了些零件才算弄完整了。
! S- i# K$ M$ q
软件平台: ) [: |# g" l) X1 F
AVRSTudio4.13 + WinAVR20070525
到了公司用起了source insight才觉得AVRSTudio的编辑器太滥了,所以我是用source insight编辑代码,直接命令行敲命令make,用avrdude + jtagice下载代码
功能描述:
程序包含两部分bootloader+application
! l4 v0 y9 c( a0 f
bootloader是前一阵子在坛子里搜到的stk500的bootloader,我对它作了修改,以和我的程序匹配。 9 k* n6 F4 y7 W
& z0 F- r/ Y' ?
bootloader需要配置成2Kbytes的,可以复位按住start/puse,或者在主程序中按VOL+建,另外复位后10秒如果没有操作则自动进入bootloader
8 R" Z, D3 [2 b# F) {/ w
application部分完成的就是mp3的播放功能: * _% h/ [6 d! Z- }. F
5个按键,功能上我只对start/pause作了修改,这个按键是用作模式选择的,可以选择单曲重复,全曲重复,随几播放(shuffle)
mp3文件可以存放在任意目录,但是总的文件夹数目受到限制(目前代码限制136个)。也可以采用以前的惯用方法,把文件放在特定目录下,这个需要修改程序fat.h文件中的一个宏定义FIX_DIRECTORY。 ( B+ X$ L) w3 B- @/ x7 \
歌词文件可以存放在歌曲所在的目录和一个默认目录下,代码中是\\lrc 即根目录下的lrc文件夹下。 & m& L- W( m+ O: _( ~& {, L) ?
/ Y3 V+ `$ \9 D# s* m: R
程序对歌词提供了完整的支持,支持标准的lrc文件规范。[XX:XX]&[XX:XX.XXX],可以多个时间tag共用一句歌词。
程序处理歌词的方法是,根据mp3文件的文件名(短/或长文件名)去寻找lrc后缀的文件。注意:文件名采用前段匹配的方式,即只要歌词文件前面 的和音乐文件匹配即可。如:细说往事.mp3 和 细说往事-南方二重唱.lrc是可以对应起来的。另外对于文件名中的大小写是区分的,如 may it be.mp3 和May it be.lrc是对应不起来的。 4 e' q: u- G9 o& l! P7 P4 v
找到歌词文件后程序会对其解析,然后对所有数据进行排序。将结果存到ram或eeprom中。程序中使用静态单向链表来描述各个时间 tag,真正的歌词数据则放到一个数组里。目前这数组在内部ram中试640字节,eeprom中有1500字节。程序优先使用ram如果ram放步下则 会存到eeprom中。eeprom剩下的空间用于存放文件夹的信息,用于支持文件的任意存放。 $ @+ { z A" `% I
由于部分歌词会存放到eeprom中,eeprom的操作很慢,所以歌词推荐那种使用多个tag公用一个歌词的形式,[xx:xx][yy:yy]XXXX 。当然不是这种也支持了。像这种歌词: ; d9 E# R% W+ ~: ]# T
5 x! h( q8 h* s2 D& _8 F' j1 n$ l
[ti: Bohemian Rhapsody (Mercury)] / D, l" A) @$ ]+ c" I% R* Q
[ar
[al:A Night At The Opera (c)1975]
[00:01]Is this the real life 7 w& A A$ h ]8 |1 }. e
[00:04]Is this just fantasy 2 {' r- Q$ Z; s% g* @+ H
[00:07]Caught in a landslide , @$ B, M% b3 S6 ?
[00:10]No escape from reality
[00:15]Open your eyes 3 X; [* r% g) i. x) c% a
[00:18]Look up to the skies and see
[00:25]I'm just a poor boy, I need no sympathy
[00:31]Because I'm easy come, easy go,
[00:35]little high, little low, + k/ V; Z) ~$ z5 [
[00:38]Anyway the wind blows, doesn't really matter to me, 6 i8 z* W4 t' D6 K. c S3 m
[00:48]- to me -, 0 x+ v+ i R4 i: _' f* c
7 B/ E0 R9 w' Q5 s2 H5 F* x/ M0 C
[00:55]Mama, just killed a man,
[01:01]Put a gun against his head, 2 v( p. t7 d* `& ^, v
[01:05]Pulled my trigger, now he's dead, ) v2 C' y& v" s" V" F+ p* ^( Z
[01:09]Mama, life had just begun, Y2 J/ F! T% ~6 O( V. x
[01:15]But now I've gone and thrown it all away + w: B, v4 l! x, g5 Y& g4 b
[01:22]Mama, ooo, ) ?+ [* {% {4 J9 A# T
[01:29]Didn't mean to make you cry
[01:32]If I'm not back again this time tomorrow
[01:37]Carry on, carry on, as if nothing really matters
[01:54]Too late, my time has come,
[02:01]Sends shivers down my spine, 8 S* M) ~) W$ ^. x* l. l1 Y" T
[02:04]Body's aching all the time, 3 [' \9 g1 L! W) n* `" j b- x
[02:08]Goodbye everybody - I've got to go
[02:14]Gotta leave you all behind and face the truth 5 b& P# \. U/ J; E! b `
[02:21]Mama, ooo $ Q; U2 R% o: Y
[02:28]I don't want to die, ' \9 N; t: R& c% T' R* h
[02:31]I sometimes wish I'd never been born at all 4 C0 j2 u! m+ N* f/ s
. W. w t( y: ]% E$ \4 e/ O
[03:05]I see a little silhouetto of a man, ! }. q& O* g+ i) ~2 y. Y7 r
[03:08]Scaramouche, scaramouche will you do the Fandango + u, |& B4 `% ?
[03:11]Thunderbolt and lightning - very very frightening me # G" S0 m4 n" ]$ A. ^7 Y( k
[03:16]Galileo, Galileo,
[03:17]Galileo, Galileo 1 {4 \& ^6 ?; W9 [
[03:19]Galileo figaro - Magnifico 5 O7 @* T# Y, \2 f) |9 i1 ]0 \
[03:22]I'm just a poor boy and nobody loves me
[03:25]He's just a poor boy from a poor family - D* ?2 H' R( i) c% e% o2 v9 v' V
[03:29]Spare him his life from this monstrosity 5 j* x, ]/ m. F8 p# K' `
[03:33]Easy come easy go -, will you let me go
[03:36]Bismillah! No -, we will not let you go - let him go
[03:40]Bismillah! We will not let you go - let him go
[03:43]Bismillah! We will not let you go - let me go , b3 Z9 F, W" r5 g
[03:46]Will not let you go - let me go
[03:48]Will not let you go - let me go 7 l9 S% d) j5 r S4 T3 {8 v
[03:50]No, no, no, no, no, no, no
[03:53]Mama mia, mama mia, mama mia let me go
[03:56]Beelzebub has a devil put aside for me, for me + o; M8 q( M% x4 C! G
[04:03]for me -
[04:14]So you think you can stone me and spit in my eye
[04:20]So you think you can love me and leave me to die
[04:25]Oh Baby - Can't do this to me baby - . K# h6 E8 X3 e# s e
[04:32]Just gotta get out - just gotta get right outta here 9 e) K- ?" d) g" p! Z$ n/ a+ w
' M: ^; l) K0 L2 A3 i6 X
[05:10]Nothing really matters,
[05:14]Anyone can see,
[05:18]Nothing really matters -, nothing really matters to me
: n4 p% D9 o6 F4 T
[05:40]Any way the wind blows...
这样程序至少要花10秒钟才能把多余的数据存到eeprom中 # Z' p6 f) R& e4 Q
5 n1 B! ?$ M, V- h
像这种:
[ti:细说往事]
[ar:南方二重唱] * o7 m" i6 k" W( q% Y# x
[al:细说往事]
[by:炫网资讯 Liuxuan.com] ! D4 |3 l; d) r: M+ g2 D# V
[00:00.00]细说往事 - 南方二重唱 ! M$ x: [4 U4 g4 A/ k% W0 h# d
[00:09.56]词/曲:李子恒
[00:12.24]
[02:55.60][00:14.89]蓝蓝的天
[02:58.17][00:17.31]往事一缕轻烟飘过你的眼廉 8 Z o! W7 ?3 L1 u! a
[03:05.12][00:23.89]沉默的眼 & m2 O7 f3 m O- q, ]. B
[03:07.19][00:25.75]请回答我还爱不爱我的从前 : @5 U) f+ \& {; q" F9 w% w+ l
[03:13.56][00:32.82]我的从前 4 C1 T" D1 h! u0 a! r/ d1 S v; a
[03:16.06][00:35.03]有你陪伴的梦和一张疼爱的脸
[03:22.80][00:41.49]如今细说往事
[03:25.05][00:43.95]往事如烟
[03:26.61][00:45.65]我是否还算是你的誓言
[03:30.60][00:49.97]
[04:09.91][02:04.40][00:50.93]白云翩翩 q" X- \7 c+ X1 N1 Q: N
[04:11.78][02:06.32][00:52.83]心事一面银幕飘过你的窗前
[04:18.63][02:13.12][00:59.79]寂寞的窗
[04:20.53][02:15.07][01:01.45]请开启我被岁月紧锁的思念
[04:27.54][02:22.02][01:08.45]我的思念 % q( a1 U7 E# C- a0 Z( L
[04:29.58][02:24.00][01:10.63]有你牵挂的心和一首叫做誓言 0 ]" R1 ^1 b; c/ k) Q# |$ ^0 A
[04:36.30][02:30.59][01:16.91]如今细说往事
[04:38.48][02:32.97][01:19.50]往事如烟 " Z( j l- e; t, N2 U/ o! v+ _
[04:40.13][02:34.51][01:21.09]我是否还算是你的从前
[04:46.16][02:39.20][01:26.58]
[03:34.05][01:28.01]往事从头 " S' c) E) Y4 M
[03:35.59][01:30.17]轻轻细说梦的演变
[03:42.30][01:36.95]多年以后
[03:44.56][01:39.04]是否还有爱的容颜
[03:51.42][01:45.93]往事从头 & g: V" M' J' L. d& U
[03:53.52][01:47.97]轻轻细说沧海桑田 4 u( ~; Y3 S: m. M
[04:00.20][01:54.65]是否能够
[04:02.40][01:56.87]回到从前再走一遍 " k! `" g7 G5 s: K
[04:08.67][02:02.68]
就比较好了,用不着eeprom了。
程序不仅在LCD上显示信息在串口也会show一些,
说说字库文件: . i3 c# ?7 j% H% k- A# Y
总共有四个文件:st12.sys,st16.sys,gbk2uni.sys,uni2gbk。其中st12/16是12*12 和16*16点阵字库。其余两个为gbk和unicode互转的文件。 7 R3 x8 }: C/ Z% p9 R1 i; H
其中st16和gbk2uin.sys没有用到,但是我程序中没有去掉,如果想去调请在程序中改,在LCD_GBK.c文件的初始化中改。
字库是GBK字库,不是GB2312,所以支持很多汉字,总共两万多个,所以再生僻的都可以正常显示,如下面的繁体:
& W+ `! L% ~' h1 `; ~6 f9 p
[ti:失恋阵线联盟]
[ar:草蜢]
[al:]
[by:ZJM] ; X) ^: W/ ]2 M
[00:00]失戀陣線聯盟 # ?% s# t8 U0 c
[00:10]演唱:草蜢 / H. p. [' I a0 Z( p/ x9 I! ]2 d
' l( N1 f" |' p
[00:14]
[01:43][00:16]她總是只留下電話號碼 3 [5 s' g. S4 l7 |
[01:47][00:19]從不肯讓我送她回家
[01:50][00:23]聽說你也曾經愛上過她 5 Z! x6 s. X+ J: i
[01:54][00:26]曾經也同樣無法自拔 " Q3 J' f9 o+ l, _: c/ i
[01:57][00:30]你說你學不會假裝瀟洒 8 `- O% O; e2 s3 B0 B" M
[02:01][00:34]卻教我別太早放棄她
[02:05][00:37]把過去全說成一段神話
[02:08][00:41]然後笑彼此一樣的傻 ! o% A- ]8 l3 U; G
[02:12][00:45]我們這麼在乎她卻被她全不抹煞 7 n4 |' Q9 V9 B# g" a1 S5 O
[02:16][00:48]越疼她越傷心永遠得不到回答 ) v& m% J. {$ D H) D( a: E4 j
[02:19][00:52]到底她怎麼想應該繼續猜測嗎
[02:23][00:56]還是說好全忘了吧 7 S( K( p3 L2 R2 b2 B
[02:27][00:59]找一個承認失戀的方法 5 J: ?4 b% w, C {# c& G5 t
[02:30][01:03]讓心情好好的放個假 : u' c+ {+ V% D! [: n) Y$ l
[02:34][01:06]當你我不小心又想起她 . U' C# v3 h0 ~
[02:45][02:41][02:37][01:10]就在記憶裡畫一個"X"
[01:14](Music) " f9 e7 n B3 |. h; p5 o/ v
RE:DIY STM32之MP3素材整理
想问一下,字库是存在哪里?eeprom中还是SD Card中?那几个字库得有多大?
回复:DIY STM32之MP3素材整理
RE:DIY STM32之MP3素材整理
RE:DIY STM32之MP3素材整理
支持
要是用STM32做的话建议加上USB读写SD卡功能2 S8 \/ t! d3 K" |( J- G
呵呵
回复:DIY STM32之MP3素材整理
RE:DIY STM32之MP3素材整理
回复:DIY STM32之MP3素材整理
既然有素材,那DIY MP3的实质性工作什么时候开始?
回复:DIY STM32之MP3素材整理
RE:DIY STM32之MP3素材整理
回复:DIY STM32之MP3素材整理