日志档案

发表于 2008-5-11 16:01:06

2

标签: 无标签

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

放假前买了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

系统分类: 模拟技术   |   用户分类:    |   来源: 转贴   |   【推荐给朋友】

    阅读(164)    回复(1)  

投一票您将和博主都有获奖机会!