AVR128驱动2.4寸TFT(主控芯片ILI9325)
AVR128驱动2.4寸TFT(主控芯片ILI9325)
单片机 2010-08-29 03:46:53 阅读255 评论0 字号:大中小 订阅
1、原理图:AVR128与TFT最小系统原理图。
2、程序
/************************************/*lcd.c************************************/
#include "lcd.h"
int main(void)
{
InitIO();/*IO口初始化*/
ILI9325_Initial();/*LCD初始化*/
ClearScreen(0xFFFF);/*清屏*/
//LCD_SetPos(0,0,239,319);
while(1)
{
Pant(0xf800,0,240,0,40); //红色
Pant(0X07E0,0,240,40,80); //绿色
Pant(0x001f,0,240,80,120); //蓝色
Pant(0xf800,0,240,120,160); //红色
Pant(0X07E0,0,240,160,200); //绿色
Pant(0x001f,0,240,200,240); //蓝色
Pant(0xf800,0,240,240,280); //红色
Pant(0X07E0,0,240,280,320); //绿色
delayms(1000);
delayms(1000);
ClearScreen(0xFFFF);
Pant(0xf800,0,240,0,320); //红色
delayms(1000);
delayms(1000);
ClearScreen(0xFFFF);
Pant(0X07E0,0,240,0,320); //绿色
delayms(1000);
delayms(1000);
ClearScreen(0xFFFF);
Pant(0x001f,0,240,0,320); //蓝色
delayms(1000);
delayms(1000);
ClearScreen(0xFFFF);
}
return 1;
}
/************************************/*lcd.h************************************/
/*********************包含文件*************************/
#include
#include
#include
/*********************类型定义*************************/
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
#define WINDOW_XADDR_START 0x0050 // Horizontal Start Address Set #define WINDOW_XADDR_END 0x0051 // Horizontal End Address Set #define WINDOW_YADDR_START 0x0052 // Vertical Start Address Set #define WINDOW_YADDR_END 0x0053 // Vertical End Address Set #define GRAM_XADDR 0x0020 // GRAM Horizontal Address Set #define GRAM_YADDR 0x0021 // GRAM Vertical Address Set
#define GRAMWR 0x0022 // memory write
#define _nop_() asm("NOP")
#define LCD_RS_DDR DDRG //数据/命令切换
#define LCD_RS_PORT PORTG
#define LCD_RS_BIT 2
#define LCD_CS_DDR DDRG //片选
#define LCD_CS_PORT PORTG
#define LCD_CS_BIT 3
#define LCD_WR_DDR DDRG //写控制
#define LCD_WR_PORT PORTG
#define LCD_WR_BIT 0
#define LCD_RD_DDR DDRG //读控制
#define LCD_RD_PORT PORTG
#define LCD_RD_BIT 1
#define LCD_RST_DDR DDRG //复位
#define LCD_RST_PORT PORTG
#define LCD_RST_BIT 4
#define LCD_CS_H LCD_CS_PORT |= 1<>8;
n=y;
Write_Cmd(0x00,x);
Write_Data(m,n);
}
/****************************************************************************
作 者:jundg
函数名:static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
函数功能:设置显示区域
函数参数:x0行起始点,x1行结束点,y0列起始点,y1列结束点
返回值:无
********************************************************************************/
static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
{
Write_Cmd_Data(WINDOW_XADDR_START,x0);
Write_Cmd_Data(WINDOW_XADDR_END,x1);
Write_Cmd_Data(WINDOW_YADDR_START,y0);
Write_Cmd_Data(WINDOW_YADDR_END,y1);
Write_Cmd_Data(GRAM_XADDR,x0);
Write_Cmd_Data(GRAM_YADDR,y0);
Write_Cmd (0x00,0x22);//LCD_WriteCMD(GRAMWR);
}
/****************************************************************************
作 者:jundg
函数名:void Pant(int dcolor,unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
函数功能:设置显示区域并显示颜色
函数参数:dcolor颜色值,x0行起始点,x1行结束点,y0列起始点,y1列结束点
返回值:无
********************************************************************************/
void Pant(int dcolor,unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
{
int i,j;
LCD_SetPos(x0,x1,y0,y1);
for(i=0;i<320;i++)
{
for (j=0;j<240;j++)
{
Write_Data(dcolor>>8,dcolor);
}
}
}
/****************************************************************************
作 者:jundg
函数名:void ClearScreen(unsigned int bColor)
函数功能:清屏
函数参数:bColor=0xffff清屏
返回值:无
********************************************************************************/
void ClearScreen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,240,0,320);//320x240
for (i=0;i<322;i++)
{
for (j=0;j<240;j++)
Write_Data(bColor>>8,bColor);
}
}
/****************************************************************************
作 者:jundg
函数名:void ILI9325_Initial(void)
函数功能:LCD初始化
函数参数:无
返回值:无
********************************************************************************/
void ILI9325_Initial(void)
{
LCD_CS_H;
delayms(5);
LCD_RST_L;
delayms(5);
LCD_RST_H;
delayms(5);
delayms(50);
Write_Cmd_Data(0x0001,0x0100);
Write_Cmd_Data(0x0002,0x0700);
Write_Cmd_Data(0x0003,0x1030);
Write_Cmd_Data(0x0004,0x0000);
Write_Cmd_Data(0x0008,0x0207);
Write_Cmd_Data(0x0009,0x0000);
Write_Cmd_Data(0x000A,0x0000);
Write_Cmd_Data(0x000C,0x0000);
Write_Cmd_Data(0x000D,0x0000);
Write_Cmd_Data(0x000F,0x0000); //power on sequence VGHVGL
Write_Cmd_Data(0x0010,0x0000);
Write_Cmd_Data(0x0011,0x0007);
Write_Cmd_Data(0x0012,0x0000);
Write_Cmd_Data(0x0013,0x0000);
//vgh
Write_Cmd_Data(0x0010,0x1290);
Write_Cmd_Data(0x0011,0x0227);
//delayms(100);
//vregiout
Write_Cmd_Data(0x0012,0x001d); //0x001b
//delayms(100);
//vom amplitude
Write_Cmd_Data(0x0013,0x1500);
//delayms(100);
//vom H
Write_Cmd_Data(0x0029,0x0018);
Write_Cmd_Data(0x002B,0x000D);
//gamma
Write_Cmd_Data(0x0030,0x0004);
Write_Cmd_Data(0x0031,0x0307);
Write_Cmd_Data(0x0032,0x0002);// 0006
Write_Cmd_Data(0x0035,0x0206);
Write_Cmd_Data(0x0036,0x0408);
Write_Cmd_Data(0x0037,0x0507);
Write_Cmd_Data(0x0038,0x0204);//0200
Write_Cmd_Data(0x0039,0x0707);
Write_Cmd_Data(0x003C,0x0405);// 0504
Write_Cmd_Data(0x003D,0x0F02);
//ram
Write_Cmd_Data(0x0050,0x0000);
Write_Cmd_Data(0x0051,0x00EF);
Write_Cmd_Data(0x0052,0x0000);
Write_Cmd_Data(0x0053,0x013F);
Write_Cmd_Data(0x0060,0xA700);
Write_Cmd_Data(0x0061,0x0001);
Write_Cmd_Data(0x006A,0x0000);
//
Write_Cmd_Data(0x0080,0x0000);
Write_Cmd_Data(0x0081,0x0000);
Write_Cmd_Data(0x0082,0x0000);
Write_Cmd_Data(0x0083,0x0000);
Write_Cmd_Data(0x0084,0x0000);
Write_Cmd_Data(0x0085,0x0000);
//
Write_Cmd_Data(0x0090,0x0010);
Write_Cmd_Data(0x0092,0x0600);
Write_Cmd_Data(0x0093,0x0003);
Write_Cmd_Data(0x0095,0x0110);
Write_Cmd_Data(0x0097,0x0000);
Write_Cmd_Data(0x0098,0x0000);
Write_Cmd_Data(0x0007,0x0133); // Write_Cmd_Data(0x0022);//
}