OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10335|回复: 15

关于TFT_LCD的问题,救命啊!!!!

[复制链接]

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
发表于 2015-1-29 11:51:48 | 显示全部楼层 |阅读模式
5金钱
// typedef struct
//{
// u16 LCD_REG;
// u16 LCD_RAM;
//} LCD_TypeDef;
//#define LCD_BASE        ((u32)(0x6C0007fe))
//#define LCD             ((LCD_TypeDef *) LCD_BASE)
//
//
//void LCD_WR_REG(u16 regval)
//{ 
// LCD->LCD_REG=regval;//写入要写的寄存器序号  
//}
////写LCD数据
////data:要写入的值
//void LCD_WR_DATA(u16 data)
//{  

//     
// LCD->LCD_RAM=data;  
//}
上面的代码我想替换成下面的可是不知道为啥行不通谁能帮我一下这两个区别


#define  REG    *((u32*)(0X6c0007fe))
#define  DATA   *((u32*)(0x6c000800))

void LCD_WR_REG(u16 regval)
{ REG=regval;  
}

void LCD_WR_DATA(u16 regval2)
{ DATA=regval2;  
}

最佳答案

查看完整内容[请看2#楼]

#define  REG    *(vu16*)((u32)(0X6c0007fe))  #define  DATA   *(vu16*)((u32)(0X6c0207fe)) 测试看看。
我只想说,我想静静,别问静静是谁
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-4-15
在线时间
0 小时
发表于 2015-1-29 11:51:49 | 显示全部楼层
#define  REG    *(vu16*)((u32)(0X6c0007fe)) 
#define  DATA   *(vu16*)((u32)(0X6c0207fe))
测试看看。
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 12:24:28 | 显示全部楼层
现在的现象是白屏 如果我把7FE改成6FE就变成灰色一条一条的  但是写点没反应     写指令0x29和  0x28有反应   ,在线等   跪求帮助
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 12:42:12 | 显示全部楼层
#include"stm32f10x.h"
#include"delay.h"
#include"usart.h"
#include"sys.h"

// typedef struct
//{
// u16 LCD_REG;
// u16 LCD_RAM;
//} LCD_TypeDef;
//#define LCD_BASE        ((u32)(0x6C0007fe))
//#define LCD             ((LCD_TypeDef *) LCD_BASE)
//
//
//void LCD_WR_REG(u16 regval)
//{ 
// LCD->LCD_REG=regval;//写入要写的寄存器序号  
//}
////写LCD数据
////data:要写入的值
//void LCD_WR_DATA(u16 data)
//{  

//       
// LCD->LCD_RAM=data;  
//}

void My_Fsmc_Init()
{  GPIO_InitTypeDef GPIO_InitStructure;
FSMC_NORSRAMInitTypeDef  FSMC_NORSRAMInitStructure;
    FSMC_NORSRAMTimingInitTypeDef  readWriteTiming; 
FSMC_NORSRAMTimingInitTypeDef  writeTiming;

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC,ENABLE); //使能FSMC时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOD|

RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOG|RCC_APB2Periph_AFIO,ENABLE);//使能PORTB,D,E,G以及AFIO复用功能时钟

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  

//PB0 推挽输出 背光
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);  //PORTD复用推挽输出  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|

GPIO_Pin_5|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_14|GPIO_Pin_15;

 // //PORTD复用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOD, &GPIO_InitStructure); 
  
//PORTE复用推挽输出  
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|

GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;

 // //PORTD复用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOE, &GPIO_InitStructure); 
  
    // //PORTG12复用推挽输出 A0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_12;  // //PORTD复用推挽输出  
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   //复用推挽输出   
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOG, &GPIO_InitStructure); 
 
readWriteTiming.FSMC_AddressSetupTime = 0x01;  //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
    readWriteTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(ADDHLD)模式A未用到
    readWriteTiming.FSMC_DataSetupTime = 0x0f;  // 数据保存时间为16个HCLK,因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
    readWriteTiming.FSMC_BusTurnAroundDuration = 0x00;
    readWriteTiming.FSMC_CLKDivision = 0x00;
    readWriteTiming.FSMC_DataLatency = 0x00;
    readWriteTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 
    

writeTiming.FSMC_AddressSetupTime = 0x00;  //地址建立时间(ADDSET)为1个HCLK  
    writeTiming.FSMC_AddressHoldTime = 0x00;  //地址保持时间(A
    writeTiming.FSMC_DataSetupTime = 0x03;  ////数据保存时间为4个HCLK
    writeTiming.FSMC_BusTurnAroundDuration = 0x00;
    writeTiming.FSMC_CLKDivision = 0x00;
    writeTiming.FSMC_DataLatency = 0x00;
    writeTiming.FSMC_AccessMode = FSMC_AccessMode_A;  //模式A 

 
    FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM4;//  这里我们使用NE4 ,也就对应BTCR[6],[7]。
    FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable; // 不复用数据地址
    FSMC_NORSRAMInitStructure.FSMC_MemoryType =FSMC_MemoryType_SRAM;// FSMC_MemoryType_SRAM;  //SRAM   
    FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;//存储器数据宽度为16bit   
    FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode =FSMC_BurstAccessMode_Disable;// FSMC_BurstAccessMode_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait=FSMC_AsynchronousWait_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;  
    FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable; //  存储器写使能
    FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;   
    FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Enable; // 读写使用不同的时序
    FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable; 
    FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &readWriteTiming; //读写时序
    FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &writeTiming;  //写时序

    FSMC_NORSRAMInit(&FSMC_NORSRAMInitStructure);  //初始化FSMC配置

    FSMC_NORSRAMCmd(FSMC_Bank1_NORSRAM4, ENABLE);  // 使能BANK1 
}


#define  REG    *((u32*)(0X6c0007fe))
#define  DATA   *((u32*)(0x6c000800))

void LCD_WR_REG(u16 regval)
{ REG=regval;  
}

void LCD_WR_DATA(u16 regval2)
{ DATA=regval2;  
}

void LCD_init()
{       LCD_WR_REG(0xCF);  
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0xC1); 
LCD_WR_DATA(0X30); 
LCD_WR_REG(0xED);  
LCD_WR_DATA(0x64); 
LCD_WR_DATA(0x03); 
LCD_WR_DATA(0X12); 
LCD_WR_DATA(0X81); 
LCD_WR_REG(0xE8);  
LCD_WR_DATA(0x85); 
LCD_WR_DATA(0x10); 
LCD_WR_DATA(0x7A); 
LCD_WR_REG(0xCB);  
LCD_WR_DATA(0x39); 
LCD_WR_DATA(0x2C); 
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0x34); 
LCD_WR_DATA(0x02); 
LCD_WR_REG(0xF7);  
LCD_WR_DATA(0x20); 
LCD_WR_REG(0xEA);  
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0x00); 
LCD_WR_REG(0xC0);    //Power control 
LCD_WR_DATA(0x1B);   //VRH[5:0] 
LCD_WR_REG(0xC1);    //Power control 
LCD_WR_DATA(0x01);   //SAP[2:0];BT[3:0] 
LCD_WR_REG(0xC5);    //VCM control 
LCD_WR_DATA(0x30);   //3F
LCD_WR_DATA(0x30);   //3C
LCD_WR_REG(0xC7);    //VCM control2 
LCD_WR_DATA(0XB7); 
LCD_WR_REG(0x36);    // Memory Access Control 
LCD_WR_DATA(0x48); 
LCD_WR_REG(0x3A);   
LCD_WR_DATA(0x55); 
LCD_WR_REG(0xB1);   
LCD_WR_DATA(0x00);   
LCD_WR_DATA(0x1A); 
LCD_WR_REG(0xB6);    // Display Function Control 
LCD_WR_DATA(0x0A); 
LCD_WR_DATA(0xA2); 
LCD_WR_REG(0xF2);    // 3Gamma Function Disable 
LCD_WR_DATA(0x00); 
LCD_WR_REG(0x26);    //Gamma curve selected 
LCD_WR_DATA(0x01); 
LCD_WR_REG(0xE0);    //Set Gamma 
LCD_WR_DATA(0x0F); 
LCD_WR_DATA(0x2A); 
LCD_WR_DATA(0x28); 
LCD_WR_DATA(0x08); 
LCD_WR_DATA(0x0E); 
LCD_WR_DATA(0x08); 
LCD_WR_DATA(0x54); 
LCD_WR_DATA(0XA9); 
LCD_WR_DATA(0x43); 
LCD_WR_DATA(0x0A); 
LCD_WR_DATA(0x0F); 
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0x00);   
LCD_WR_REG(0XE1);    //Set Gamma 
LCD_WR_DATA(0x00); 
LCD_WR_DATA(0x15); 
LCD_WR_DATA(0x17); 
LCD_WR_DATA(0x07); 
LCD_WR_DATA(0x11); 
LCD_WR_DATA(0x06); 
LCD_WR_DATA(0x2B); 
LCD_WR_DATA(0x56); 
LCD_WR_DATA(0x3C); 
LCD_WR_DATA(0x05); 
LCD_WR_DATA(0x10); 
LCD_WR_DATA(0x0F); 
LCD_WR_DATA(0x3F); 
LCD_WR_DATA(0x3F); 
LCD_WR_DATA(0x0F); 
LCD_WR_REG(0x2B); 
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x01);
LCD_WR_DATA(0x3f);
LCD_WR_REG(0x2A); 
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0x00);
LCD_WR_DATA(0xef);  
LCD_WR_REG(0x11); //Exit Sleep
delay_ms(120);
LCD_WR_REG(0x29); //display on
}

void LCD_WriteRAM_Prepare(void)
{
  REG=0x2c;   
}

void LCD_SetCursor(u16 Xpos, u16 Ypos)
{LCD_WR_REG(0X2A); 
 LCD_WR_DATA(Xpos>>8); 
 LCD_WR_DATA(Xpos&0XFF);  
 LCD_WR_REG(0X2B); 
 LCD_WR_DATA(Ypos>>8); 
 LCD_WR_DATA(Ypos&0XFF);
}

void LCD_DrawPoint(u16 x,u16 y)
{
LCD_SetCursor(x,y); //设置光标位置 
LCD_WriteRAM_Prepare(); //开始写入GRAM
    DATA=0x0022; 
}


int main()
{delay_init();
 My_Fsmc_Init();
 LCD_init();
 uart_init(9600);
 GPIO_WriteBit(GPIOB,GPIO_Pin_0,Bit_SET);
 while(1)
 {LCD_DrawPoint(0x33,0x33);

 }  
}
贴上全部代码
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 13:30:07 | 显示全部楼层
回复【4楼】promcu:
---------------------------------
太感谢   给你一百个赞   好使了  但是为啥啊  求解释
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-4-15
在线时间
0 小时
发表于 2015-1-29 13:49:48 | 显示全部楼层
FSMC没有RS,虚拟的RS放在在第18个BIT,即是RS(1)+DATA(16BIT)+A0(1BIT)
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-4-15
在线时间
0 小时
发表于 2015-1-29 13:50:31 | 显示全部楼层
// typedef struct 
//{ 
// u16 LCD_REG; 
// u16 LCD_RAM; 
//} LCD_TypeDef; 
//#define LCD_BASE        ((u32)(0x6C0007fe)) 
//#define LCD             ((LCD_TypeDef *) LCD_BASE) 
// 
// 
//void LCD_WR_REG(u16 regval) 
//{  
// LCD->LCD_REG=regval;//写入要写的寄存器序号   
//} 
////写LCD数据 
////data:要写入的值 
//void LCD_WR_DATA(u16 data) 
//{    

//        
// LCD->LCD_RAM=data;    
//}
你这个也可以用吗?
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 14:01:50 | 显示全部楼层
回复【6楼】promcu:
---------------------------------
我知道RS是地址线第十个  所以我想直接操纵 她的地址0X6c0007fe  但是
#define  REG    *((u32*)(0X6c0007fe)) 
#define  DATA   *((u32*)(0x6c000800))  这么定义 不行
为啥这么定义就可以
#define  REG    *(vu16*)((u32)(0X6c0007fe))  
#define  DATA  *(vu16*)((u32)(0X6c000800)
这个vu没搞懂   和 volatile 32  有啥不同 而且为啥定义两遍呢
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 14:02:18 | 显示全部楼层
回复【7楼】promcu:
---------------------------------
这个好使
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 14:03:35 | 显示全部楼层
回复【6楼】promcu:
---------------------------------
难道我这么写没有指向这个0X6c0007fe地址么
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 14:14:18 | 显示全部楼层
回复【6楼】promcu:
---------------------------------
*((volatile  u16*)(0X6c000800))这么写也行  有点乱啊  难道0X6c000800不是32么
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 14:31:10 | 显示全部楼层
回复【6楼】promcu:
---------------------------------
我懂了  *((volatile  u16*)(0X6c000800))这个表示  U16表示  指向的数据类型16位而这个
// typedef struct
//{
// u16 LCD_REG;
// u16 LCD_RAM;
//} LCD_TypeDef;
//#define LCD_BASE        ((u32)(0x6C0007fe))
//#define LCD             ((LCD_TypeDef *) LCD_BASE)
是把结构体的地址放在  0X6c0007FE;
一个是直接操纵地址里的数
一个是把变量定义到指定的地址在操作
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-4-15
在线时间
0 小时
发表于 2015-1-29 14:39:01 | 显示全部楼层
好,我也学习下,多谢。
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-4-15
在线时间
0 小时
发表于 2015-1-29 14:41:31 | 显示全部楼层
回复【8楼】a751217081:
---------------------------------
你意思如下两种写法都可以吗?
写法一:
#define  REG    *(vu16*)((u32)(0X6c0007fe)) 
#define  DATA   *(vu16*)((u32)(0X6c0207fe))  
写法二:
#define  REG    *(vu16*)((u32)(0X6c0007fe))   
#define  DATA  *(vu16*)((u32)(0X6c000800)
回复

使用道具 举报

1

主题

11

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-1-27
在线时间
3 小时
 楼主| 发表于 2015-1-29 14:54:14 | 显示全部楼层
回复【14楼】promcu:
---------------------------------
#define  REG    *(vu16*)((u32)(0X6c0007fe))  
#define  DATA   *(vu16*)((u32)(0X6c0207fe)) 
上面那个  得把#define  DATA   *(vu16*)((u32)(0X6c0207fe))
改成              #define  DATA  *(vu16*)((u32)(0X6c000800))或者 
#define  DATA   *(vu16*)(0X6c0207fe)
#define  DATA  *(vu16*)(0X6c000800)
我只想说,我想静静,别问静静是谁
回复

使用道具 举报

5

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
73
金钱
73
注册时间
2012-4-15
在线时间
0 小时
发表于 2015-1-29 15:03:56 | 显示全部楼层
好的。。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 03:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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