» 您尚未 登录   注册 | 搜索 | 社区服务 | 帮助 | 无图版 | 左右分栏


AVR与虚拟仪器论坛 AVRVi.com -> AVR单片机论坛(主坛) -> M8_VS1003_SD卡做的MP3播放器
 XML   RSS 2.0   WAP 

AVRVI的淘宝店 AVR单片机学习套餐 EasyAVR M128开发板 SK 国内最专业AVR开发工具商城

--> 本页主题: M8_VS1003_SD卡做的MP3播放器 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题
admin

终身成就奖 金点子奖 原创先锋奖 技术群用户
头衔:先行者先行者

级别: 管理员
精华: 74
发帖: 4224
威望: 4338 点
金钱: 89645 VI
贡献值: 80 点
技术积分: 73 点
在线时间:2428(小时)
注册时间:1970-01-01
最后登录:2009-01-07
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子

0 M8_VS1003_SD卡做的MP3播放器

对Bozai(章其波)表示感谢。
CODE:

/*******************************************************************/
/*             MP3/Wma/Midi播放器                   */
/* 功能:播放文件系统为FAT16/32的SD卡根目录下的MP3/Wma/Mid文件   */
/*     有五个按键分别为 暂停/播放 模式 上一首 下一首 音量+ 音量-*/
/* 环境WinAVR 20060421                             */
/* 作者:Bozai(章其波)                             */
/* E-mail:[email]sudazqb@163.com[/email]                           */
/* 2006年12月13日                                 */
/*******************************************************************/
/*       MiniMP3 Player (mega8 + VS1003 + SD) V1.1         */
/*                                           */
/* Discription: Can play mp3/wma/wav/mid SF0 files in the root   */
/*         directery on the SD card which file system is FAT16*/
/*         or FAT32.                             */
/*         It has six keys to control this player         */
/*         MODE: switch between repet all (default),repet one */
/*             and shuffle                       */
/*         PLAY/PAUSE:                           */
/*         PREV: previous songs                     */
/*         NEXT: next songs                       */
/*         UP : volume up                         */
/*         DOWN: volume down                       */
/* Platform   : AVRStudio4.13 524 + WinAVR20070122           */
/*         optimize -0s                           */
/* Author   : bozai(Zhang Qibo)                       */
/* E-mail   : [email]sudazqb@163.com[/email]                         */
/* MSN     : [email]zhangqibo_1985@hotmail.com[/email]                 */
/* Date     : 2007-02-25                           */
/*******************************************************************/

/* Last modify: 2007-02-25         */
/* Change the directory to C:\music\ */
/* A bug fixed                 */
/* Modify some code to adjust new GCC compiler*/

#include<avr/io.h>
#include"MMC_SD/MMC_SD.h" //head files
#include"FAT/FAT.h"
#include"VS1003B/VS1003B.h"
#include<avr/pgmspace.h>

#define uint unsigned int

//diagnose and state indicate leds
//at start up this two led indicate error
//at normal they indicate the state of the MODE
#define LED1_CON() DDRC|=_BV(PC5)
#define LED1_ON() PORTC|=_BV(PC5)
#define LED1_OFF() PORTC&=~_BV(PC5)

#define LED2_CON() DDRB|=_BV(PB1)
#define LED2_ON() PORTB|=_BV(PB1)
#define LED2_OFF() PORTB&=~_BV(PB1)

//keys
#define STOP _BV(PD2)
#define MODE _BV(PD3)
#define NEXT _BV(PD7)
#define UP   _BV(PD4)
#define DOWN _BV(PD6)
#define PREV _BV(PD5)

#define MP3 1
#define WMA 2
#define MID 3

//mode
#define REPET_ALL 0
#define REPET_ONE 1
#define RANDOM   2

extern WORD SectorsPerClust;//每簇扇区数
extern WORD FirstDataSector;//第一个数据扇区数   //struct of file information
extern BYTE FAT32_Enable;

struct FileInfoStruct FileInfo;//文件信息

struct direntry MusicInfo;    //要播放的mp3文件信息        //the mp3 file item whichi will be played
uint16 totalsongs;            //总的音乐文件数目            //total songs in the root directery on the SD card
uint8 type;                    //文件类型                    //file type


void Delay(uint16 n)//延时
{
   while(n--)asm("nop");
}

//Timer initialization offer seed of the srandom()
void Timer1_Initial()
{
TCNT1H=0x00;
TCNT1L=0x00;
TCCR1A=0x03;//ctc mode use icr1
TCCR1B=0x01;//system clock;
ICR1H=0xff;
ICR1L=0xff;
}

void PlayMusicwithKey()//播放音乐函数,一旦执行不会退出
{
   uint16 keylen;            //用于键处理        //for key processing
   uint16 count;            //数据计数            //data counting
   uint8 i;                //循环变量            //loop variable
   uint16 j;                //循环变量            //loop variable
   DWORD p;                //簇指示值            //cluster
   DWORD totalsect;        //文件拥有的扇区数    //cotain the total sector number of a file
   uint16 leftbytes;        //剩余字节            //cotain the left bytes number of a file //the last cluster usually not fully occupied by the file
   uint8 *buffer;            //缓冲                //buffer
   DWORD sector;            //扇区                //recor the current sector to judge the end sector
   uint8 flag;                //播放/暂停标志        //flag of pause
   uint16 vol=DefaultVolume;//初始音量,应与vs1003函数里的初始音量相同    //default volume
   uint16 songs=1;            //默认放第一首歌    //play the fist songs by default
   uint8 mode=0;            //单曲重复            //repet all by default
   if(totalsongs==0)return;//如果没有歌曲则异常退出    //if no music file return
   unsigned long rand_val;
   Timer1_Initial();//启动定时器,用于产生随机函数的种子    //initialize the timer
next://下一首歌的起始地方                        //label for "goto"
   if(mode==RANDOM)//随机播放歌曲                //if the mode is shuffle the songs
   {
       rand_val = TCNT1;
       Delay((random() && 0x00ff));
       rand_val <<= 16;
       rand_val += TCNT1;
       srandom(rand_val);
       songs = (unsigned int)(((random()/214749)*(unsigned long)totalsongs)/10000)+1;//随机产生歌曲序号    //create random song number
   }
   count=0;//清基数    //clear count
   flag=1;
   while(count<2048 && (type != MID))//recommand 2048 zeros honoring DREQ befor soft reset
   {                                    //用于从wma跳出到下一首歌,和一首歌结束填充数据//midi格式不需要
       if((VS1003B_PIN & _BV(VS1003B_DREQ))!=0)
       {
           for(j=0;j<32;j++)
           {
               VS1003B_WriteDAT(0x00);//填充0    //fill 0
               count++;
           }
           if(count == 2047)break;
       }
   }
   VS1003B_SoftReset();//soft reset //in case of playing wma files//软件复位
   Search("\\music",&MusicInfo,&songs,&type);        //找到相应的文件        //find the file
   p   = MusicInfo.deStartCluster+(((unsigned long)MusicInfo.deHighClust)<<16);//读文件首簇    //the first cluster of the file
       
   totalsect = MusicInfo.deFileSize/512; //计算扇区数            //calculate the total sectors
   leftbytes = MusicInfo.deFileSize%512; //计算剩余的字节数    //calculate the left bytes    
   i=0;
   sector=0;
   
   while(1)
   {
       keylen=0;
     for(;i<SectorsPerClust;i++)        //一个簇    //a cluster
       {
           buffer=malloc(512);
           FAT_LoadPartCluster(p,i,buffer);//读一个扇区    //read a sector
           count=0;
           while(count<512)
           {
               if(flag==0){if(keylen){Delay(100);keylen--;}}
               else if(type == MID){if(keylen){Delay(100);keylen--;}}
               if((VS1003B_PIN & _BV(VS1003B_DREQ))!=0 && flag)    //根据需要送数据 //send data honoring DREQ
               {
                   for(j=0;j<32;j++)            //每次送32个数据        //32 Bytes each time
                   {
                       VS1003B_WriteDAT(buffer[count]);
                       count++;
                   }
                   if(keylen)keylen--;            //用于键处理            //for key processing
                   if(sector == totalsect && count >= leftbytes)        //如果文件已结束        //if this is the end of the file
                   {
                       if(type == MID)//waiting the midi file was decoded
                       {//对于mid音乐要接着送2048个零
                           count=0;
                           while(count<2048)//recommand 2048 zeros honoring DREQ goto next songs
                           {
                               if((VS1003B_PIN & _BV(VS1003B_DREQ))!=0 )
                               {
                                   for(j=0;j<32;j++)
                                   {
                                       VS1003B_WriteDAT(0x00);
                                       count++;
                                   }
                                   if(count == 2047)break;
                               }
                           }
                       }
                       i=SectorsPerClust;
                       break;
                   }//文件结束            //file ended
                   if(count == 511){break;}//512字节送完跳出        //break if a sector was sent
               }
               if((PIND&STOP)==0 /*&& keylen==0*/)//播放暂停键        //key PLAY/PAUSE
              {
                  Delay(100);
                   if(!(PIND&STOP))
                   {
                       while(!(PIND&STOP));
                        if(flag)flag=0;
                        else flag=1;
                        Delay(1000);
                    }
                }
               else if(!(PIND&DOWN) && keylen==0) //音量-            //Volume down
               {
                  Delay(100);
                     if(!(PIND&DOWN))
                   {
                   keylen=200;
                      vol=vol+((uint)(1<<8)+1);
                      if(vol>=0xFEFE) vol=0xFEFE;
                      else VS1003B_WriteCMD(0x0b,vol);
                    }
                }
                else if(!(PIND&UP) && keylen==0) //音量+            //Volume up
                  {
                    Delay(100);
                    if(!(PIND&UP))
                    {
                    keylen=200;
                      vol=vol-((uint)(1<<8)+1);
                      if(vol<=0x0101) vol=0x0101;
                      else VS1003B_WriteCMD(0x0b,vol);
                    }
                }
                else if(!(PIND&NEXT)) //下一首                        next songs
                {
                   Delay(0x7fff);        
                   if(!(PIND&NEXT))
                   {
                       Delay(0x7fff);
                       if(!(PIND&NEXT))
                       {
                           while(!(PIND&NEXT));
                           songs++;
                           if(songs > totalsongs)songs=1;
                           {
                               free(buffer);
                           //    Delay(0xffff);
                               goto next;
                           }
                       }
                   }
                  }
                else if(!(PIND&PREV)) //上一首                        previous songs
                {
                   Delay(0x7fff);        
                   if(!(PIND&PREV))
                   {
                       Delay(0x7fff);
                       if(!(PIND&PREV))
                       {
                           while(!(PIND&PREV));
                           if(songs == 1)songs=totalsongs;
                           else songs--;
                           {
                               free(buffer);
                           //    Delay(0xffff);
                               goto next;
                           }
                       }
                   }
                  }
                else if((!(PIND&MODE)) && keylen==0) //模式            //mode key
                {
                   Delay(100);        
                   if(!(PIND&MODE))
                   {
                       keylen=0xffff;
                       if(mode==REPET_ALL)
                       {
                           mode=REPET_ONE;
                           LED1_ON();
                           LED2_OFF();
                       }
                       else if(mode==REPET_ONE)//next mode is shuffle
                       {
                           mode=RANDOM;
                           LED1_OFF();
                           LED2_ON();
                           srandom(((unsigned long)TCNT1)<<16);//产生随机数的种子
                       }
                       else
                       {
                           mode=REPET_ALL;
                           LED1_OFF();
                           LED2_OFF();
                       }
                   }
                  }
           }
           sector++;
           free(buffer);
       }
       i=0;
       p=FAT_NextCluster(p);//读下一簇数据            //read next cluster
       if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))//如果无后续簇则结束,    //no more cluster
       {
               if(mode==REPET_ALL)songs++;
               if(songs>totalsongs)songs=1;
               goto next;
       }
   }
}

//main function
int main()
{
   DDRD &= 0x03;//初始化端口
   PORTD |= 0xfc;
   
   LED1_CON();
   LED1_OFF();
   LED2_CON();
   LED2_OFF();


   OSCCAL = 0x00;//最小RC振荡频率    //in order to operate some low speed card the initialization should run at lowest speed

   Delay(0xffff);

   MMC_SD_Init();//初始化spi口        //SPI initialize

   Delay(0xffff);

   if(VS1003B_Init())LED1_ON();//配置VS1003    //config vs1003

   Delay(0xffff);//提供足够的延时                //supply enough delay
   Delay(0xffff);
   Delay(0xffff);
   Delay(0xffff);
   Delay(0xffff);

   MMC_SD_Reset();//初始化SD卡                    //sd card initialize

   OSCCAL = 0xff;//最大RC振荡频率                //normal operation maximum the frequency

   Delay(0xffff);                                //wait for stable

   if(FAT_Init())LED2_ON();//初始化文件系统 支持FAT16和FAT32    //initialize file system FAT16 and FAT32 are supported

   Search("\\music",&MusicInfo,&totalsongs,&type);//搜索根目下的歌曲 不包含子目录
   //也可以指定文件夹 如Search("\\new\\mp3",&MusicInfo,&totalsongs,&type);
   //代表在根目录下的new文件夹下的mp3文件下的音乐文件

   //search the songs in the root directery on the SD card
   //You can also specify the directery where the songs are placed
   //eg: Search("\\new\\mp3",&MusicInfo,&totalsongs,&type);
   //        means search the file in the foler C:\new

   PlayMusicwithKey();//播放歌曲        //play songs
   return 0;
}




描述:MP3制作资料
附件: M8_Vs1003_ mp3.rar (96 K) 下载次数:324
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元

AVRVi 与您共同发展! 赠人玫瑰,手留余香。
一份好的资料,放在机器中会成为垃圾文件;
如果共享出来,就能有成千上万的朋友受益;
每人贡献一点,中国的电子技术将迅速提高。
[楼 主] | Posted: 04-19 09:57 顶端
ringbow_bing





级别: 新手上路
精华: 0
发帖: 1
威望: 12 点
金钱: 110 VI
贡献值: 0 点
技术积分: 0 点
在线时间:1(小时)
注册时间:2007-04-06
最后登录:2007-04-21
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



多谢了
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[1 楼] | Posted: 04-19 15:08 顶端
likeeavr

特殊贡献奖 技术群用户

级别: 精灵王
精华: 5
发帖: 104
威望: 136 点
金钱: 1550 VI
贡献值: 4 点
技术积分: 15 点
在线时间:37(小时)
注册时间:1970-01-01
最后登录:2007-08-27
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



恩 开始要做MP3了
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元

omy 饿滴神~
[2 楼] | Posted: 04-19 19:58 顶端
fly8388





级别: 新手上路
精华: 0
发帖: 1
威望: 12 点
金钱: 110 VI
贡献值: 0 点
技术积分: 0 点
在线时间:0(小时)
注册时间:2007-04-26
最后登录:2008-06-23
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



太感谢了, 顶~~
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[3 楼] | Posted: 04-26 18:22 顶端
菜头





级别: 侠客
精华: 0
发帖: 11
威望: 32 点
金钱: 310 VI
贡献值: 1 点
技术积分: 0 点
在线时间:4(小时)
注册时间:1970-01-01
最后登录:2007-04-28
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



顶 ,好资料,学习!!!!!!!!!!!!
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[4 楼] | Posted: 04-27 12:08 顶端
youjjyy



级别: 新手上路
精华: 0
发帖: 6
威望: 17 点
金钱: 160 VI
贡献值: 0 点
技术积分: 0 点
在线时间:0(小时)
注册时间:2007-04-27
最后登录:2007-05-03
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



我刚看.不知道那位大虾做过,发些图片让小第看看好吗?
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[5 楼] | Posted: 04-27 17:26 顶端
shaping





级别: 新手上路
精华: 0
发帖: 1
威望: 12 点
金钱: 110 VI
贡献值: 0 点
技术积分: 0 点
在线时间:0(小时)
注册时间:2007-04-29
最后登录:2007-04-29
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



先收藏了,谢谢!
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[6 楼] | Posted: 04-29 11:26 顶端
tcxywmz





级别: 新手上路
精华: 0
发帖: 1
威望: 12 点
金钱: 110 VI
贡献值: 0 点
技术积分: 0 点
在线时间:0(小时)
注册时间:2007-04-18
最后登录:2008-08-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好东西啊,我喜欢
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[7 楼] | Posted: 05-02 10:01 顶端
aerohobby



级别: 新手上路
精华: 0
发帖: 1
威望: 2 点
金钱: 10 VI
贡献值: 0 点
技术积分: 0 点
在线时间:1(小时)
注册时间:2007-05-06
最后登录:2007-05-14
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



谢谢
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[8 楼] | Posted: 05-06 14:12 顶端
ywzlq





级别: 新手上路
精华: 0
发帖: 9
威望: 10 点
金钱: 89 VI
贡献值: 0 点
技术积分: 0 点
在线时间:9(小时)
注册时间:2007-05-08
最后登录:2009-01-04
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



谢谢
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[9 楼] | Posted: 05-08 17:31 顶端
leon_mn





级别: 侠客
精华: 0
发帖: 20
威望: 21 点
金钱: 200 VI
贡献值: 0 点
技术积分: 0 点
在线时间:28(小时)
注册时间:2007-05-08
最后登录:2007-10-11
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



got it ,Thanks
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[10 楼] | Posted: 05-09 17:00 顶端
youhu1986



级别: 骑士
精华: 3
发帖: 44
威望: 71 点
金钱: 740 VI
贡献值: 3 点
技术积分: 9 点
在线时间:20(小时)
注册时间:1970-01-01
最后登录:2008-09-16
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



有机会也整个出来玩玩,呵呵
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[11 楼] | Posted: 05-09 22:07 顶端
铜河



技术群用户 优秀斑竹奖

级别: 论坛版主
精华: 8
发帖: 580
威望: 1017 点
金钱: 6781 VI
贡献值: 253 点
技术积分: 34 点
在线时间:156(小时)
注册时间:1970-01-01
最后登录:2009-01-07
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好东西!
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[12 楼] | Posted: 05-14 12:12 顶端
bing0110



级别: 新手上路
精华: 0
发帖: 4
威望: 5 点
金钱: 40 VI
贡献值: 0 点
技术积分: 0 点
在线时间:3(小时)
注册时间:2007-07-01
最后登录:2007-10-02
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



有图吗
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[13 楼] | Posted: 08-05 09:47 顶端
祈福





级别: 新手上路
精华: 0
发帖: 7
威望: 8 点
金钱: 70 VI
贡献值: 0 点
技术积分: 0 点
在线时间:1(小时)
注册时间:2007-09-26
最后登录:2008-04-02
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



谢谢!
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[14 楼] | Posted: 10-05 13:16 顶端
melo





级别: 新手上路
精华: 0
发帖: 8
威望: 9 点
金钱: 80 VI
贡献值: 0 点
技术积分: 0 点
在线时间:6(小时)
注册时间:2007-11-29
最后登录:2008-02-25
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



程序架构不好,很难进行扩展;而且delay 太多
  Delay(0xffff);//提供足够的延时           //supply enough delay
  Delay(0xffff);
  Delay(0xffff);
  Delay(0xffff);
  Delay(0xffff);
如果程序太大 ,非常容易死掉,当然小程序倒无所谓

学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[15 楼] | Posted: 12-08 16:00 顶端
我想我能





级别: 新手上路
精华: 0
发帖: 8
威望: 9 点
金钱: 100 VI
贡献值: 0 点
技术积分: 0 点
在线时间:18(小时)
注册时间:2008-03-20
最后登录:2008-11-08
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



我也想弄一个来玩玩
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[16 楼] | Posted: 08-31 12:28 顶端
zldiy





级别: 侠客
精华: 0
发帖: 18
威望: 19 点
金钱: 180 VI
贡献值: 0 点
技术积分: 0 点
在线时间:5(小时)
注册时间:2008-02-16
最后登录:2008-09-03
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好东西了
由时间做给玩玩

学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[17 楼] | Posted: 09-03 09:43 顶端
yangshaodong

技术群用户

级别: 精灵王
精华: 0
发帖: 138
威望: 149 点
金钱: 1561 VI
贡献值: 0 点
技术积分: 0 点
在线时间:69(小时)
注册时间:2007-03-13
最后登录:2009-01-07
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



多谢多谢!!!
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[18 楼] | Posted: 09-03 09:58 顶端
cnechen





级别: 侠客
精华: 0
发帖: 17
威望: 18 点
金钱: 189 VI
贡献值: 0 点
技术积分: 0 点
在线时间:8(小时)
注册时间:2008-10-19
最后登录:2009-01-08
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



很好,正在找这资料
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[19 楼] | Posted: 10-20 10:40 顶端
zhaojun_xf



级别: 圣骑士
精华: 1
发帖: 74
威望: 77 点
金钱: 1179 VI
贡献值: 0 点
技术积分: 3 点
在线时间:62(小时)
注册时间:2008-04-17
最后登录:2009-01-01
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



收藏   学习
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[20 楼] | Posted: 10-31 07:31 顶端
hanbao0371



级别: 精灵王
精华: 3
发帖: 157
威望: 174 点
金钱: 2209 VI
贡献值: 0 点
技术积分: 9 点
在线时间:26(小时)
注册时间:2008-01-09
最后登录:2009-01-08
查看作者资料 发送短消息 推荐此帖 引用回复这个帖子



好东西啊,顶起来
学习开发利器:AVRmega128开发板,AVR仿真器,AVR编程器,AVR核心板四合一,仅需498元
[21 楼] | Posted: 10-31 09:28 顶端

AVR与虚拟仪器论坛 AVRVi.com -> AVR单片机论坛(主坛)