原创 MP3制做成功,仿手机操作菜单,附源代码

2008-5-11 16:01 2931 5 6 分类: 模拟
放假前买了zl0801的一块MP3板,于是利用假期把原来的程序更新了一下,有很多地方都是参考Bozai和zl0801的程序。现公布源码,有此板的朋友们可以参考一下。
  主要加入的功能就是菜单显示,是看到手机上的显示方式来的灵感。本人比较喜欢玩吉他,于是加入了几个平时玩吉他要用的小工具。

  目前只实现了,音乐播放,吉他调音器,音乐文件浏览等功能,其它的功能正在开发中,只支持FAT32文件格式。现有的程序中还有很多bug,放歌时有时会死机(不过现在很少出现了),显示汉字时有些字显示不完全,可能是字库文件跨簇引起的。
    在这里要感谢Bozai和zl0801,若不是他们的程序,我不可能在这么短时间内弄懂FAT。
   源代码:
点击此处下载ourdev_223655.rar(文件大小:921K)






原理图和PCB:
点击此处下载ourdev_224515.rar(文件大小:228K)
在这也可以下到,这是zl0801的贴 http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=855912&bbs_page_no=1&bbs_id=1000
另附液晶取模软件:(今天网速太慢了,传了半天也传不上去,下次再补上)

本菜单的实现占了很多RAM,因为我在RAM里建了一个菜单结构数组,大家从代码里可以看到。原先是打算在ROM里做一个双向的环形链表,后来发现实现不了,请看如下代码
struct OPTION {
        unsigned char index;
        PGM_P string;    //选项名字
        PGM_VOID_P nomIco;    //没有选中时的图标
        PGM_VOID_P sltIco;    //选中时的图标
        struct OPTION *lastOpt;  //上一个选项
        struct OPTION *nextOpt;   //下一个选项
};
typedef struct OPTION OPTION;
//这是声明的第一个选项,
OPTION optPlay PROGMEM ={
   1,
   ("播放音乐"),  //可能不能这样写,但编译可以通过
   ico1,
   ico2,
   optSetup,  //设置  //在这里就出现了问题,因为optSetup在前面没有声明,但不能把optSetup放在前面声明,原因请看下面
   optTone,  //调音   //optTone也没有声明
};
//这是声明的最后一个选项,
OPTION optSetup PROGMEM ={
   8,
   ("系统设置"),  
   ico3,
   ico4,
   optFileView,  //上一个选项,在前面已声明
   optPlay,  //下一个选项,将回到第一个选项,播放音乐的选项,前面已声明,如果把optSetup放在optPlay的前面声明,那这里又
};            //会出现没有声明

我想过,其实用汇编很好实现,指向结构的指针无非就是存放另一个结构在ROM中的起始地址,完全可以在ROM中做这样一个环形链表,但
用汇编写菜单的话工量太大了。
本人学AVR的时间不是很长,对GCC中PGM_P,和PGM_VOID_P的区别不是很懂,希望哪位朋友能指点一下

贴几张图片
  
1点击看大图


2点击看大图


3点击看大图


4点击看大图


5点击看大图


   http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=931228&bbs_page_no=1&search_mode=1&search_text=mp3&bbs_id=9999

文章评论1条评论)

登录后参与讨论

用户149535 2008-5-11 16:54

hen很详细
相关推荐阅读
jizzll_617398179 2010-02-08 10:53
正确理解A/D转换器的输入
http://www.freescale.com.cn/tech_ariticles/2005/1102_1.asp 许多嵌入式应用都会用到A/D转换器。然而,如果错误连接了A/D转换器输入端的电路,...
jizzll_617398179 2010-01-12 13:37
好久没来,都长草了
好久没来,都长草了,呵呵。整天忙得很,不过估计再过两个月会轻松点~\(≧▽≦)/~啦啦啦...
jizzll_617398179 2009-03-16 21:57
很奇怪,我收到站内信,但是却找不到发信人呢
发信人是个[],点击就跳到我自己的主页了。只好在这里给那位朋友留言了。 我不知道你说的哪篇文章,还有我也不知道你的EDN的ID。你可以在博客上面留言的。...
jizzll_617398179 2009-03-14 13:08
如何在EXCEL中使用16进制数
最近需要计算串口发送的数据,太多而且比较麻烦。知道EXECL功能强大,所以网上找了找,刚好,不错,很方便。网上找到的http://hi.bccn.net/space-99452-do-blog-id-...
jizzll_617398179 2009-03-05 14:37
〖常识〗不同晶振的最大波特率及其误差
最近犯了个错误,呵呵,晶振和波特率的问题,特查了记在这里,O(∩_∩)O~〖常识〗不同晶振的最大波特率及其误差http://www.aoxue.org/bbs/read.php?tid=65585不同...
jizzll_617398179 2009-02-11 14:30
大端模式和小端模式
转载http://www.cnblogs.com/TsuiLei/archive/2008/10/29/1322504.html大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则...
我要评论
1
5
关闭 站长推荐上一条 /2 下一条