OpenEdv-开源电子网

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

7寸TFT V2液晶屏 显示求助

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-23
在线时间
4 小时
发表于 2018-1-25 13:41:38 | 显示全部楼层 |阅读模式
问题:液晶屏清屏可以显示不同的颜色,但是不显示字符,执行画点函数也不画点?
硬件配置:MCU 是STM32F103VE,7寸屏是正点原子的7寸TFT V2屏  液晶驱动是SSD1963    SSD1963 RS引脚接MCU 的FSMC_A16     CS引脚接FSMC_NE1
代码用的是正点原子的 触摸屏实验代码,如下


//typedef struct
//{
//        vu16 LCD_REG;
//        vu16 LCD_RAM;
//} LCD_TypeDef;
                    
//#define LCD_BASE        ((u32)(0x6C000000 | 0x000007FE))
//#define LCD             ((LCD_TypeDef *) LCD_BASE)

#define LCD_WR_REG(add)    ((*(volatile u16 *)((uint32_t)0x60000000)) = ((u16)add))
#define LCD_WR_DATA(val)       ((*(volatile u16 *) ((uint32_t)0x60020000)) = ((u16)(val)))       


因为用的是FSMC_NE1   FSMC_A16  所以地址改为上面重新定义的地址

下面是LCD_Init 初始化函数

                LCD_WR_REG(0xE2);                //Set PLL with OSC = 10MHz (hardware),        Multiplier N = 35, 250MHz < VCO < 800MHz = OSC*(N+1), VCO = 300MHz
                LCD_WR_DATA(0x1D);                //2&#206;êy1
                LCD_WR_DATA(0x02);                //2&#206;êy2 Divider M = 2, PLL = 300/(M+1) = 100MHz
                LCD_WR_DATA(0x04);                //2&#206;êy3 Validate M and N values   
                delay_us(100);
                LCD_WR_REG(0xE0);                // Start PLL command
                LCD_WR_DATA(0x01);                // enable PLL
                delay_ms(10);
                LCD_WR_REG(0xE0);                // Start PLL command again
                LCD_WR_DATA(0x03);                // now, use PLL output as system clock       
                delay_ms(12);  
                LCD_WR_REG(0x01);                //èí&#184;′&#206;&#187;
                delay_ms(10);
               
                LCD_WR_REG(0xE6);                //éè&#214;&#195;&#207;&#241;&#203;&#216;&#198;μ&#194;ê,33Mhz
                LCD_WR_DATA(0x2F);
                LCD_WR_DATA(0xFF);
                LCD_WR_DATA(0xFF);
               
                LCD_WR_REG(0xB0);                //éè&#214;&#195;LCD&#196;£ê&#189;
                LCD_WR_DATA(0x20);                //24&#206;&#187;&#196;£ê&#189;
                LCD_WR_DATA(0x00);                //TFT &#196;£ê&#189;
       
                LCD_WR_DATA((SSD_HOR_RESOLUTION-1)>>8);//éè&#214;&#195;LCD&#203;&#174;&#198;&#189;&#207;&#241;&#203;&#216;
                LCD_WR_DATA(SSD_HOR_RESOLUTION-1);                 
                LCD_WR_DATA((SSD_VER_RESOLUTION-1)>>8);//éè&#214;&#195;LCD′1&#214;±&#207;&#241;&#203;&#216;
                LCD_WR_DATA(SSD_VER_RESOLUTION-1);                 
                LCD_WR_DATA(0x00);                //RGBDòáD
               
                LCD_WR_REG(0xB4);                //Set horizontal period
                LCD_WR_DATA((SSD_HT-1)>>8);
                LCD_WR_DATA(SSD_HT-1);
                LCD_WR_DATA(SSD_HPS>>8);
                LCD_WR_DATA(SSD_HPS);
                LCD_WR_DATA(SSD_HOR_PULSE_WIDTH-1);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
                LCD_WR_REG(0xB6);                //Set vertical period
                LCD_WR_DATA((SSD_VT-1)>>8);
                LCD_WR_DATA(SSD_VT-1);
                LCD_WR_DATA(SSD_VPS>>8);
                LCD_WR_DATA(SSD_VPS);
                LCD_WR_DATA(SSD_VER_FRONT_PORCH-1);
                LCD_WR_DATA(0x00);
                LCD_WR_DATA(0x00);
               
                LCD_WR_REG(0xF0);        //éè&#214;&#195;SSD1963ó&#235;CPU&#189;ó&#191;ú&#206;a16bit  
                LCD_WR_DATA(0x03);        //16-bit(565 format) data for 16bpp

                LCD_WR_REG(0x29);        //&#191;a&#198;&#244;&#207;&#212;ê&#190;
                //éè&#214;&#195WMê&#228;3&#246;  ±31aí¨1y&#213;&#188;&#191;&#213;±è&#191;éμ÷
                LCD_WR_REG(0xD0);        //éè&#214;&#195;×&#212;&#182;ˉ°×&#198;&#189;oaDBC
                LCD_WR_DATA(0x00);        //disable
       
                LCD_WR_REG(0xBE);        //&#197;&#228;&#214;&#195WMê&#228;3&#246;
                LCD_WR_DATA(0x05);        //1éè&#214;&#195WM&#198;μ&#194;ê
                LCD_WR_DATA(0xFE);        //2éè&#214;&#195WM&#213;&#188;&#191;&#213;±è
                LCD_WR_DATA(0x01);        //3éè&#214;&#195;C
                LCD_WR_DATA(0x00);        //4éè&#214;&#195;D
                LCD_WR_DATA(0x00);        //5éè&#214;&#195;E
                LCD_WR_DATA(0x00);        //6éè&#214;&#195;F
               
                LCD_WR_REG(0xB8);        //éè&#214;&#195;GPIO&#197;&#228;&#214;&#195;
                LCD_WR_DATA(0x03);        //2&#184;&#246;IO&#191;úéè&#214;&#195;3éê&#228;3&#246;
                LCD_WR_DATA(0x01);        //GPIOê1ó&#195;&#213;y3£μ&#196;IO1|&#196;ü
                LCD_WR_REG(0xBA);
                LCD_WR_DATA(0X01);        //GPIO[1:0]=01,&#191;&#216;&#214;&#198;LCD·&#189;&#207;ò
               
                LCD_SSD_BackLightSet(100);//±31aéè&#214;&#195;&#206;a×&#238;áá
        }                 
        LCD_Display_Dir(0);                //&#196;&#172;è&#207;&#206;aêú&#198;á
        LCD_LED=1;                                //μ&#227;áá±31a
        LCD_Clear(WHITE);


这里的LCD_Clear 函数可以显示不同的颜色

//画点函数
void LCD_DrawPoint(u16 x,u16 y)
{
        LCD_SetCursor(x,y);                //设置光标函数
        LCD_WriteRAM_Prepare();        //写入GRAM
        LCD_WR_DATA(POINT_COLOR);//写入颜色  //LCD->LCD_RAM=POINT_COLOR;
}


//设置光标函数
void LCD_SetCursor(u16 Xpos, u16 Ypos)
{
        if(lcddev.id==0X1963)
        {                                          
                if(lcddev.dir==0)//x×&#248;±êDèòa±&#228;&#187;&#187;
                {
                        Xpos=lcddev.width-1-Xpos;
                        LCD_WR_REG(lcddev.setxcmd);
                        LCD_WR_DATA(0);LCD_WR_DATA(0);                
                        LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                          
                }else
                {
                        LCD_WR_REG(lcddev.setxcmd);
                        LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);                
                        LCD_WR_DATA((lcddev.width-1)>>8);LCD_WR_DATA((lcddev.width-1)&0XFF);                                                 
                }       
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(Ypos>>8);LCD_WR_DATA(Ypos&0XFF);                
                LCD_WR_DATA((lcddev.height-1)>>8);LCD_WR_DATA((lcddev.height-1)&0XFF);

      }
}

//开始写入GRAM
void LCD_WriteRAM_Prepare(void)
{
        LCD_WR_REG(lcddev.wramcmd);//LCD->LCD_REG=lcddev.wramcmd;          
}       


代码如上,不知道为什么画点就不可以,请大神们指导下,谢谢了。


[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\756566259\QQ\WinTemp\RichOle\PB)2H$YGW[UB79R$C5[DB56.png[/img]

[img]file:///C:\Users\Administrator\AppData\Roaming\Tencent\Users\756566259\QQ\WinTemp\RichOle\PB)2H$YGW[UB79R$C5[DB56.png[/img]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-1-25 13:47:52 | 显示全部楼层

回帖奖励 +5 金钱

分辨率那些宏定义改对了吗。

//绘点函数,在指定位置绘制一个指定颜色的点
void LCD_Fast_DrawPoint(u16 x,u16 y,u16 color)
{          
       
        LCD_WR_REG(0x002A);       
        LCD_WR_DATA((x)>>8);            
        LCD_WR_DATA((x)&0x00ff);
        LCD_WR_DATA((x)>>8);            
        LCD_WR_DATA((x)&0x00ff);

        LCD_WR_REG(0x002b);       
  
        LCD_WR_DATA((y)>>8);            
        LCD_WR_DATA((y)&0x00ff);
        LCD_WR_DATA((y)>>8);            
        LCD_WR_DATA((y)&0x00ff);

        LCD_WR_REG(0x002c);
       
        LCD_WR_DATA(color);                                                         //将取出的16位像素数据送入显示区       
}         

给个画点你参考,我自己写的
回复 支持 反对

使用道具 举报

64

主题

446

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1032
金钱
1032
注册时间
2017-7-26
在线时间
275 小时
发表于 2018-1-25 14:01:00 | 显示全部楼层
不过我有点疑惑

为什么你这里
#define LCD_WR_REG(add)    ((*(volatile u16 *)((uint32_t)0x60000000)) = ((u16)add))
#define LCD_WR_DATA(val)       ((*(volatile u16 *) ((uint32_t)0x60020000)) = ((u16)(val)))   

LCD_WR_REG的地址是0x60000000,而不是0x6001FFFE呢?
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-23
在线时间
4 小时
 楼主| 发表于 2018-1-25 14:02:45 | 显示全部楼层
谢谢,我用的原子哥的字符串函数也是调用的快速画点函数,跟您的是一样的,我在程序调试的时候程序给了命令也是对的,分辨率定义的是800*480
回复 支持 反对

使用道具 举报

5

主题

101

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
259
金钱
259
注册时间
2013-4-4
在线时间
46 小时
发表于 2018-1-25 14:22:50 | 显示全部楼层
帮顶!
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
23
金钱
23
注册时间
2018-1-23
在线时间
4 小时
 楼主| 发表于 2018-1-25 14:32:56 | 显示全部楼层
谢谢!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-8 22:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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