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

2019-07-21 03:54发布

// 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;  
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
promcu
1楼-- · 2019-07-21 07:37
#define  REG    *(vu16*)((u32)(0X6c0007fe)) 
#define  DATA   *(vu16*)((u32)(0X6c0207fe))
测试看看。
a751217081
2楼-- · 2019-07-21 11:29
现在的现象是白屏 如果我把7FE改成6FE就变成灰 {MOD}一条一条的  但是写点没反应     写指令0x29和  0x28有反应   ,在线等   跪求帮助
a751217081
3楼-- · 2019-07-21 17:27
#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);

 }  
}
贴上全部代码
a751217081
4楼-- · 2019-07-21 19:30
回复【4楼】promcu:
---------------------------------
太感谢   给你一百个赞   好使了  但是为啥啊  求解释
promcu
5楼-- · 2019-07-21 23:43
 精彩回答 2  元偷偷看……
promcu
6楼-- · 2019-07-22 00:56
// 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;    
//}
你这个也可以用吗?

一周热门 更多>