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

📄 gxf.c

📁 一个基于ATmega64、VS1003、SD卡的mp3播放程序
💻 C
字号:
#include <includes.h>
#include <LCD.h>

unsigned char reg[]={
0x12,0x13,0x10,0x11,0x10,0x12,0x10,0x13,0x02,0x01,
0x08,0x03,0x0b,0x21,0x30,0x31,0x32,0x33,0x34,0x35,
0x36,0x37,0x38,0x39,0x40,0x41,0x42,0x43,0x44,0x45,
0x07,0x07,0x07,0x07
};

unsigned int reg_data[]={
0x0009,0x133e,0x0604,0x0001,0x4634,0x0016,0x4730,0x313e,0x0700,0x011b,
0x0202,0x1030,0x0070,0x0000,0x0303,0x0303,0x0303,0x0303,0x0404,0x0404,
0x0404,0x0303,0x0000,0x0000,0x0000,0x0000,0xdb00,0x0000,0xaf00,0xdb00,
0x0005,0x0025,0x0027,0x0037
};


void LCD_Delay(unsigned int i)
{
  unsigned int j;
  for(;i>0;i--)
  for(j=200;j>0;j--);
}

void wr_lcd(unsigned char comm,unsigned int dat)
{
  PORTD&=~(1<<rs);
  PORTD|=(comm<<rs);
  PORTC=dat;
  PORTA=dat>>8;
  PORTD&=~(1<<wr);
  PORTD|=(1<<wr);
}

void init_lcd()
{
  unsigned char i;
  PORTD&=~(1<<reset);
  LCD_Delay(10);
  PORTD|=(1<<reset);
  for(i=0;i<34;i++)
  {
    wr_lcd(0,reg[i]);
	wr_lcd(1,reg_data[i]);
	if(i==5)LCD_Delay(25);
	else if(i==29)LCD_Delay(220);
	else if(i==31||i==33)LCD_Delay(45);
  }
}


void show_lcd()
{
 unsigned int i;
 PORTC = 0x00;
 DDRC  = 0xFF;
 PORTD = 0x00; 
 DDRD  = 0xFF;
 PORTA = 0x00;
 DDRA  = 0xFF;
 PORTD|=(1<<rd);
 init_lcd();
 wr_lcd(0,0x07);
 wr_lcd(1,0x0035);
 for(i=0;i<12907;i++){wr_lcd(0,0x22);wr_lcd(1,0x001f);}
 for(i=0;i<12907;i++){wr_lcd(0,0x22);wr_lcd(1,0x001f);}
 for(i=0;i<12906;i++){wr_lcd(0,0x22);wr_lcd(1,0x001f);}
 wr_lcd(0,0x07);
 wr_lcd(1,0x0037);
 
} 

void ZK_Enable(void)
{
	SPCR=(1<<SPE)|(1<<MSTR);
	SPSR|=(1<<SPI2X);

}
//***************************************************
//函数名称:SD_SPI_WriteByte(unsigned char val)
//函数功能:SPI发送或读取一个字节
//输入:val:将发送的字节
//输出:读取到的一字节
//***************************************************

unsigned char ZK_WriteByte(unsigned char val)
{
	SPDR=val;
	while(!(SPSR&(1<<SPIF)));
	return SPDR;
}

void LCD_Show_Word(unsigned char X,unsigned char Y,unsigned int word,unsigned int Color,unsigned int Back)
{
	unsigned char word_tab[32];
	unsigned char i,j,temp;
	unsigned long Address=0;
	PORTD&=~(1<<3);
	if((word>>8)>=0xA1 && (word>>8)<= 0xAB)
	Address =(unsigned long)(((word>>8)-0xA1)*94+((word&0xff)-0xA1))*32+ 0x2C9D0;
	else if((word>>8)>=0xB0 && (word>>8)<= 0xF7)
	Address = (unsigned long)(((word>>8)-0xB0)*94+((word&0xff)-0xA1)+846)*32+ 0x2C9D0;
	wr_lcd(0,0x21);
    wr_lcd(1,Y*256+X);
	ZK_WriteByte(0x0B);
	ZK_WriteByte((Address>>16)&0xff);
	ZK_WriteByte((Address>>8)&0xff);
	ZK_WriteByte((Address)&0xff);
	ZK_WriteByte(0xff);
	for(i=0;i<32;i++)word_tab[i]=ZK_WriteByte(0xff);
	PORTD|=(1<<3);
	for(i=0;i<32;i++)
	{
	    temp=word_tab[i];
		for(j=0;j<8;j++)
		{
			if((temp&0x80)!=0){wr_lcd(0,0x22);wr_lcd(1,Color);}
			else {wr_lcd(0,0x22);wr_lcd(1,Back);}
			temp<<=1;
	    }
		if(i%2)
		{
			Y++;
			wr_lcd(0,0x21);
			wr_lcd(1,Y*256+X);
	  	}
	}

}

void LCD_Show_Char(unsigned char X,unsigned char Y,unsigned char Char,unsigned int Color,unsigned int Back)
{
	unsigned char word_tab[16];
	unsigned char i,j,temp;
	unsigned long Address=0;
	PORTD&=~(1<<3);
	if(Char>=0x20 && Char<=0x7E)Address=(Char-0x20)*16+0x1DD780;
	wr_lcd(0,0x21);
    wr_lcd(1,Y*256+X);
	ZK_WriteByte(0x0B);
	ZK_WriteByte((Address>>16)&0xff);
	ZK_WriteByte((Address>>8)&0xff);
	ZK_WriteByte((Address)&0xff);
	ZK_WriteByte(0xff);
	for(i=0;i<16;i++)word_tab[i]=ZK_WriteByte(0xff);
	PORTD|=(1<<3);
	for(i=0;i<16;i++)
	{
	    temp=word_tab[i];
		for(j=0;j<8;j++)
		{
			if((temp&0x80)!=0){wr_lcd(0,0x22);wr_lcd(1,Color);}
			else {wr_lcd(0,0x22);wr_lcd(1,Back);}
			temp<<=1;
	    }
		Y++;
		wr_lcd(0,0x21);
		wr_lcd(1,Y*256+X);
	}
}




void LCD_Show_String(unsigned char X,unsigned char Y, char str[],unsigned int Color,unsigned int Back)
{
	unsigned int i;
	for(i=0;str[i]!=0;i++)
	{
		if(str[i]>=0x20&&str[i]<=0x7e)
		{
			if((X+8)>176){Y+=16;X=0;}
			LCD_Show_Char(X,Y,str[i],Color,Back);
			X+=8;
		}
		else if(str[i+1]>=0xa1)
		{
			if((X+16)>176){Y+=16;X=0;}
			LCD_Show_Word(X,Y,str[i]*256+str[i+1],Color,Back);
			i++;
			X+=16;
		}
		else
		{
			if((X+8)>175){Y+=16;X=0;}
			LCD_Show_Char(X,Y,0x20,Color,Back);
			X+=8;
		}
		if(Y>204)break;
	}
}





⌨️ 快捷键说明

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