ili9320 8bit模式在ICC环境用mega16驱动问题
现状是白屏一片,用卖家的51程序改编的,在下小白,麻烦大家指教下,代码如下#include <iom16v.h>
#include <macros.h>
///////////////////////////////////////////////////////
#define DATA_LCD_DDRDDRC
#define DATA_LCD_PORT PORTC
#define DATA_LCD_PINPINC
#define DATA_INPUT() DATA_LCD_DDR = 0x00;
#define DATA_OUPUT() DATA_LCD_DDR = 0xFF;
#define LCD_CS_DDRDDRD
#define LCD_CS_PORT PORTD
#define LCD_CS_PINPIND
#define LCD_CS_BIT6
#define LCD_RS_DDRDDRD
#define LCD_RS_PORT PORTD
#define LCD_RS_PINPIND
#define LCD_RS_BIT3
#define LCD_RD_DDRDDRD
#define LCD_RD_PORT PORTD
#define LCD_RD_PINPIND
#define LCD_RD_BIT5
#define LCD_WR_DDRDDRD
#define LCD_WR_PORT PORTD
#define LCD_WR_PINPIND
#define LCD_WR_BIT4
#define LCD_RST_DDRDDRD
#define LCD_RST_PORT PORTD
#define LCD_RST_PINPIND
#define LCD_RST_BIT7
#define LCD_CS_H() LCD_CS_PORT |= 1<<LCD_CS_BIT
#define LCD_CS_L() LCD_CS_PORT &= ~(1<<LCD_CS_BIT)
#define LCD_RS_H() LCD_RS_PORT |= 1<<LCD_RS_BIT
#define LCD_RS_L() LCD_RS_PORT &= ~(1<<LCD_RS_BIT)
#define LCD_WR_L() LCD_WR_PORT |= 1<<LCD_WR_BIT
#define LCD_WR_H() LCD_WR_PORT &= ~(1<<LCD_WR_BIT)
#define LCD_RD_H() LCD_RD_PORT |= 1<<LCD_RD_BIT
#define LCD_RD_L() LCD_RD_PORT &= ~(1<<LCD_RD_BIT)
#define LCD_RST_H() LCD_RST_PORT |= 1<<LCD_RST_BIT
#define LCD_RST_L() LCD_RST_PORT &= ~(1<<LCD_RST_BIT)
#define LCD_BL_H() LCD_BL_PORT |= 1<<LCD_BL_BIT
#define LCD_BL_L() LCD_BL_PORT &= ~(1<<LCD_BL_BIT)
#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
/* LCD color */
#define White 0xFFFF
#define Black 0x0000
#define Blue 0x001F
#define Blue2 0x051F
#define Red 0xF800
#define Magenta 0xF81F
#define Green 0x07E0
#define Cyan 0x7FFF
#define Yellow 0xFFE0
//====================================================//
void main (void);
void ILI9320_Initial(void);
void show_colour_bar (void);
void delayus(unsigned int time);
void Init_data(unsigned char x, unsigned int y);
void Write_Cmd(unsigned char DH,unsigned char DL);
void Write_Data(unsigned char DH,unsigned char DL);
void delayms(unsigned int tt);
voidWrite_Data_U16(unsigned int y);
static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1);
void ClearScreen(unsigned int bColor);
//================================================//
voidmain(void)
{
LCD_CS_DDR |= 1<<LCD_CS_BIT;
LCD_RS_DDR |= 1<<LCD_RS_BIT;
LCD_WR_DDR |= 1<<LCD_WR_BIT;
LCD_RD_DDR |= 1<<LCD_RD_BIT;
LCD_RST_DDR|= 1<<LCD_RST_BIT;
DATA_LCD_DDR = 0xff;
LCD_RS_H();
LCD_RD_H();
LCD_WR_H();
LCD_CS_H();
delayms(5);
LCD_RST_L();
delayms(5);
LCD_RST_H();
delayms(5);
ILI9320_Initial();
while(1)
{
ClearScreen(0xf800);
//show_colour_bar();
while(1);
}
}
void ClearScreen(unsigned int bColor)
{
unsigned int i,j;
LCD_SetPos(0,240,0,320);//320x240
for (i=0;i<325;i++)
{
for (j=0;j<240;j++)
Write_Data_U16(bColor);
}
}
//====================== 显示彩条 ======================//
void show_colour_bar (void)
{
int V,H;
LCD_SetPos(0,240,0,320);//320x240
for(H=0;H<240;H++)
{
for(V=0;V<80;V++)
Write_Data(0xf8,0x00);
}
for(H=0;H<240;H++)
{
for(V=40;V<80;V++)
Write_Data(0x07,0xe0);
}
for(H=0;H<240;H++)
{
for(V=80;V<120;V++)
Write_Data(0x00,0x1f);
}
for(H=0;H<240;H++)
{
for(V=120;V<160;V++)
Write_Data(0xff,0xe0);
}
for(H=0;H<240;H++)
{
for(V=160;V<200;V++)
Write_Data(0xf8,0x1f);
}
for(H=0;H<240;H++)
{
for(V=200;V<240;V++)
Write_Data(0x07,0xff);
}
for(H=0;H<240;H++)
{
for(V=240;V<280;V++)
Write_Data(0xff,0xff);
}
for(H=0;H<240;H++)
{
for(V=280;V<320;V++)
Write_Data(0x00,0x00);
}
}
//=======================================================//
voidInit_data (unsigned char x,unsigned int y)
{
unsigned char m,n;
m=y>>8;
n=y;
Write_Cmd(0x00,x);
Write_Data(m,n);
}
voidWrite_Data_U16(unsigned int y)
{
unsigned char m,n;
m=y>>8;
n=y;
Write_Data(m,n);
}
//====================== 写命令 ==========================//
void Write_Cmd(unsigned char DH,unsigned char DL)
{
LCD_CS_L();
LCD_RS_L();
DATA_LCD_PORT=DH;
LCD_WR_L();
delayus(1);
LCD_WR_H();
delayus(2);
DATA_LCD_PORT=DL;
LCD_WR_L();
delayus(1);
LCD_WR_H();
LCD_RS_H();
delayus(1);
}
//===================== 写数据 ===========================//
void Write_Data(unsigned char DH,unsigned char DL)
{
LCD_RD_H();
LCD_CS_L();
LCD_RS_H();
DATA_LCD_PORT=DH;
LCD_WR_L();
delayus(1);
LCD_WR_H();
delayus(2);
DATA_LCD_PORT=DL;
LCD_WR_L();
delayus(1);
LCD_WR_H();
LCD_CS_H();
}
//=======================================================
void delayus(unsigned int time)
{
while (time--);
}
/* 毫秒级延时函数 */
void delayms(unsigned int time)
{
unsigned int i,j;
for(i=0;i<time;i++)
{
for(j=0;j<1141;j++);
}
}
//===================== 初始化代码 =======================//
void ILI9320_Initial(void)
{
//////////////////////////////////////////////////////////
delayms(50); //根据不同晶振速度可以调整延时,保障稳定显示
Init_data(0x00e5, 0x8000);
Init_data(0x0000, 0x0001);
Init_data(0x0001, 0x0100);
Init_data(0x0002, 0x0700);
Init_data(0x0003, 0x1030);
Init_data(0x0004, 0x0000);
Init_data(0x0008, 0x0202);
Init_data(0x0009, 0x0000);
Init_data(0x000A, 0x0000);
Init_data(0x000C, 0x0000);
Init_data(0x000D, 0x0000);
Init_data(0x000F, 0x0000);
//-----Power On sequence-----------------------
Init_data(0x0010, 0x0000);
Init_data(0x0011, 0x0007);
Init_data(0x0012, 0x0000);
Init_data(0x0013, 0x0000);
delayms(150);
Init_data(0x0010, 0x17B0);
Init_data(0x0011, 0x0007);
delayms(50);
Init_data(0x0012, 0x013A);
delayms(50);
Init_data(0x0013, 0x1A00);
Init_data(0x0029, 0x000c);
delayms(50);
//-----Gamma control-----------------------
Init_data(0x0030, 0x0000);
Init_data(0x0031, 0x0505);
Init_data(0x0032, 0x0004);
Init_data(0x0035, 0x0006);
Init_data(0x0036, 0x0707);
Init_data(0x0037, 0x0105);
Init_data(0x0038, 0x0002);
Init_data(0x0039, 0x0707);
Init_data(0x003C, 0x0704);
Init_data(0x003D, 0x0807);
//-----Set RAM area-----------------------
Init_data(0x0050, 0x0000);
Init_data(0x0051, 0x00EF);
Init_data(0x0052, 0x0000);
Init_data(0x0053, 0x013F);
Init_data(0x0060, 0xa700);
Init_data(0x0061, 0x0001);
Init_data(0x006A, 0x0000);
Init_data(0x0021, 0x0000);
Init_data(0x0020, 0x0000);
//-----Partial Display Control------------
Init_data(0x0080, 0x0000);
Init_data(0x0081, 0x0000);
Init_data(0x0082, 0x0000);
Init_data(0x0083, 0x0000);
Init_data(0x0084, 0x0000);
Init_data(0x0085, 0x0000);
//-----Panel Control----------------------
Init_data(0x0090, 0x0010);
Init_data(0x0092, 0x0000);
Init_data(0x0093, 0x0003);
Init_data(0x0095, 0x0110);
Init_data(0x0097, 0x0000);
Init_data(0x0098, 0x0000);
//-----Display on-----------------------
Init_data(0x0007, 0x0173);
delayms(50);
}
/*===========================================================*/
/*===========================================================*/
/*************************************************************
函数名称:LCD_DefineDispWindow
功 能:定义显示窗体
参 数:x0:窗体中X坐标中较小者
x1:窗体中X坐标中较大者
y0:窗体中Y坐标中较小者
y1:窗体中Y坐标中较大者
返 回 值:无
*************************************************************/
static void LCD_SetPos(unsigned int x0,unsigned int x1,unsigned int y0,unsigned int y1)
{
Init_data(WINDOW_XADDR_START,x0);
Init_data(WINDOW_XADDR_END,x1);
Init_data(WINDOW_YADDR_START,y0);
Init_data(WINDOW_YADDR_END,y1);
Init_data(GRAM_XADDR,x0);
Init_data(GRAM_YADDR,y0);
Write_Cmd(0x00,0x22);//LCD_WriteCMD(GRAMWR);
} 想问楼主个问题,ili9320 8bit模式是怎么回事?是那DB15到DB0那十六个端口只用其中八个吗?
学习一下....
页:
[1]