⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main._c

📁 基于ATmega64的MP3程序
💻 _C
字号:
//ICC-AVR application builder : 2005-11-12 17:11:59
// Target : M16
// Crystal: 8.0000Mhz
// copyright:鲁军波(endylu)
// www.shop34612283.taobao.com
// www.adembed.com
#include <iom16v.h>
#include <macros.h>
//#include <stdio.h> 
#include "main.h"

void USART_TXD(uint8 data) //发送采用查询方式 
{ 
        while( !(UCSRA & BIT(UDRE)) ); 
        UDR=data; 
        while( !(UCSRA & BIT(TXC )) ); 
        UCSRA|=BIT(TXC); 
} 

uint8 timer1_over;
uint8 MP3_all_number,MP3_current_number=0;
uint8 play_state;
uint8 key_value;
uint8 set_volume=4;     //用的8级音量(64.69...99)
uint8 buffer[512];      //缓存扇区的512个字节   

FAT_INFO fat_info;      //FAT的关键数据
MP3_INFO mp3_info;      //文件的关键数据

  
//=======================================================================  
void Delay_us(uint16 time) //set time 120 to 100us,set 1 to 3.5us;
	{while (time--)
	 _WDR();
	
	}
void Delay_ms(uint16 time) 
	{while (time--)
	 Delay_us(1200);
	}

//void putstring(uint8 *string)	
//{
// 	 while(*string)
//	   {
//	    putchar(*string);
//		string++;
//	   }
//}
//***************************************************************
void timer1_init(void)
{//timer1 INIT 0.1S
 TCCR1B=0X0D;
 TCNT0=0X00;
 OCR1AH=0X02;         //定时0.1s
 OCR1AL=0X00;
 TIMSK|=0X10;
}
//=======================================================================
void ASCII(uint8 *b,uint8 n)
{*b=n/10+48;
 *(b+1)=n%10+48;
}

//=======================================================================
#pragma interrupt_handler timer0comp:20
void timer0comp (void)
{ 
 read_keyboard();
}

#pragma interrupt_handler timer1compA:7
void timer1compA (void)
{
 timer1_over=1;
}

//=======================================================================
void main(void)
{ 
  //WDTCR|=(1<<WDP0)|(1<<WDP1)|(1<<WDP2)|(1<<WDE);
  uart_init();
  putstring("RUN!");
  main_init();

  for(;;)
  {
   SONG_task();
   _WDR();
   KBOD_task();
   _WDR();
   DISP_task();
   _WDR();
   }
}


//=======================================================================
void uart_init(void)           //用232串口发数据到PC,收集数据
  {
    UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
    UBRRH=1;
	UBRRL=0X9E;
    UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
  }


//=======================================================================
void main_init(void)
{
 I2C_Ini();
 STA013_Ini(); 
 buffer[0]=SDInit();    //里面有SPI的使能初始化,要放在LCD初始化的前面
 LCD_init();          //初始化LCD模块
                      //显示LOGO
 
 
 if(buffer[0])
   {
    LCD_write_String(0,1,12,"SD INIT ERR!",0);
	putstring("SD INIT ERR!");
    while(1);
   } 
 LCD_write_String(0,1,11,"SD INIT OK!",0);
 putstring("SD INIT OK!"); 
 
 sta_Init();
 LCD_write_String(0,2,10,"STA013 OK!",0);
 putstring("STA013 OK!");
 
 if(FATinit())
   {
    LCD_write_String(0,3,13,"FAT INIT ERR!",0);
	putstring("FAT INIT ERR!");
    while(1);
   }
 LCD_write_String(0,3,12,"FAT INIT OK!",0);
 putstring("FAT INIT OK!");
 
 Mp3_number_Counter();

 if(MP3_all_number==0)
    {
	 LCD_write_String(0,4,13,"HAVE NOT MP3!",0);     //启动3310显示没有MP3文件
	 putstring("HAVE NOT MP3!");
	 while(1);
	}
 
 Delay_ms(500);
 LCD_clear();          
                    
 LCD_set_XY(0,2);
 LCD_write_byte(0xFF,1);
 LCD_write_byte(0x01,1);
 
 LCD_set_XY(82,2);
 LCD_write_byte(0x01,1);
 LCD_write_byte(0xFF,1);
 
 //LCD_set_XY(0,3);
 LCD_write_byte(0x0F,1);
 LCD_write_byte(0x08,1);
 
 LCD_set_XY(82,3);
 LCD_write_byte(0x08,1);
 LCD_write_byte(0x0F,1);
 
 LCD_write_String(20,5,1,"-",0);
 ASCII(buffer,MP3_all_number);
 LCD_write_String(26,5,2,buffer,0);
 LCD_write_byte(0xFF,0);
  //=================================================================
  /*音量显示划条*/
  LCD_write_String(40,5,3,"vol",0);
  buffer[0]=24;
  LCD_set_XY(58,5);
  LCD_write_byte(0x7E,1);
  while(buffer[0]--)
  {
   LCD_write_byte(0x42,1);
  }
  LCD_write_byte(0x7E,1);
  //==================================================================
  sta_SetVolume(59+set_volume*5,1);         //第一级为59,每级加5点
  LCD_set_XY(59,5);
  buffer[0]=set_volume*3;
  while(buffer[0]--)
  {
  LCD_write_byte(0x5A,1);
  }
  //==================================================================
  LCD_write_tubiao(0,5,0);
  DAT_Directory();
  
  pcm1770_Ini();
  pcm1770_init();	
  key_init();
  timer1_init();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -