|
现状是白屏一片,用卖家的51程序改编的,在下小白,麻烦大家指教下,代码如下
#include <iom16v.h>
#include <macros.h>
///////////////////////////////////////////////////////
#define DATA_LCD_DDR DDRC
#define DATA_LCD_PORT PORTC
#define DATA_LCD_PIN PINC
#define DATA_INPUT() DATA_LCD_DDR = 0x00;
#define DATA_OUPUT() DATA_LCD_DDR = 0xFF;
#define LCD_CS_DDR DDRD
#define LCD_CS_PORT PORTD
#define LCD_CS_PIN PIND
#define LCD_CS_BIT 6
#define LCD_RS_DDR DDRD
#define LCD_RS_PORT PORTD
#define LCD_RS_PIN PIND
#define LCD_RS_BIT 3
#define LCD_RD_DDR DDRD
#define LCD_RD_PORT PORTD
#define LCD_RD_PIN PIND
#define LCD_RD_BIT 5
#define LCD_WR_DDR DDRD
#define LCD_WR_PORT PORTD
#define LCD_WR_PIN PIND
#define LCD_WR_BIT 4
#define LCD_RST_DDR DDRD
#define LCD_RST_PORT PORTD
#define LCD_RST_PIN PIND
#define LCD_RST_BIT 7
#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);
void Write_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);
//================================================//
void main(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);
}
}
//=======================================================//
void Init_data (unsigned char x,unsigned int y)
{
unsigned char m,n;
m=y>>8;
n=y;
Write_Cmd(0x00,x);
Write_Data(m,n);
}
void Write_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);
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|