wang_ww 发表于 2011-2-21 13:20:51

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);
}

ljc2012 发表于 2012-11-28 20:46:03

想问楼主个问题,ili9320 8bit模式是怎么回事?是那DB15到DB0那十六个端口只用其中八个吗?

jz701209李 发表于 2013-4-8 22:50:46

学习一下....
页: [1]
查看完整版本: ili9320 8bit模式在ICC环境用mega16驱动问题