/****************************************************************************************************
Chip: ATmega32L
Frequency : 16000000HZ
C Compiler : ICC 6.31A
Author :Nmssid@163.com
***************************************************************************************************/
#include "main.h"
#include "SPFD5420H.h"
#include "font8x16.h"
void LCD_Write_Data8 (unsigned char Data)
{
LCD_DATA_PORT=Data;
LCD_WR_Low();
LCD_WR_High();
}
void LCD_Write_Data16 (unsigned int Data)
{
LCD_DATA_PORT=(Data>>8);
LCD_WR_Low();
LCD_WR_High();
LCD_DATA_PORT=(Data&0xff);
LCD_WR_Low();
LCD_WR_High();
}
void LCD_Write_Data_8 (unsigned char Data)
{
LCD_CS_Low();
LCD_RS_High();
LCD_DATA_PORT=Data;
LCD_WR_Low();
LCD_WR_High();
LCD_CS_High();
}
void LCD_Write_Data_16 (unsigned int Data)
{
LCD_CS_Low();
LCD_RS_High();
LCD_DATA_PORT=(Data>>8);
LCD_WR_Low();
LCD_WR_High();
LCD_DATA_PORT=(Data&0xff);
LCD_WR_Low();
LCD_WR_High();
LCD_CS_High();
}
void LCD_Write_Reg(unsigned int Register)
{
LCD_CS_Low();
LCD_RS_Low();
LCD_Write_Data16(Register);
LCD_CS_High();
}
void LCD_Write_Cmd(unsigned int Register, unsigned int Data)
{
LCD_CS_Low();
LCD_RS_Low();
LCD_Write_Data16(Register);
LCD_RS_High();
LCD_Write_Data16(Data);
LCD_CS_High();
}
//================================================================
void LCD_SET_XY (unsigned int x,unsigned char y)
{
LCD_Write_Cmd(0x200,y);
LCD_Write_Cmd(0x201,x);
LCD_Write_Reg(0x0202);
}
void LCD_Clear (unsigned int color)
{
unsigned char x;
unsigned int y;
LCD_SET_XY(0,0);
LCD_CS_Low();
LCD_RS_High();
for(x=0;x<240;x++)
{
for(y=0;y<400;y++)
{
LCD_Write_Data_16(color);
}
}
}
//================================================================
void LCD_Write_Char (unsigned char String,unsigned int x,unsigned char y)
{
unsigned char k,line,Ctemp;
LCD_SET_XY(x,y);
String-=0x20;
for (line=0; line<16; line++)
{
LCD_CS_Low();
LCD_RS_High();
Ctemp=font8x16[String][line];
for(k=0;k<8;k++)
{
if(Ctemp&0x01)
{
LCD_Write_Data16(String_Color);
}
else
{
LCD_Write_Data16(Back_Color);
}
Ctemp=Ctemp>>1;
}
LCD_SET_XY(x,++y);
}
}
void LCD_Write_String (unsigned char *String,unsigned int x,unsigned char y)
{
while ( * String )
{
LCD_Write_Char (( *String++),x,y);
x+=8;
}
}
//================================================================
void LCD_Init (void)
{
LCD_CON_DDR|=(1<<LCD_RST)|(1<<LCD_CS)|(1<<LCD_RD)|(1<<LCD_RS)|(1<<LCD_WR);
LCD_CON_PORT|=(1<<LCD_RST)|(1<<LCD_CS)|(1<<LCD_RD)|(1<<LCD_RS)|(1<<LCD_WR);
LCD_DATA_DDR=0xff;
LCD_DATA_PORT=0xff;
Delay_us(20);
LCD_RST_Low();
Delay_ms(5);
LCD_RST_High();
Delay_ms(5);
LCD_CS_Low();
LCD_Write_Cmd(0x0606,0x0000);
Delay_us(100);
LCD_Write_Cmd(0x0007,0x0001);
Delay_us(100);
LCD_Write_Cmd(0x0110,0x0001);
Delay_us(100);
LCD_Write_Cmd(0x0100,0x17B0);
LCD_Write_Cmd(0x0101,0x0147);
LCD_Write_Cmd(0x0102,0x019D);
LCD_Write_Cmd(0x0103,0x3600);
LCD_Write_Cmd(0x0281,0X0010);
Delay_us(100);
LCD_Write_Cmd(0x0102,0x01BD);
Delay_us(100);
LCD_Write_Cmd(0x0000,0x0000);
LCD_Write_Cmd(0x0001,0x0000);
LCD_Write_Cmd(0x0002,0x0100);
LCD_Write_Cmd(0x0003,0x1038); //0x1030 0x1038
LCD_Write_Cmd(0x0006,0x0000);
LCD_Write_Cmd(0x0008,0x0503);
LCD_Write_Cmd(0x0009,0x0001);
LCD_Write_Cmd(0x000B,0x0010);
LCD_Write_Cmd(0x000C,0x0000);
LCD_Write_Cmd(0x000F,0x0000);
LCD_Write_Cmd(0x0007,0x0001);
LCD_Write_Cmd(0x0010,0x0013);
LCD_Write_Cmd(0x0011,0x0202);
LCD_Write_Cmd(0x0012,0x0300);
LCD_Write_Cmd(0x0020,0x021E);
LCD_Write_Cmd(0x0021,0x0202);
LCD_Write_Cmd(0x0022,0x0100);
LCD_Write_Cmd(0x0090,0x8000);
LCD_Write_Cmd(0x0092,0x0000);
LCD_Write_Cmd(0x0100,0x16B0);
LCD_Write_Cmd(0x0101,0x0147);
LCD_Write_Cmd(0x0102,0x01BD);
LCD_Write_Cmd(0x0103,0x2A00);
LCD_Write_Cmd(0x0107,0x0000);
LCD_Write_Cmd(0x0110,0x0001);
LCD_Write_Cmd(0x0210,0);
LCD_Write_Cmd(0x0211,239);
LCD_Write_Cmd(0x0212,0);
LCD_Write_Cmd(0x0213,399);
LCD_Write_Cmd(0x0280,0x0000);
LCD_Write_Cmd(0x0281,0x000E);
LCD_Write_Cmd(0x0282,0x0000);
LCD_Write_Cmd(0x0300,0x0101);
LCD_Write_Cmd(0x0301,0x0B2C);
LCD_Write_Cmd(0x0302,0x1030);
LCD_Write_Cmd(0x0303,0x3010);
LCD_Write_Cmd(0x0304,0x2C0B);
LCD_Write_Cmd(0x0305,0x0101);
LCD_Write_Cmd(0x0306,0x0807);
LCD_Write_Cmd(0x0307,0x0708);
LCD_Write_Cmd(0x0308,0x0107);
LCD_Write_Cmd(0x0309,0x0105);
LCD_Write_Cmd(0x030A,0x0F04);
LCD_Write_Cmd(0x030B,0x0F00);
LCD_Write_Cmd(0x030C,0x000F);
LCD_Write_Cmd(0x030D,0x040F);
LCD_Write_Cmd(0x030E,0x0501);
LCD_Write_Cmd(0x030F,0x0701);
LCD_Write_Cmd(0x0400,0x3500);
LCD_Write_Cmd(0x0401,0x0001);
LCD_Write_Cmd(0x0404,0x0000);
LCD_Write_Cmd(0x0500,0x0000);
LCD_Write_Cmd(0x0501,0x0000);
LCD_Write_Cmd(0x0502,0x0000);
LCD_Write_Cmd(0x0503,0x0000);
LCD_Write_Cmd(0x0504,0x0000);
LCD_Write_Cmd(0x0505,0x0000);
LCD_Write_Cmd(0x0600,0x0000);
LCD_Write_Cmd(0x0606,0x0000);
LCD_Write_Cmd(0x06F0,0x0000);
LCD_Write_Cmd(0x07F0,0x5420);
LCD_Write_Cmd(0x07F3,0x288A);
LCD_Write_Cmd(0x07F4,0x0022);
LCD_Write_Cmd(0x07F5,0x0041);
LCD_Write_Cmd(0x07F0,0x0000);
LCD_Write_Cmd(0x0007,0x0173);
LCD_Clear(Back_Color);
}