📄 main._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 + -