搜索
bottom↓
回复: 2

ili9320 8bit模式在ICC环境用mega16驱动问题

[复制链接]

出0入0汤圆

发表于 2011-2-21 13:20:51 | 显示全部楼层 |阅读模式
现状是白屏一片,用卖家的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, 杜汶泽)

出0入0汤圆

发表于 2012-11-28 20:46:03 | 显示全部楼层
想问楼主个问题,ili9320 8bit模式是怎么回事?是那DB15到DB0那十六个端口只用其中八个吗?

出0入0汤圆

发表于 2013-4-8 22:50:46 来自手机 | 显示全部楼层
学习一下....
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表