OpenEdv-开源电子网

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

TFT液晶显示问题

[复制链接]

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2014-5-14
在线时间
56 小时
发表于 2015-4-25 14:59:21 | 显示全部楼层 |阅读模式
5金钱
由于要使用两个CAN口,导致液晶引脚不能连续使用,硬件设计中,LCD的D11-D15是用单片机的PB3,4,4,8,9脚,
D10用PD2,D7-D9,D0-D2用PC7,8,9,10,11,12脚,D3-D6用PA 8,9,10,15.现在总是白屏,请高手指点。
C程序见附件
头文件:
#ifndef __LCD_H
#define __LCD_H
#include "sys.h"  
#include "stdlib.h"
 
//LCD??????????
typedef struct  
{    
u16 width; //LCD ?í??
u16 height; //LCD ????
u16 id; //LCD ID
u8  dir; //?á???????ú????????0???ú????1???á????
u16 wramcmd; //??????gram????
u16 setxcmd; //?è??x×?±ê????
u16  setycmd; //?è??y×?±ê????  
}_lcd_dev;  

//LCD????
extern _lcd_dev lcddev; //???íLCD????????
//LCD????±???????±??°??   
extern u16  OINT_COLOR;//?????ì??    
extern u16  BACK_COLOR; //±??°????.??????°×??

////////////////////////////////////////////////////////////////////
//-----------------LCD?????¨??---------------- 
#define LCD_LED PAout(4) //LCD±???     PC10 

/*
#define LCD_CS_SET  GPIOC->BSRR=1<<9    //????????   PC9
#define LCD_RS_SET GPIOC->BSRR=1<<8    //????/?ü?? PC8   
#define LCD_WR_SET GPIOC->BSRR=1<<7    //?????? PC7
#define LCD_RD_SET GPIOC->BSRR=1<<6    //?????? PC6
   
#define LCD_CS_CLR  GPIOC->BRR=1<<9     //????????   PC9
#define LCD_RS_CLR GPIOC->BRR=1<<8     //????/?ü?? PC8   
#define LCD_WR_CLR GPIOC->BRR=1<<7     //?????? PC7
#define LCD_RD_CLR GPIOC->BRR=1<<6     //?????? PC6  
*/

#define LCD_CS_SET  GPIO_SetBits(GPIOA,GPIO_Pin_0)    //????????   PA0
#define LCD_RS_SET GPIO_SetBits(GPIOA,GPIO_Pin_2)    //????/?ü?? PC8   
#define LCD_WR_SET GPIO_SetBits(GPIOA,GPIO_Pin_1)   //?????? PC7
#define LCD_RD_SET GPIO_SetBits(GPIOA,GPIO_Pin_3)   //?????? PC6
   
#define LCD_CS_CLR  GPIO_ResetBits(GPIOA,GPIO_Pin_0)    //????????   PC9
#define LCD_RS_CLR GPIO_ResetBits(GPIOA,GPIO_Pin_2)     //????/?ü?? PC8   
#define LCD_WR_CLR GPIO_ResetBits(GPIOA,GPIO_Pin_1)     //?????? PC7
#define LCD_RD_CLR GPIO_ResetBits(GPIOA,GPIO_Pin_3)    //?????? PC6  



//PB0~15,×÷????????
//#define DATAOUT(x) GPIOB->ODR=x; //????????
//#define DATAIN     GPIOB->IDR;   //????????

//#define DATAOUT(x) GPIO_Write(GPIOB,x);
//#define DATAIN   GPIO_ReadInputData(GPIOB)

/*#define DATAOUT (x){
                   GPIOB->ODR=((GPIOB->ODR&0X00FF)|(x&0xFF00));
                   GPIOC->ODR=((GPIOC->ODR&0XFF00)|(x&0x00FF)); 
                  } */
                                  
#define DATAIN     (GPIOA->IDR&0X8700)|(GPIOB->IDR&0X0338)|(GPIOC->IDR&0X1F80)|(GPIOD->IDR&0X0004)   //????


//////////////////////////////////////////////////////////////////////
//?¨?è·??ò?¨??
#define L2R_U2D  0 //??×ó????,????????
#define L2R_D2U  1 //??×ó????,????????
#define R2L_U2D  2 //??????×ó,????????
#define R2L_D2U  3 //??????×ó,????????

#define U2D_L2R  4 //????????,??×ó????
#define U2D_R2L  5 //????????,??????×ó
#define D2U_L2R  6 //????????,??×ó????
#define D2U_R2L  7 //????????,??????×ó

#define DFT_SCAN_DIR  L2R_U2D  //???????¨?è·??ò
 
//?¨?è·??ò?¨??
#define L2R_U2D  0 //??×ó????,????????
#define L2R_D2U  1 //??×ó????,????????
#define R2L_U2D  2 //??????×ó,????????
#define R2L_D2U  3 //??????×ó,????????

#define U2D_L2R  4 //????????,??×ó????
#define U2D_R2L  5 //????????,??????×ó
#define D2U_L2R  6 //????????,??×ó????
#define D2U_R2L  7 //????????,??????×ó  

#define DFT_SCAN_DIR  L2R_U2D  //???????¨?è·??ò

//??±?????
#define WHITE         0xFFFF
#define BLACK         0x0000  
#define BLUE         0x001F  
#define BRED             0XF81F
#define GRED 0XFFE0
#define GBLUE 0X07FF
#define RED           0xF800
#define MAGENTA       0xF81F
#define GREEN         0x07E0
#define CYAN           0x7FFF
#define YELLOW         0xFFE0
#define BROWN 0XBC40 //×???
#define BRRED 0XFC07 //×??ì??
#define GRAY   0X8430 //????
//GUI????

#define DARKBLUE       0X01CF //??????
#define LIGHTBLUE       0X7D7C //??????  
#define GRAYBLUE       0X5458 //??????
//??????????PANEL?????? 
 
#define LIGHTGREEN     0X841F //?????? 
#define LGRAY 0XC618 //??????(PANNEL),?°??±??°??

#define LGRAYBLUE        0XA651 //????????(??????????)
#define LBBLUE           0X2B12 //??×?????(??????????·???)
void DATAOUT(u16 x) ;      
void LCD_Init(void);   //??????
void LCD_DisplayOn(void); //??????
void LCD_DisplayOff(void); //??????
void LCD_Clear(u16 Color); //????
void LCD_SetCursor(u16 Xpos, u16 Ypos); //?è????±ê
void LCD_DrawPoint(u16 x,u16 y); //????
void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color); //?ì??????
u16  LCD_ReadPoint(u16 x,u16 y); //???? 
void LCD_Draw_Circle(u16 x0,u16 y0,u8 r);     //????
void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2); //????
void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2);   //??????
void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color);   //????????
void LCD_Color_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 *color); //???????¨????
void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode); //????????×?·?
void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size);   //??????????×?
void LCD_ShowxNum(u16 x,u16 y,u32 num,u8 len,u8 size,u8 mode); //???? ??×?
void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p); //????????×?·??®,12/16×???

void LCD_WriteReg(u16 LCD_Reg, u16 LCD_RegValue);
u16 LCD_ReadReg(u16 LCD_Reg);
void LCD_WriteRAM_Prepare(void);
void LCD_WriteRAM(u16 RGB_Code);  
void LCD_Scan_Dir(u8 dir); //?è?????¨?è·??ò
void LCD_Display_Dir(u8 dir); //?è??????????·??ò
void LCD_Set_Window(u16 sx,u16 sy,u16 width,u16 height); //?è???°??
void LCD_WR_DATA(u16 data);
//??????????
/*#define LCD_WR_DATA(data){\
LCD_RS_SET;\
LCD_CS_CLR;\
DATAOUT(data);\
LCD_WR_CLR;\
LCD_WR_SET;\
LCD_CS_SET;\

 */    
//9320/9325 LCD?????÷  
#define R0             0x00
#define R1             0x01
#define R2             0x02
#define R3             0x03
#define R4             0x04
#define R5             0x05
#define R6             0x06
#define R7             0x07
#define R8             0x08
#define R9             0x09
#define R10            0x0A
#define R12            0x0C
#define R13            0x0D
#define R14            0x0E
#define R15            0x0F
#define R16            0x10
#define R17            0x11
#define R18            0x12
#define R19            0x13
#define R20            0x14
#define R21            0x15
#define R22            0x16
#define R23            0x17
#define R24            0x18
#define R25            0x19
#define R26            0x1A
#define R27            0x1B
#define R28            0x1C
#define R29            0x1D
#define R30            0x1E
#define R31            0x1F
#define R32            0x20
#define R33            0x21
#define R34            0x22
#define R36            0x24
#define R37            0x25
#define R40            0x28
#define R41            0x29
#define R43            0x2B
#define R45            0x2D
#define R48            0x30
#define R49            0x31
#define R50            0x32
#define R51            0x33
#define R52            0x34
#define R53            0x35
#define R54            0x36
#define R55            0x37
#define R56            0x38
#define R57            0x39
#define R59            0x3B
#define R60            0x3C
#define R61            0x3D
#define R62            0x3E
#define R63            0x3F
#define R64            0x40
#define R65            0x41
#define R66            0x42
#define R67            0x43
#define R68            0x44
#define R69            0x45
#define R70            0x46
#define R71            0x47
#define R72            0x48
#define R73            0x49
#define R74            0x4A
#define R75            0x4B
#define R76            0x4C
#define R77            0x4D
#define R78            0x4E
#define R79            0x4F
#define R80            0x50
#define R81            0x51
#define R82            0x52
#define R83            0x53
#define R96            0x60
#define R97            0x61
#define R106           0x6A
#define R118           0x76
#define R128           0x80
#define R129           0x81
#define R130           0x82
#define R131           0x83
#define R132           0x84
#define R133           0x85
#define R134           0x86
#define R135           0x87
#define R136           0x88
#define R137           0x89
#define R139           0x8B
#define R140           0x8C
#define R141           0x8D
#define R143           0x8F
#define R144           0x90
#define R145           0x91
#define R146           0x92
#define R147           0x93
#define R148           0x94
#define R149           0x95
#define R150           0x96
#define R151           0x97
#define R152           0x98
#define R153           0x99
#define R154           0x9A
#define R157           0x9D
#define R192           0xC0
#define R193           0xC1
#define R229           0xE5    
#endif



lcd.c

84.54 KB, 下载次数: 20

最佳答案

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

回复【6楼】八度空间: -----------------------------已经成功显示了,谢谢
有梦想,哪里都是你的舞台。哪怕从零开始,日积月累。终将厚积薄发!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2014-5-14
在线时间
56 小时
 楼主| 发表于 2015-4-25 14:59:22 | 显示全部楼层
回复【6楼】八度空间:
-----------------------------已经成功显示了,谢谢
有梦想,哪里都是你的舞台。哪怕从零开始,日积月累。终将厚积薄发!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-4-25 18:46:55 | 显示全部楼层
数据对应位放到对应的数据总线输出寄存器即可,没什么纠结的,可以参考一下原子哥OLED实验的操作方式
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2014-5-14
在线时间
56 小时
 楼主| 发表于 2015-4-26 23:41:23 | 显示全部楼层
回复【2楼】八度空间:
---------------------------------
我又重新改了一下,还是不对,您帮忙看看下面这几句对不对
void DATAOUT(u16 x) 

    GPIOC->ODR&=0XFC7F; 
    GPIOC->ODR|=((x&0X0007)<<7);//PC????7 8 9
    GPIOC->ODR&=0XE3FF; //PC????10 11 12
    GPIOC->ODR|=(((x&0X0380)>>7)<<10);   
    
    GPIOA->ODR&=0XF8FF; //PA????8 9 10
    GPIOA->ODR|=((x&0X0038)>>3)<<8;  
    GPIOA->ODR&=0X7FFF; //PA????15
    GPIOA->ODR|=((x&0X0040)>>6)<<15;     
    
    
    GPIOB->ODR&=0XFFC7; //PC????7 8 9
    GPIOB->ODR|=((x&0X3800)>>11)<<3;
    GPIOB->ODR&=0XFCFF; //PC????10 11 12
    GPIOB->ODR|=((x&0XC000)>>14)<<8;
    
    GPIOD->ODR&=0XFFFB; 
    GPIOD->ODR|=((x&0X0400)>>10)<<2;
}



#define DATAIN     (((GPIOA->IDR&0X0700)>>8)<<3)|(((GPIOA->IDR&0X8000)>>15)<<6)|(((GPIOB->IDR&0X0038)>>3)<<11)|(((GPIOB->IDR&0X0300)>>8)<<14)|((GPIOC->IDR&0X0380)>>7)|(((GPIOC->IDR&0X1C00)>>10)<<7)|(((GPIOD->IDR&0X0004)>>2)<<10 )  //????




u16 LCD_RD_DATA(void)
{    
u16 t;
GPIOA->CRH&=0X0FFFF000; //PA15 10 9 8 ????????
GPIOA->CRH|=0X80000888;
    GPIOA->ODR&=0X78FF;     //????????0
    GPIOB->CRL&=0XFF000FFF; //PB3 4 5 8 9 ????????
GPIOB->CRL|=0X00888000;
    GPIOB->CRH&=0XFFFFFF00; 
GPIOB->CRH|=0X00000088;
    GPIOB->ODR&=0XFCC7;     //????????0
    GPIOC->CRL&=0X0FFFFFFF; //PC7 8 9 10 11 12  ????????
GPIOC->CRL|=0X80000000;
    GPIOC->CRH&=0XFFF00000; 
GPIOC->CRH|=0X00088888;
    GPIOC->ODR&=0XE07F;     //????????0
    GPIOD->CRL&=0XFFFFF0FF; //PD2  ????????
GPIOD->CRL|=0X00000800;
    GPIOD->ODR&=0XFFFB;     //????????0
LCD_RS_SET;
LCD_CS_CLR;
//????????(???????÷?±,?????è????2??)
LCD_RD_CLR;
if(lcddev.id==0X8989)delay_us(2);//FOR 8989,???±2us    
t=DATAIN;  
LCD_RD_SET;
LCD_CS_SET; 

//GPIOB->CRL=0X33333333; //PB0-7  ????????
//GPIOB->CRH=0X33333333; //PB8-15 ????????
//GPIOB->ODR=0XFFFF;    //??????????
    
    GPIOA->CRH&=0X0FFFF000; //PA15 10 9 8 ????????
GPIOA->CRH|=0X30000333;
    GPIOA->ODR|=0X8700;     //????????1
    GPIOB->CRL&=0XFF000FFF; //PB3 4 5 8 9 ????????
GPIOB->CRL|=0X00333000;
    GPIOB->CRH&=0XFFFFFF00; 
GPIOB->CRH|=0X00000033;
    GPIOB->ODR|=0X0338;     //????????1
    GPIOC->CRL&=0X0FFFFFFF; //PC7 8 9 10 11 12  ????????
GPIOC->CRL|=0X30000000;
    GPIOC->CRH&=0XFFF00000; 
GPIOC->CRH|=0X00033333;
    GPIOC->ODR|=0X1F80;     //????????1
    GPIOD->CRL&=0XFFFFF0FF; //PD2????????
GPIOD->CRL|=0X00000300;
    GPIOD->ODR|=0X0004;     //????????1
    
return t;  
}



u16 LCD_ReadPoint(u16 x,u16 y)
{
  u16 r,g,b;
if(x>=lcddev.width||y>=lcddev.height)return 0; //??????·??§,?±??·???    
LCD_SetCursor(x,y);
if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310)LCD_WR_REG(0X2E); //9341/6804/5310·?????GRAM????
else if(lcddev.id==0X5510)LCD_WR_REG(0X2E00); //5510 ·?????GRAM????
else LCD_WR_REG(R34);         //????IC·?????GRAM????
//GPIOB->CRL=0X88888888; //PB0-7  ????????
//GPIOB->CRH=0X88888888; //PB8-15 ????????
//GPIOB->ODR=0XFFFF;     //??????????
    
    GPIOA->CRH&=0X0FFFF000; //PA15 10 9 8 ????????
GPIOA->CRH|=0X80000888;
    GPIOA->ODR|=0X8700;     //????????1
    GPIOB->CRL&=0XFF000FFF; //PB3 4 5 8 9 ????????
GPIOB->CRL|=0X00888000;
    GPIOB->CRH&=0XFFFFFF00; 
GPIOB->CRH|=0X00000088;
    GPIOB->ODR|=0X0338;     //????????1
    GPIOC->CRL&=0X0FFFFFFF; //PC7 8 9 10 11 12  ????????
GPIOC->CRL|=0X80000000;
    GPIOC->CRH&=0XFFF00000; 
GPIOC->CRH|=0X00088888;
    GPIOC->ODR|=0X1F80;     //????????1
    GPIOD->CRL&=0XFFFFF0FF; //PD2  ????????
GPIOD->CRL|=0X00000800;
    GPIOD->ODR|=0X0004;     //????????1
    
    
LCD_RS_SET;
LCD_CS_CLR;     
//????????(??GRAM?±,????????????)
LCD_RD_CLR;
   delay_us(1);//???±1us    
LCD_RD_SET;
  //dummy READ
LCD_RD_CLR;    
delay_us(1);//???±1us    
  r=DATAIN;   //????×?±ê????
LCD_RD_SET;
  if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510) //9341/NT35310/NT35510??·?2??????
{  
LCD_RD_CLR;    
b=DATAIN;//??????????     
  LCD_RD_SET;
g=r&0XFF;//????9341,??????????????RG????,R???°,G???ó,?÷??8??
g<<=8;
}else if(lcddev.id==0X6804)
{
LCD_RD_CLR;    
  LCD_RD_SET;
r=DATAIN;//6804?????????????????????? 
}  
LCD_CS_SET;
//GPIOB->CRL=0X33333333;  //PB0-7  ????????
//GPIOB->CRH=0X33333333;  //PB8-15 ????????
//GPIOB->ODR=0XFFFF;     //??????????  

    GPIOA->CRH&=0X0FFFF000; //PA15 10 9 8 ????????
GPIOA->CRH|=0X30000333;
    GPIOA->ODR|=0X8700;     //????????1
    GPIOB->CRL&=0XFF000FFF; //PB3 4 5 8 9 ????????
GPIOB->CRL|=0X00333000;
    GPIOB->CRH&=0XFFFFFF00; 
GPIOB->CRH|=0X00000033;
    GPIOB->ODR|=0X0338;     //????????1
    GPIOC->CRL&=0X0FFFFFFF; //PC7 8 9 10 11 12  ????????
GPIOC->CRL|=0X30000000;
    GPIOC->CRH&=0XFFF00000; 
GPIOC->CRH|=0X00033333;
    GPIOC->ODR|=0X1F80;     //????????1
    GPIOD->CRL&=0XFFFFF0FF; //PD2????????
GPIOD->CRL|=0X00000300;
    GPIOD->ODR|=0X0004;     //????????1
    
    
    if(lcddev.id==0X9325||lcddev.id==0X4535||lcddev.id==0X4531||lcddev.id==0X8989||lcddev.id==0XB505)return r; //??????IC?±??·?????????
else if(lcddev.id==0X9341||lcddev.id==0X5310||lcddev.id==0X5510)return (((r>>11)<<11)|((g>>10)<<5)|(b>>11));//ILI9341/NT35310/NT35510?è??????×???????
else return LCD_BGR2RGB(r); //????IC
}
有梦想,哪里都是你的舞台。哪怕从零开始,日积月累。终将厚积薄发!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-4-27 19:52:24 | 显示全部楼层
回复【3楼】玄子:
---------------------------------
先读取ID吧,什么都不用操作,读取ID成功的话就说明成功一半了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

12

主题

63

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
360
金钱
360
注册时间
2014-5-14
在线时间
56 小时
 楼主| 发表于 2015-4-27 20:27:26 | 显示全部楼层
回复【4楼】八度空间:
---------------------------------
我仿真了,可以读到lcddev中的所有数据,ID 是9341,硬件我看了没有问题,您帮忙看看我发的那个帖子里的附件程序,
有梦想,哪里都是你的舞台。哪怕从零开始,日积月累。终将厚积薄发!
回复

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2015-4-28 21:55:16 | 显示全部楼层
回复【5楼】玄子:
---------------------------------
你屏幕的驱动IC是9341的吧?既然读取正确了,初始化代码就用厂家提供的,完事之后就可以实现打点函数啦
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
29
金钱
29
注册时间
2015-8-1
在线时间
0 小时
发表于 2015-8-1 15:12:58 | 显示全部楼层
回复【7楼】玄子:
---------------------------------
你好,我遇到了和你一样的问题,tftlcd的数据线IO口很乱,现在屏幕只在复位的时候闪一下,之后就是黑屏,感觉是数据线的地方有问题,方便的话,能分享一下你调好的程序吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 07:54

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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