搜索
bottom↓
回复: 6

请教ILI9325的8位驱动,一直没有驱动起来.

[复制链接]

出0入0汤圆

发表于 2011-9-11 10:30:25 | 显示全部楼层 |阅读模式
网上买的屏:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5019585&bbs_page_no=1&search_mode=4&search_text=dongls&bbs_id=9999

我用的是ATMEGA88
#include <avr/io.h>
#include <util/delay.h>

//定义液晶屏接口
#define CTRLP        PORTB
#define CTRLDDR        DDRB
#define DATAP        PORTD
#define DATAIN        PIND
#define DATADDR        DDRD
#define CS                 PB1                //片选
#define RST         PB0                //复位
#define RS                PB2                //数据/命令选择
#define WR                PB3                //写
#define RD                PB4                //读


//液晶屏控制端口初始化
void TFT_PortInit(void)
{
        DATADDR   = 0xFF;        //8位数据端口配置为输出
        CTRLDDR  |= _BV(RST) | _BV(CS) | _BV(RS) | _BV(WR) | _BV(RD);        //控制端口配置为输出
        CTRLP  |= _BV(RST) | _BV(CS) | _BV(RS) | _BV(WR) | _BV(RD);        //控制端口初始高电平1
}


//发送命令
void TFT_WriteReg(unsigned int index)
{
        CTRLP |= (1 << RD);
        CTRLP &= ~(1 << RS);
        CTRLP &= ~(1 << CS);
        CTRLP &= ~(1 << WR);
        DATAP = (index >> 8);
        CTRLP |= (1 << WR);
        CTRLP &= ~(1 << WR);
        DATAP = (index & 0xFF);
        CTRLP |= (1 << WR);
        CTRLP |= (1 << CS);       
}

//发送数据
void TFT_WriteData(unsigned int Data)
{
        CTRLP |= (1 << RD);
        CTRLP |= (1 << RS);
        CTRLP &= ~(1 << CS);
        CTRLP &= ~(1 << WR);
        DATAP = (Data >> 8);
        CTRLP |= (1 << WR);
        CTRLP &= ~(1 << WR);
        DATAP = (Data & 0xFF);
        CTRLP |= (1 << WR);
        CTRLP |= (1 << CS);       
}

//写命令数据
void TFT_Write(unsigned int index, unsigned int Data)
{
        TFT_WriteReg(index);
        TFT_WriteData(Data);
}

//定义坐标
static void TFT_SetPos(unsigned int x0, unsigned int x1, unsigned int y0, unsigned int y1)
{
  TFT_Write(0x0050,x0);
  TFT_Write(0x0051,x1);
  TFT_Write(0x0052,y0);
  TFT_Write(0x0053,y1);
  TFT_Write(0x0020,x0);
  TFT_Write(0x0021,y0);
  TFT_WriteReg(0x0022);//LCD_WriteCMD(GRAMWR);       
}
//清屏

void TFT_ClearScreen(unsigned int bColor)
{
        unsigned int i,j;
        TFT_SetPos(0,240,0,320);//320x240
for (i=0;i<320;i++)
        {
       
           for (j=0;j<240;j++)
               TFT_WriteData(bColor);
        }
}

//TFT屏初始化
void TFT_Init(void)
{
        TFT_PortInit();
        CTRLP &= ~(1 << RST);
        _delay_ms(100);
        CTRLP |= (1 << RST);
        _delay_ms(50);//根据不同晶振速度可以调整延时,保障稳定显示

        TFT_Write(0x0001, 0x0100);        //SS = 1; SM = 0;  输出转变方向:S720到S1
        TFT_Write(0x0002, 0x0700);        //EOR = 1; B/C = 0; 行反转
        TFT_Write(0x0003, 0x1030);  //水平写入方向得以更新,BGR = 1(转换RGB数据到BGR) ??
        TFT_Write(0x0004, 0x0000);        //不调整大小 RSZ = 00; RCH = 00; RCV = 00
        TFT_Write(0x0008, 0x0207);        //设定正面和背面门廓期的行号:BP = 7; FP = 2
        TFT_Write(0x0009, 0x0000);  //set non-display area refresh cycle ISC[3:0]
    TFT_Write(0x000A, 0x0000);  //FMARK function : 1 frame
        TFT_Write(0x000C, 0x0000);  //RGB 显示接口控制(18位RGB接口,DB17~DB0, 内部系统时钟,系统接口访问GRAM,读写周期为 1 FRAME)
        TFT_Write(0x000D, 0x0000);  //FRAME marker position
        TFT_Write(0x000F, 0x0000);  //RGB interface polarity
//power on sequence VGHVGL
        TFT_Write(0x0010, 0x0000);        //SAP(得先禁用,后启用) BT[3:0] AP SLP STB
        TFT_Write(0x0011, 0x0007);  //DC1[2:0], DC0[2:0], VC[2:0]
        TFT_Write(0x0012, 0x0000);  //VREGOUT voltage
        TFT_Write(0x0013, 0x1300);  //VDV[4:0] for VCOM amplitude (0.7) 0x1300 - 1.0
//        TFT_InitData(0x0007,0x0001);
   _delay_ms(300);        // Dis-charge capacitor power voltage
//vgh
    TFT_Write(0x0010, 0x1290);  //1690//SAP, BT[3:0], AP, DSTB, SLP, STB  
        TFT_Write(0x0011, 0x0527);  //227        //DC1[2:0], DC0[2:0], VC[2:0]
//        _delay_ms(50);       
//vregiout
    TFT_Write(0x0012, 0x0018);        //1D//Internal reference voltage= Vci;
//        _delay_ms(50);
        TFT_Write(0x0013, 0x0800);        //1500//Set VDV[4:0] for VCOM amplitude
        TFT_Write(0x0029, 0x0014);        //10// Set VCM[5:0] for VCOMH
        TFT_Write(0x002B, 0x000B);        //D// Set Frame Rate
        _delay_ms(50);

        TFT_Write(0x0020, 0x0000);
        TFT_Write(0x0021, 0x0000);
//gamma
//**************************************
//        TFT_Write(0x0030, 0x0007);
//***************************************
        TFT_Write(0x0031, 0x0007);
        TFT_Write(0x0032, 0x0002);// 0006
        TFT_Write(0x0035, 0x0206);
        TFT_Write(0x0036, 0x0408);
        TFT_Write(0x0037, 0x0507);
        TFT_Write(0x0038, 0x0200);//0200
        TFT_Write(0x0039, 0x0707);
        TFT_Write(0x003C, 0x0504);// 0504
        TFT_Write(0x003D, 0x0F02); //0F02
//ram
        TFT_Write(0x0050, 0x0000); // Horizontal GRAM Start Address
        TFT_Write(0x0051, 0x00EF); // Horizontal GRAM End Address
        TFT_Write(0x0052, 0x0000); // Vertical GRAM Start Address
        TFT_Write(0x0053, 0x013F); // Vertical GRAM Start Address  
        TFT_Write(0x0060, 0x2700); // Gate Scan Line
        TFT_Write(0x0061, 0x0001); // NDL,VLE, REV
        TFT_Write(0x006A, 0x0000); // set scrolling line
//Partial Display Control
        TFT_Write(0x0080, 0x0000);
        TFT_Write(0x0081, 0x0000);
        TFT_Write(0x0082, 0x0000);
        TFT_Write(0x0083, 0x0000);
        TFT_Write(0x0084, 0x0000);
        TFT_Write(0x0085, 0x0000);
//panel control
        TFT_Write(0x0090, 0x0010);
        TFT_Write(0x0092, 0x0000); //0900        //6 clocks
        TFT_Write(0x0093, 0x0003);
        TFT_Write(0x0095, 0x0110);
        TFT_Write(0x0097, 0x0000);
        TFT_Write(0x0098, 0x0000);
        TFT_Write(0x0007, 0x0133);        // 262K color and display ON   0133
        _delay_ms(200);
        //TFT_SetPos(0, 240, 0, 320);
        TFT_ClearScreen(0xF800);
}

初始化时:如果加TFT_Write(0x0030, 0x0007);这一句的话是白屏(只背光亮),如果不加这一句的话是花屏.

请教各位,如何修改?先谢谢回贴的各位.

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2011-9-11 10:42:48 | 显示全部楼层
CTRLP &= ~(1 << WR);
DATAP = (index >> 8);
CTRLP |= (1 << WR);
CTRLP &= ~(1 << WR);
DATAP = (index & 0xFF);
CTRLP |= (1 << WR);
木有用过,不过感觉应先送数据,然后wr=0,wr=1

出0入0汤圆

 楼主| 发表于 2011-9-11 10:47:33 | 显示全部楼层
回复【1楼】xiaodao35  
-----------------------------------------------------------------------

调整了一下,还是不行.没写0x30寄存器花屏,写的话白屏(只背光亮).

出0入0汤圆

 楼主| 发表于 2011-9-11 19:11:17 | 显示全部楼层
搞了一下午没搞定,哪位高手支个招.

出0入0汤圆

 楼主| 发表于 2011-9-19 21:22:40 | 显示全部楼层
今天换成MEGA8的芯片,驱动成功了。看起来没有什么差别,不知为什么MEGA88不能驱动?先发个成功的测试代码。
#include <avr/io.h>
#include <util/delay.h>


//定义液晶屏接口
#define DATAP        PORTD
#define CS_L()        PORTC &= ~(1 << PC2)//片选
#define CS_H()        PORTC |=  (1 << PC2)
#define WR_L()        PORTC &= ~(1 << PC1)//写
#define WR_H()        PORTC |=  (1 << PC1)
#define RST_L() PORTC &= ~(1 << PC0)//复位
#define RST_H()        PORTC |=  (1 << PC0)
#define RS_L()        PORTB &= ~(1 << PB0)
#define RS_H()        PORTB |=  (1 << PB0)//数据/命令选择
#define RD_L()        PORTB &= ~(1 << PB1)//读(此处不用,接高电位)
#define RD_H()        PORTB |=  (1 << PB1)


//液晶屏控制端口初始化
void TFT_PortInit(void)
{
        DDRD = 0xFF;        //8位数据端口配置为输出
        DDRC |= (1 << PC2) | (1 << PC1) | (1 << PC0);        //控制端口配置为输出
        DDRB |= (1 << PB1) | (1 << PB0);
        PORTC |= (1 << PC2) | (1 << PC1) | (1 << PC0);  //控制端口初始高电平
        PORTB |= (1 << PB1) | (1 << PB0);
}
//////////////////////////////////////////////////
//写命令
void TFT_WriteCmdU16(unsigned int Cmd)
{
        RS_L();
        CS_L();
        DATAP = Cmd << 8;
        WR_L();
        WR_H();
        DATAP = Cmd & 0xFF;
        WR_L();
        WR_H();
        CS_H();
}


//写数据
void TFT_WriteDataU16(unsigned int Data)
{
        RS_H();
        CS_L();
        DATAP = Data >> 8;
        WR_L();
        WR_H();
        DATAP = Data & 0xFF;
        WR_L();
        WR_H();
        CS_H();
}

//写命令数据
void TFT_InitData(unsigned int Cmd, unsigned int Data)
{
        TFT_WriteCmdU16(Cmd);
        TFT_WriteDataU16(Data);
}

//液晶初始化
void TFT_Init(void)
{
        TFT_PortInit();
        _delay_ms(100);
        RST_L();
        _delay_ms(100);
        RST_H();
        _delay_ms(500);//根据不同晶振速度可以调整延时,保障稳定显示

TFT_InitData(0x00E5,0x78F0); // set SRAM internal timing
TFT_InitData(0x0001,0x0100); // set SS and SM bit
TFT_InitData(0x0002,0x0700); // set 1 line inversion
TFT_InitData(0x0003,0x1030); // set GRAM write direction and BGR=1.
TFT_InitData(0x0004,0x0000); // Resize register
TFT_InitData(0x0008,0x0207); // set the back porch and front porch  
TFT_InitData(0x0009,0x0000); // set non-display area refresh cycle ISC[3:0]
TFT_InitData(0x000A,0x0000); // FMARK function
TFT_InitData(0x000C,0x0000); // RGB interface setting
TFT_InitData(0x000D,0x0000); // Frame marker Position
TFT_InitData(0x000F,0x0000); // RGB interface polarity
//power on sequence VGHVGL
TFT_InitData(0x0010,0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB   
TFT_InitData(0x0011,0x0007); // DC1[2:0], DC0[2:0], VC[2:0]  
TFT_InitData(0x0012,0x0000); // VREG1OUT voltage  
TFT_InitData(0x0013,0x1300); // VDV[4:0] for VCOM amplitude
// TFT_InitData(0x0007,0x0001);
_delay_ms(500);                                  // Dis-charge capacitor power voltage
//vgh
TFT_InitData(0x0010,0x1290); // 1490//SAP, BT[3:0], AP, DSTB, SLP, STB  
TFT_InitData(0x0011,0x0527); // DC1[2:0], DC0[2:0], VC[2:0]
// _delay_ms(50);
//vregiout
TFT_InitData(0x0012,0x0018); //001C// Internal reference voltage= Vci;
//DelayMs(50);
//vom amplitude
TFT_InitData(0x0013,0x1300); //0x1000//1400   Set VDV[4:0] for VCOM amplitude  1A00
TFT_InitData(0x0029,0x001E); //0x0012 //001a  Set VCM[5:0] for VCOMH  //0x0025  0034
TFT_InitData(0x002B,0x000B); // Set Frame Rate   000C
_delay_ms(50);
TFT_InitData(0x0020,0x0000); // GRAM horizontal Address
TFT_InitData(0x0021,0x0000); // GRAM Vertical Address

//gamma
TFT_InitData(0x0030,0x0004);
TFT_InitData(0x0031,0x0307);
TFT_InitData(0x0032,0x0002);// 0006
TFT_InitData(0x0035,0x0206);
TFT_InitData(0x0036,0x0408);
TFT_InitData(0x0037,0x0507);
TFT_InitData(0x0038,0x0204);//0200
TFT_InitData(0x0039,0x0707);
TFT_InitData(0x003C,0x0405);// 0504
TFT_InitData(0x003D,0x0F02);
//ram
TFT_InitData(0x0050,0x0000); // Horizontal GRAM Start Address
TFT_InitData(0x0051,0x00EF); // Horizontal GRAM End Address
TFT_InitData(0x0052,0x0000); // Vertical GRAM Start Address
TFT_InitData(0x0053,0x013F); // Vertical GRAM Start Address  
TFT_InitData(0x0060,0xA700); // Gate Scan Line
TFT_InitData(0x0061,0x0001); // NDL,VLE, REV
TFT_InitData(0x006A,0x0000); // set scrolling line
//
TFT_InitData(0x0080,0x0000);
TFT_InitData(0x0081,0x0000);
TFT_InitData(0x0082,0x0000);
TFT_InitData(0x0083,0x0000);
TFT_InitData(0x0084,0x0000);
TFT_InitData(0x0085,0x0000);
//
TFT_InitData(0x0090,0x0010);
TFT_InitData(0x0092,0x0600);
TFT_InitData(0x0093,0x0003);
TFT_InitData(0x0095,0x0110);
TFT_InitData(0x0097,0x0000);
TFT_InitData(0x0098,0x0000);
TFT_InitData(0x0007,0x0173);         // 262K color and display ON
_delay_ms(500);
}

//定义坐标
static void TFT_SetPos(unsigned int x0, unsigned int x1, unsigned int y0, unsigned int y1)
{
  TFT_InitData(0x0050,x0);
  TFT_InitData(0x0051,x1);
  TFT_InitData(0x0052,y0);
  TFT_InitData(0x0053,y1);
  TFT_InitData(0x0020,x0);
  TFT_InitData(0x0021,y0);
  TFT_WriteCmdU16(0x0022);//LCD_WriteCMD(GRAMWR);       
}

//清屏

void TFT_ClearScreen(unsigned int bColor)
{
        unsigned int i,j;
        TFT_SetPos(0,240,0,320);//320x240
for (i=0;i<320;i++)
        {
       
           for (j=0;j<240;j++)
               TFT_WriteDataU16(bColor);
        }
}

出0入0汤圆

发表于 2012-1-3 19:47:57 | 显示全部楼层
8位模式时,IM0管脚要拉高。16位模式时IM0管脚拉低。

出0入0汤圆

发表于 2013-2-6 16:18:45 | 显示全部楼层
proteldxp 发表于 2012-1-3 19:47
8位模式时,IM0管脚要拉高。16位模式时IM0管脚拉低。

您好  请问io口的速度对读写有影响么?我现在用k60主频超到200m还是无法正常读取产品id
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-7-24 08:19

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

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