|
发表于 2012-6-17 00:03:28
|
显示全部楼层
你好,我的TFT遇到了和你的不一样的问题,看能不能帮忙看一下,好像和你的TFT是一样的,驱动芯片和长相都一样(我的是在淘宝买的,给了例程驱动,51的,我的是STM32),我把51的移植过来,就是驱动不了,一直白屏。
我修改的代码:(只拿了我修改的部分)
//**************51控制端口定义********************
//#define DataPort P0 //数据口使用DataPort
//sbit RS =P2^5; //数据/命令选择
//sbit RW =P2^4; //写数据/命令
//sbit nRD =P2^3; //读控制
//sbit CS =P2^2; //片选
//sbit RES =P2^1; //复位
//sbit LE =P2^0; //74HC573锁存控制
//**************STM32控制端口定义********************
#define RS_SET GPIO_SetBits(GPIOE,GPIO_Pin_14) //RS
#define RS_RSET GPIO_ResetBits(GPIOE,GPIO_Pin_14)
#define RW_SET GPIO_SetBits(GPIOE,GPIO_Pin_13) //RW
#define RW_RSET GPIO_ResetBits(GPIOE,GPIO_Pin_13)
#define RD_SET GPIO_SetBits(GPIOE,GPIO_Pin_12) //RD
#define RD_RSET GPIO_ResetBits(GPIOE,GPIO_Pin_12)
#define CS_SET GPIO_SetBits(GPIOD,GPIO_Pin_0) //CS
#define CS_RSET GPIO_ResetBits(GPIOD,GPIO_Pin_0)
#define RES_SET GPIO_SetBits(GPIOD,GPIO_Pin_1) //RES
#define RES_RSET GPIO_ResetBits(GPIOD,GPIO_Pin_1)
#define LE_SET GPIO_SetBits(GPIOD,GPIO_Pin_2) //LE
#define LE_RSET GPIO_ResetBits(GPIOD,GPIO_Pin_2)
//================================================================================================
// 实现功能: 写命令
// 输入参数: DH 需要输入16bits命令的高8位
// DL 需要输入16bits命令的低8位
//================================================================================================
void Write_Cmd(unsigned char DH,unsigned char DL)
{
u16 readdata;
// RD_SET;//nRD=1;
// RW_SET;//RW=0;==
//delay_ms(1);//delayms(1);
//注意:当使用8位数据口驱动16位数据模式时,使用74HC573作为IO扩展,程序如下
readdata = GPIO_ReadOutputData(GPIOD);//传数据给PD8~PD15(D10~D17),PD0~PD7值不变
readdata &= 0X00FF;
readdata |= (((u16)DL)<<8)&0XFF00;
GPIO_Write(GPIOD,readdata);//DataPort=DL; //送低8位命令给573待锁存
//delay_ms(1);
LE_SET;//LE=1; //锁存位
//delay_ms(1);//delayms(1);
LE_RSET;//LE=0; //断开锁存,位选573的Q7~Q0仍保持
//delay_ms(1);//delayms(1);
readdata = GPIO_ReadOutputData(GPIOD);//传数据给PD8~PD15(D10~D17),PD0~PD7值不变
readdata &= 0X00FF;
readdata |= (((u16)DH)<<8)&0XFF00;
GPIO_Write(GPIOD,readdata);//DataPort=DH; //送高8位命令给TFT
//delay_ms(1);
//delayms(1);
/*
//如果使用16位数据口驱动16位数据模式,则无需IO扩展,直接将数据送到数据口即可
DataPort_L=DL;
DataPort_H=DH;
*/
CS_RSET;//CS=0; 使能TFT操作
RS_RSET;//RS=0; 低电平写地址
RW_RSET;
RW_SET;//RW=1;给低脉冲写操作 <500ns
CS_SET;//CS=1;TFT关使能
}
//================================================================================================
// 实现功能: 写数据(2*8bits)
// 输入参数: DH 需要输入16bits数据的高8位
// DL 需要输入16bits数据的低8位
//================================================================================================
void Write_Data(unsigned char DH,unsigned char DL)
{
u16 readdata;
//delay_ms(1);//delayms(1);
//注意:当使用8位数据口驱动16位数据模式时,使用74HC573作为IO扩展,程序如下
readdata = GPIO_ReadOutputData(GPIOD);//传数据给PD8~PD15(D10~D17),PD0~PD7值不变
readdata &= 0X00FF;
readdata |= (((u16)DL)<<8)&0XFF00;
GPIO_Write(GPIOD,readdata);//DataPort=DL; //送低8位命令给573待锁存
//delay_ms(1);//delayms(1);
LE_SET;//LE=1; //锁存位
//delay_ms(1);//delayms(1);
LE_RSET;//LE=0; //断开锁存,位选573的Q7~Q0仍保持
//delay_ms(1);//delayms(1);
readdata = GPIO_ReadOutputData(GPIOD);//传数据给PD8~PD15(D10~D17),PD0~PD7值不变
readdata &= 0X00FF;
readdata |= (((u16)DH)<<8)&0XFF00;
GPIO_Write(GPIOD,readdata);//DataPort=DH; //送高8位命令给TFT
//delay_ms(1);//delayms(1);
/*
//如果使用16位数据口驱动16位数据模式,则无需IO扩展,直接将数据送到数据口即可
DataPort_L=DL;
DataPort_H=DH;
*/
CS_RSET;//CS=0;使能TFT操作
RS_SET;//RS=1;高电平写数据
RW_RSET;//RW=0;
RW_SET;//RW=1;给个低脉冲,写操作 <500ns
CS_SET;//CS=1;关使能
}
51代码:
//**************控制端口定义********************
#define DataPort P4 //数据口使用DataPort
#define RS P35 //数据/命令选择
#define RW P34 //写数据/命令
#define nRD P33 //读控制
#define CS P32 //片选
#define RES P31 //复位
#define LE P30 //74HC573锁存控制
//================================================================================================
// 实现功能: 写命令
// 输入参数: DH 需要输入16bits命令的高8位
// DL 需要输入16bits命令的低8位
//================================================================================================
void Write_Cmd(unsigned char DH,unsigned char DL)
{
CS=0;
RS=0;
nRD=1;
RW=0;
//注意:当使用8位数据口驱动16位数据模式时,使用74HC573作为IO扩展,程序如下
DataPort=DL; //送低8位命令给573待锁存
LE=1; //锁存位
LE=0; //断开锁存,位选573的Q7~Q0仍保持
DataPort=DH; //送高8位命令给TFT
/*
//如果使用16位数据口驱动16位数据模式,则无需IO扩展,直接将数据送到数据口即可
DataPort_L=DL;
DataPort_H=DH;
*/
RW=1;
CS=1;
}
//================================================================================================
// 实现功能: 写数据(2*8bits)
// 输入参数: DH 需要输入16bits数据的高8位
// DL 需要输入16bits数据的低8位
//================================================================================================
void Write_Data(unsigned char DH,unsigned char DL)
{
CS=0;
RS=1;
//注意:当使用8位数据口驱动16位数据模式时,使用74HC573作为IO扩展,程序如下
DataPort=DL; //送低8位数据给573待锁存
LE=1; //锁存位
LE=0; //断开锁存,位选573的Q7~Q0仍保持
DataPort=DH; //送高8位数据给TFT
/*
//如果使用16位数据口驱动16位数据模式,则无需IO扩展,直接将数据送到数据口即可
DataPort_L=DL;
DataPort_H=DH;
*/
RW=0;
RW=1;
CS=1;
} |
|