OpenEdv-开源电子网

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

自己焊了块ILI9488驱动芯片的屏,硬件接好后把初始化代码植入LCD显示例程并改了相应配置后现在颜色有按照设定的变化,但不显示字,求破

[复制链接]

2

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2015-8-7
在线时间
53 小时
发表于 2015-10-8 12:40:50 | 显示全部楼层 |阅读模式
5金钱
如题,代码如下,

#ifndef __LCD_H
#define __LCD_H
#include "sys.h"  
#include "stdlib.h" 
//////////////////////////////////////////////////////////////////////////////////  
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//2.4寸/2.8寸/3.5寸/4.3寸/7寸 TFT液晶驱动  
//支持驱动IC型号包括:ILI9341/ILI9325/RM68042/RM68021/ILI9320/ILI9328/LGDP4531/LGDP4535/
//                  SPFD5408/1505/B505/C505/NT35310/NT35510/SSD1963等    
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2010/7/4
//版本:V3.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved
//********************************************************************************
//V1.2修改说明
//支持了SPFD5408的驱动,另外把液晶ID直接打印成HEX格式.方便查看LCD驱动IC.
//V1.3
//加入了快速IO的支持
//修改了背光控制的极性(适用于V1.8及以后的开发板版本)
//对于1.8版本之前(不包括1.8)的液晶模块,请修改LCD_Init函数的LCD_LED=1;为LCD_LED=1;
//V1.4
//修改了LCD_ShowChar函数,使用画点功能画字符。
//加入了横竖屏显示的支持
//V1.5 20110730
//1,修改了B505液晶读颜色有误的bug.
//2,修改了快速IO及横竖屏的设置方式.
//V1.6 20111116
//1,加入对LGDP4535液晶的驱动支持
//V1.7 20120713
//1,增加LCD_RD_DATA函数
//2,增加对ILI9341的支持
//3,增加ILI9325的独立驱动代码
//4,增加LCD_Scan_Dir函数(慎重使用)  
//6,另外修改了部分原来的函数,以适应9341的操作
//V1.8 20120905
//1,加入LCD重要参数设置结构体lcddev
//2,加入LCD_Display_Dir函数,支持在线横竖屏切换
//V1.9 20120911
//1,新增RM68042驱动(ID:6804),但是6804不支持横屏显示!!原因:改变扫描方式,
//导致6804坐标设置失效,试过很多方法都不行,暂时无解。
//V2.0 20120924
//在不硬件复位的情况下,ILI9341的ID读取会被误读成9300,修改LCD_Init,将无法识别
//的情况(读到ID为9300/非法ID),强制指定驱动IC为ILI9341,执行9341的初始化。
//V2.1 20120930
//修正ILI9325读颜色的bug。
//V2.2 20121007
//修正LCD_Scan_Dir的bug。
//V2.3 20130120
//新增6804支持横屏显示
//V2.4 20131120
//1,新增NT35310(ID:5310)驱动器的支持
//2,新增LCD_Set_Window函数,用于设置窗口,对快速填充,比较有用,但是该函数在横屏时,不支持6804.
//V2.5 20140211
//1,新增NT35510(ID:5510)驱动器的支持
//V2.6 20140504
//1,新增ASCII 24*24字体的支持(更多字体用户可以自行添加)  
//2,修改部分函数参数,以支持MDK -O2优化
//3,针对9341/35310/35510,写时间设置为最快,尽可能的提高速度
//4,去掉了SSD1289的支持,因为1289实在是太慢了,读周期要1us...简直奇葩.不适合F4使用
//5,修正68042及C505等IC的读颜色函数的bug.
//V2.7 20140710
//1,修正LCD_Color_Fill函数的一个bug. 
//2,修正LCD_Scan_Dir函数的一个bug.
//V2.8 20140721
//1,解决MDK使用-O2优化时LCD_ReadPoint函数读点失效的问题.
//2,修正LCD_Scan_Dir横屏时设置的扫描方式显示不全的bug.
//V2.9 20141130
//1,新增对SSD1963 LCD的支持.
//2,新增LCD_SSD_BackLightSet函数
//3,取消ILI93XX的Rxx寄存器定义
//V3.0 20150423
//修改SSD1963 LCD屏的驱动参数.
//////////////////////////////////////////////////////////////////////////////////  

//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 PBout(15)   //LCD背光     PB15    
//LCD地址结构体
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;
//使用NOR/SRAM的 Bank1.sector4,地址位HADDR[27,26]=11 A6作为数据命令区分线 
//注意设置时STM32内部会右移一位对其! 111 1110=0X7E    
#define LCD_BASE        ((u32)(0x6C000000 | 0x0000007E))
#define LCD             ((LCD_TypeDef *) LCD_BASE)
//////////////////////////////////////////////////////////////////////////////////
 
//扫描方向定义
#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 LIGHTGRAY        0XEF5B //浅灰色(PANNEL)
#define LGRAY 0XC618 //浅灰色(PANNEL),窗体背景色

#define LGRAYBLUE        0XA651 //浅灰蓝色(中间层颜色)
#define LBBLUE           0X2B12 //浅棕蓝色(选择条目的反色)
     
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); //设置窗口      
//LCD分辨率设置
#define SSD_HOR_RESOLUTION 480 //LCD水平分辨率
#define SSD_VER_RESOLUTION 320 //LCD垂直分辨率
//LCD驱动参数设置
#define SSD_HOR_PULSE_WIDTH 1 //水平脉宽
#define SSD_HOR_BACK_PORCH 46 //水平前廊
#define SSD_HOR_FRONT_PORCH 210 //水平后廊

#define SSD_VER_PULSE_WIDTH 1 //垂直脉宽
#define SSD_VER_BACK_PORCH 23 //垂直前廊
#define SSD_VER_FRONT_PORCH 22 //垂直前廊
//如下几个参数,自动计算
#define SSD_HT (SSD_HOR_RESOLUTION+SSD_HOR_BACK_PORCH+SSD_HOR_FRONT_PORCH)
#define SSD_HPS (SSD_HOR_BACK_PORCH)
#define SSD_VT (SSD_VER_RESOLUTION+SSD_VER_BACK_PORCH+SSD_VER_FRONT_PORCH)
#define SSD_VPS (SSD_VER_BACK_PORCH)

#endif  
 
 



LCD_ILI9488.rar

917.95 KB, 下载次数: 5451

最佳答案

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

经过一天的调试,我找到问题了,0X2A和0X2B写入的时候每个都要写入四次数据,然后字都能显示出来了 下面是修改后的画点函数 void LCD_DrawPoint(u16 x,u16 y) { LCD->LCD_REG=0x2a; LCD->LCD_RAM=(x>>8); LCD->LCD_RAM=(x&0XFF); LCD->LCD_RAM=(x>>8); LCD->LCD_RAM=(x&0XFF); LCD->LCD_REG=0x2b; LCD->LCD_RAM=(y>>8); LCD->LCD_RAM=(y&0XFF); LCD->LCD_RAM=(y>>8); LCD->LCD_RAM=(y&0XFF); L ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2022-1-28
在线时间
6 小时
发表于 2015-10-8 12:40:51 | 显示全部楼层
经过一天的调试,我找到问题了,0X2A和0X2B写入的时候每个都要写入四次数据,然后字都能显示出来了
下面是修改后的画点函数
void LCD_DrawPoint(u16 x,u16 y)
{
        LCD->LCD_REG=0x2a;
        LCD->LCD_RAM=(x>>8);
        LCD->LCD_RAM=(x&0XFF);
        LCD->LCD_RAM=(x>>8);
        LCD->LCD_RAM=(x&0XFF);       
        LCD->LCD_REG=0x2b;
        LCD->LCD_RAM=(y>>8);
        LCD->LCD_RAM=(y&0XFF);
        LCD->LCD_RAM=(y>>8);
        LCD->LCD_RAM=(y&0XFF);                
        LCD->LCD_REG=0x2c;
        LCD->LCD_RAM=POINT_COLOR;
}
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2015-10-8 22:41:16 | 显示全部楼层
帮顶....
回复

使用道具 举报

7

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
330
金钱
330
注册时间
2015-12-18
在线时间
32 小时
发表于 2015-12-30 14:41:42 | 显示全部楼层
请问你的问题解决没啊,我现在也遇到这个问题了
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
135
金钱
135
注册时间
2015-12-18
在线时间
33 小时
发表于 2015-12-30 14:57:36 | 显示全部楼层
我顶!!!!
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1681
金钱
1681
注册时间
2014-2-25
在线时间
229 小时
发表于 2015-12-31 13:39:49 | 显示全部楼层
能够刷屏吗?
回复

使用道具 举报

7

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
330
金钱
330
注册时间
2015-12-18
在线时间
32 小时
发表于 2016-1-7 10:14:11 | 显示全部楼层

能按照指定颜色刷屏,但是不能显示字符
回复

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1681
金钱
1681
注册时间
2014-2-25
在线时间
229 小时
发表于 2016-1-7 10:20:12 | 显示全部楼层
tudouhuishuohua 发表于 2016-1-7 10:14
能按照指定颜色刷屏,但是不能显示字符

那就应该是打点函数有问题
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2022-1-28
在线时间
6 小时
发表于 2016-5-13 12:28:20 | 显示全部楼层
各位大神,有人解决了这个问题吗?
回复

使用道具 举报

3

主题

126

帖子

0

精华

高级会员

Rank: 4

积分
776
金钱
776
注册时间
2015-2-28
在线时间
251 小时
发表于 2016-7-5 19:27:53 | 显示全部楼层
我今天测试ILI9488也是重新设置一下:
                LCD_WR_REG(lcddev.setxcmd);
                LCD_WR_DATA(x>>8);
                LCD_WR_DATA(x&0XFF);  
                LCD_WR_DATA(x>>8);
                LCD_WR_DATA(x&0XFF);                                 
                LCD_WR_REG(lcddev.setycmd);
                LCD_WR_DATA(y>>8);
                LCD_WR_DATA(y&0XFF);
                LCD_WR_DATA(y>>8);
                LCD_WR_DATA(y&0XFF);
就可以了,但是不能像原子的刷新这么快,刷新实在是太慢了,可能是ILI9488的原因
参考安富莱也是写了两遍
SEGGER论坛
http://forum.segger.com/index.ph ... ht=ILI9488#post8477
也是写了两遍
回复

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2016-8-5
在线时间
6 小时
发表于 2016-8-19 10:54:54 | 显示全部楼层
追忆的光年 发表于 2015-10-8 12:40
经过一天的调试,我找到问题了,0X2A和0X2B写入的时候每个都要写入四次数据,然后字都能显示出来了
下面是 ...

更正一下:在用LCD_Clear的时候,只是这样写4次是没用的,写4次其实是需要写入start和end坐标,来指定后续写数据时的范围,如:
LCD->LCD_REG=0x2a;
LCD->LCD_RAM=(sx>>8);
LCD->LCD_RAM=(sx&0XFF);
LCD->LCD_RAM=(ex>>8);
LCD->LCD_RAM=(ex&0XFF);

ex的值可以大于或等于sx,清屏命令时,sx设置 为0,ex设置为weight,否则清屏失败。
回复

使用道具 举报

4

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
134
金钱
134
注册时间
2016-9-6
在线时间
25 小时
发表于 2016-9-6 17:55:12 | 显示全部楼层
LZ你好,ILI9488的背光正极供电几伏才能点亮,IOVCC和VCC现在是3V供电,背光我也用的3V,现在不亮
回复

使用道具 举报

2

主题

37

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2015-8-7
在线时间
53 小时
 楼主| 发表于 2016-9-7 12:37:33 | 显示全部楼层
沙漠风 发表于 2016-9-6 17:55
LZ你好,ILI9488的背光正极供电几伏才能点亮,IOVCC和VCC现在是3V供电,背光我也用的3V,现在不亮

背光除非你的是并联方案,只要背光是串联的,用3V必然亮不了,一般你需要做个恒流背光驱动电路。升压的
回复

使用道具 举报

5

主题

21

帖子

0

精华

高级会员

Rank: 4

积分
683
金钱
683
注册时间
2016-11-7
在线时间
125 小时
发表于 2016-11-30 19:35:44 | 显示全部楼层
楼主问题解决了吗?我也遇到这个问题了,能不能分享一下经验
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2017-2-14
在线时间
5 小时
发表于 2017-2-16 14:49:51 | 显示全部楼层
追忆的光年 发表于 2015-10-8 12:40
经过一天的调试,我找到问题了,0X2A和0X2B写入的时候每个都要写入四次数据,然后字都能显示出来了
下面是 ...

采用这种方法的确是可以将字符正确显示出来,但是又无法正常刷屏了呀
回复

使用道具 举报

56

主题

343

帖子

0

精华

高级会员

Rank: 4

积分
977
金钱
977
注册时间
2016-3-8
在线时间
267 小时
发表于 2017-2-23 18:18:51 | 显示全部楼层
用你的代码时颜色显示是反的,白是黑,黑是白的。
回复

使用道具 举报

0

主题

0

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2020-5-11
在线时间
9 小时
发表于 2017-3-10 17:08:21 | 显示全部楼层
楼主  你的这个是ILI9488  IC的驱动吗?     那个SPI初始化你验证过了没有啊  
回复

使用道具 举报

zhangdong0925 该用户已被删除
发表于 2017-3-16 17:10:26 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-3-5
在线时间
15 小时
发表于 2017-10-5 16:57:10 | 显示全部楼层
这两天在搞9488驱动芯片的屏幕,下载楼主的程序,可以正常刷屏,但是刷屏的颜色不对,根据实际的清屏颜色把各个对应的颜色值改了即可,另外无法显示字符问题,确实在画点的时候写两次就可以了,但是字符显示了,但是刷屏不可以了,后来我在刷屏的时候设置了刷屏的窗口大小,就可以了,还加入了横屏显示,已成功,感谢楼主的代码和解释!
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-6-11
在线时间
13 小时
发表于 2018-1-5 10:03:30 | 显示全部楼层
奋douing 发表于 2017-10-5 16:57
这两天在搞9488驱动芯片的屏幕,下载楼主的程序,可以正常刷屏,但是刷屏的颜色不对,根据实际的清屏颜色把 ...

您好,有个问题想请教您,我的ILI9488驱动3.5寸TFT。现在只能是清屏,不能显示字符。觉得打点函数有问题,按照这个帖子操作,还是没成功,您能分享一下您的经验么?914577437我的qq,谢谢您了。
回复

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
111
金钱
111
注册时间
2017-6-11
在线时间
13 小时
发表于 2018-1-5 10:07:37 | 显示全部楼层
LZ您好,我想请教一下,您分享的代码附件,能实现什么功能么?我总觉得我的打点函数有问题,想请教您一下吗?
914577437我的qq,谢谢您了。
回复

使用道具 举报

7

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2017-7-11
在线时间
14 小时
发表于 2018-3-5 14:33:41 | 显示全部楼层
楼主,我按照你的程序写了一下,好像不能画圆和矩形。
QQ图片20180305143103.jpg
回复

使用道具 举报

13

主题

20

帖子

0

精华

初级会员

Rank: 2

积分
107
金钱
107
注册时间
2013-8-9
在线时间
2 小时
发表于 2018-6-6 16:14:56 | 显示全部楼层
请问一下,ILI9341 和 ILI9488 的驱动方式一样吗?
是否只在于指令不同?
谢谢。
回复

使用道具 举报

6

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
69
金钱
69
注册时间
2018-7-6
在线时间
26 小时
发表于 2018-7-7 22:17:21 | 显示全部楼层
移植EMWIN可以正常显视吗?
回复

使用道具 举报

3

主题

7

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-11-27
在线时间
12 小时
发表于 2018-12-8 13:36:02 | 显示全部楼层
本帖最后由 zpingpung 于 2018-12-8 16:11 编辑

我移植到 迷你开发板,现在可以刷屏,能显示各种颜色,就是显示不了字.
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
37
金钱
37
注册时间
2019-4-18
在线时间
14 小时
发表于 2019-4-25 08:37:34 | 显示全部楼层
本帖最后由 mingtaiyang 于 2019-4-25 08:38 编辑
pdwdzz 发表于 2017-2-23 18:18
用你的代码时颜色显示是反的,白是黑,黑是白的。

我也遇到了这样的问题,我没有用楼主的例程。我从两个厂家买了两块ILI9488驱动芯片的3.5寸屏,两个屏同时接到系统板上,颜色完全反的,不是RGB中的R和B反相的那种。查了百度,最后发现,9488规格书中,可以控制显示反显。        LCD_WR_REG(0x21);         更改了反显以后,还是有问题,黑色能显示成褐色的样子。  后来调整了LCD_WR_REG(0XC5);;VCOM Control (C5h) 。因为没有仔细核对两个厂家技术给的例程代码,他们的区别这个地方也不一样;        LCD_WR_REG(0XC5);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x12);  
        LCD_WR_DATA(0x80);

         LCD_WR_REG(0XC5);
        LCD_WR_DATA(0x00);
        LCD_WR_DATA(0x22);  
        LCD_WR_DATA(0x80);
这是区别之处。 调整以后,液晶屏就显示正常啦。 我判断每家公司驱动芯片虽然一样,但是其他技术参数不一样,设置上,也需要做调整。
供遇到类似的朋友,参考。本人菜鸟一个,废了两天时间才基本搞定。
回复

使用道具 举报

2

主题

16

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2019-5-8
在线时间
72 小时
发表于 2019-5-20 13:33:27 | 显示全部楼层
奋douing 发表于 2017-10-5 16:57
**** 作者被禁止或删除 内容自动屏蔽 ****

求代码,我也是3.5 9488,参照帖子改了代码,能显示函数,但不清屏了,能否分享下你的代码呢
回复

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2019-5-10
在线时间
13 小时
发表于 2019-5-23 22:29:38 | 显示全部楼层
能刷屏,不能显示字符
回复

使用道具 举报

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2019-5-10
在线时间
13 小时
发表于 2019-5-23 22:32:31 | 显示全部楼层
1201yuge 发表于 2016-1-7 10:20
那就应该是打点函数有问题

能刷屏,不能显示字符,有程序吗?学习一下,谢谢!252526213@qq.com
回复

使用道具 举报

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-4-4
在线时间
40 小时
发表于 2019-7-30 16:18:10 | 显示全部楼层
奋douing 发表于 2017-10-5 16:57
**** 作者被禁止或删除 内容自动屏蔽 ****

刷屏颜色不对还有什么办法吗?具体原因是什么
回复

使用道具 举报

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-4-4
在线时间
40 小时
发表于 2019-10-26 10:22:36 | 显示全部楼层
奋douing 发表于 2017-10-5 16:57
**** 作者被禁止或删除 内容自动屏蔽 ****

可以发一下程序吗
回复

使用道具 举报

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-4-4
在线时间
40 小时
发表于 2019-10-26 10:42:04 | 显示全部楼层
奋douing 发表于 2017-10-5 16:57
**** 作者被禁止或删除 内容自动屏蔽 ****

你好,屏幕颜色跟刷屏起始点二者只能得一个,你遇到过这种情况吗,可以发我一份程序吗577093561@qq.com
回复

使用道具 举报

6

主题

49

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2018-4-4
在线时间
40 小时
发表于 2019-10-29 13:24:54 | 显示全部楼层
pdwdzz 发表于 2017-2-23 18:18
用你的代码时颜色显示是反的,白是黑,黑是白的。

9488的寄存器有个颜色反显  0x21
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2020-2-10
在线时间
2 小时
发表于 2020-2-10 11:47:19 | 显示全部楼层
顶楼主!
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2019-1-10
在线时间
20 小时
发表于 2020-2-28 08:58:51 | 显示全部楼层
好的好的好的
回复

使用道具 举报

9

主题

121

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1394
金钱
1394
注册时间
2014-7-8
在线时间
155 小时
发表于 2020-7-2 16:13:05 | 显示全部楼层
肯定有参考价值!mark一下!
回复

使用道具 举报

2

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2019-5-1
在线时间
14 小时
发表于 2020-7-7 16:07:13 | 显示全部楼层
我按照你的初始化代码来弄了,但是屏幕还是没能正常亮,可以指点一下吗?
回复

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-5-6
在线时间
44 小时
发表于 2020-12-19 23:48:55 | 显示全部楼层
本帖最后由 pkokoc 于 2020-12-21 11:43 编辑

STM32H750VB + ILI9488 3.5寸,采用FMC驱动
目前FMC驱动正常。但是清屏仅在一个很小的区域中进行,核对了网上很多初始化代码,未看出差异
几个问题,请大佬们指导一下。
1、清屏仅在图中红色框的区域,这部分区域内刷屏颜色是正常的。但无法扩展到全屏
2、在LCD_Clear() 函数中必须增加设置X,Y范围的代码,且必须在设置光标后,否则无法刷屏
3、在LCD_Clear() 函数最后,必须用 LCD_BGR2RGB(color)转换给定的颜色值,但是color的值就是RGB565编码的,并非BGR编码的。如果不转则颜色不正常。
E:\STM32DOC\WeAct STM32H750\kdcmi\pic\01.png

  1. void LcdInit(void)
  2. {
  3.         LCD_WR_REG(0xE0); //P-Gamma
  4.         LCD_WR_DATA(0x00);
  5.         LCD_WR_DATA(0x13);
  6.         LCD_WR_DATA(0x18);
  7.         LCD_WR_DATA(0x04);
  8.         LCD_WR_DATA(0x0F);
  9.         LCD_WR_DATA(0x06);
  10.         LCD_WR_DATA(0x3A);
  11.         LCD_WR_DATA(0x56);
  12.         LCD_WR_DATA(0x4D);
  13.         LCD_WR_DATA(0x03);
  14.         LCD_WR_DATA(0x0A);
  15.         LCD_WR_DATA(0x06);
  16.         LCD_WR_DATA(0x30);
  17.         LCD_WR_DATA(0x3E);
  18.         LCD_WR_DATA(0x0F);
  19.         
  20.         LCD_WR_REG(0XE1); //N-Gamma
  21.         LCD_WR_DATA(0x00);
  22.         LCD_WR_DATA(0x13);
  23.         LCD_WR_DATA(0x18);
  24.         LCD_WR_DATA(0x01);
  25.         LCD_WR_DATA(0x11);
  26.         LCD_WR_DATA(0x06);
  27.         LCD_WR_DATA(0x38);
  28.         LCD_WR_DATA(0x34);
  29.         LCD_WR_DATA(0x4D);
  30.         LCD_WR_DATA(0x06);
  31.         LCD_WR_DATA(0x0D);
  32.         LCD_WR_DATA(0x0B);
  33.         LCD_WR_DATA(0x31);
  34.         LCD_WR_DATA(0x37);
  35.         LCD_WR_DATA(0x0F);
  36.         
  37.         /* Power Control 1 (C0h)  */
  38.   LCD_WR_REG(0XC0);   //Power Control 1
  39.   LCD_WR_DATA(0x18); //0x18 Vreg1out
  40.   LCD_WR_DATA(0x17); //0x17 Verg2out

  41.   /* Power Control 2 (C1h) */
  42.   LCD_WR_REG(0xC1);   //Power Control 2
  43.   LCD_WR_DATA(0x44); //0x41 VGH,VGL
  44.   
  45.   /* VCOM Control (C5h)  */
  46.   LCD_WR_REG(0xC5);   //Power Control 3
  47.   LCD_WR_DATA(0x00);
  48.   LCD_WR_DATA(0x1A); //0X0A 0x36 Vcom 0x1A
  49.   LCD_WR_DATA(0x80);  //0x48 0x80
  50.    



  51.   LCD_WR_REG(0x36);
  52.   LCD_WR_DATA(0x48);  //0x48  MY MX MV ML BGR MH HF VF  4A     48  08

  53.   /* Interface Pixel Format (3Ah) */
  54.   LCD_WR_REG(0x3A);   // Interface Pixel Format
  55.   LCD_WR_DATA(0x55); //* 0x55 : 16 bits/pixel  */
  56.   
  57.   //LCD_WR_REG(0x21);  //颜色反转显示

  58.   LCD_WR_REG(0XB0);   // Interface Mode Control
  59.   LCD_WR_DATA(0x00);
  60.   
  61.   /* Frame Rate Control (In Normal Mode/Full Colors) (B1h) */
  62.   LCD_WR_REG(0xB1);   //Frame rate
  63.   LCD_WR_DATA(0xA0); //0xB0 - 70Hz, 0xA0 - 60Hz
  64.   LCD_WR_DATA(0x11);  //新增  ???  此句似乎应与0X36指令后的0x3B数据共存亡,否则显示不正常。且与E0,E1设置有关
  65.   
  66.   /* Display Inversion Control (B4h) */
  67.   LCD_WR_REG(0xB4);   //Display Inversion Control
  68.   LCD_WR_DATA(0x02); //2-dot

  69.   /* Display Function Control (B6h)  */
  70.   LCD_WR_REG(0XB6);   //RGB/MCU Interface Control
  71.   LCD_WR_DATA(0x02); //MCU RGB
  72.   LCD_WR_DATA(0x02); //Source,Gate scan dieection
  73.   LCD_WR_DATA(0x3B);  //新增
  74.   
  75.   /* Entry Mode Set (B7h)  */
  76.   LCD_WR_REG(0XB7);   //新增
  77.   LCD_WR_DATA(0xC6);  //新增
  78.   
  79.   /* HS Lanes Control (BEh) */
  80.   LCD_WR_REG(0XBE);   //新增
  81.   LCD_WR_DATA(0x00);  //新增
  82.   LCD_WR_DATA(0x04);  //新增

  83.   /* Set Image Function (E9h)  */
  84.   LCD_WR_REG(0XE9);    // Set Image Function
  85.   LCD_WR_DATA(0x00);  //disable 24 bit data input

  86.   /* Adjust Control 3 (F7h)  */
  87.   LCD_WR_REG(0xF7);    // Adjust Control
  88.   LCD_WR_DATA(0xA9);
  89.   LCD_WR_DATA(0x51);
  90.   LCD_WR_DATA(0x2C);  //新增
  91.   LCD_WR_DATA(0x82);  //新增
  92.         
  93.   /* Sleep Out (11h) */
  94.         LCD_WR_REG(0x11);
  95.         HAL_Delay(120);
  96.    
  97.   /* Display On */
  98.         LCD_WR_REG(0x29);        
  99.   HAL_Delay(120);
  100.   
  101.   LCD_Display_Dir(0);     //设置屏的方向
  102. }

  103. //设置LCD显示方向
  104. //dir:0,竖屏;1,横屏
  105. void LCD_Display_Dir(uint8_t dir)   
  106. {   
  107.     if(dir==0)          //竖屏   
  108.     {   
  109.         lcddev.dir=0;   //竖屏   
  110.    
  111.         lcddev.wramcmd=0X2C;   
  112.         lcddev.setxcmd=0X2A;   
  113.         lcddev.setycmd=0X2B;        
  114.    
  115.         lcddev.width=KLCD_WIDTH;   
  116.         lcddev.height=KLCD_HEIGHT;            
  117.     }else               //横屏   
  118.     {                     
  119.         lcddev.dir=1;   //横屏   
  120.         lcddev.wramcmd=0X2C;   
  121.         lcddev.setxcmd=0X2A;   
  122.         lcddev.setycmd=0X2B;        
  123.         lcddev.width=KLCD_HEIGHT;   
  124.         lcddev.height=KLCD_WIDTH;            
  125.            
  126.     }   
  127.     LCD_Scan_Dir(DFT_SCAN_DIR); ////扫描方向 L2R_U2D  0 //从左到右 从上到下
  128. }  

  129. //清屏                                                                                                   
  130. void LCD_Clear(uint16_t color)                                                                                                                                                                                                                                                                                             
  131. {                                                                                                        
  132.     uint32_t index=0;                                                                                    
  133.     uint32_t totalpoint=lcddev.width;                                                                    
  134.     totalpoint*=lcddev.height;                                                                           
  135.                                                                                                          
  136.     //设置光标位置                                                                                       
  137.     LCD_SetCursor(0x00,0x0000);
  138.                                                                              
  139.     //设定显示窗口x方向显示范围                                                                          
  140.     ILI9488_WriteCmd(0X2A);                                                                              
  141.     ILI9488_WriteParam(0x00);                                                                           
  142.     ILI9488_WriteParam(0x00);                                                                           
  143.     ILI9488_WriteParam(0x01);                                                                           
  144.     ILI9488_WriteParam(0x37);                                                                           
  145.                                                                                                          
  146.     HAL_Delay(1);                                                                                       
  147.                                                                                                          
  148.     //设定显示窗口Y方向显示范围                                                                          
  149.     ILI9488_WriteCmd(0X2B);                                                                              
  150.     ILI9488_WriteParam(0x00);                                                                           
  151.     ILI9488_WriteParam(0x00);                                                                           
  152.     ILI9488_WriteParam(0x01);                                                                           
  153.     ILI9488_WriteParam(0xDF);
  154.                                                                                                                                                                                                                                                                               
  155.     LCD_WriteRAM_Prepare();                                                                              
  156.    
  157.     for(index=0;index<totalpoint;index++)                                                               
  158.     {                                                                                                   
  159.         LCD->LCD_RAM=LCD_BGR2RGB(color);                                                                 
  160.         //LCD->LCD_RAM=(color);                                                                          
  161.     }                                                                                                   
  162. }
复制代码
01.png
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2019-10-15
在线时间
3 小时
发表于 2020-12-21 13:54:46 | 显示全部楼层
LCD的坐标设置函数改成这样试试:
我用F103的板子测试过,是可以解决问题的。
void LCD_SetCursor(u16 Xpos,u16 Ypos)
{
    LCD_WR_REG(lcddev.setxcmd);
    LCD_WR_DATA(Xpos>>8);
    LCD_WR_DATA(0xFF & Xpos);  
    LCD_WR_DATA(0x01);
    LCD_WR_DATA(0x3F);

    LCD_WR_REG(lcddev.setycmd);
    LCD_WR_DATA(Ypos>>8);
    LCD_WR_DATA(0xFF & Ypos);  
    LCD_WR_DATA(0x01);
    LCD_WR_DATA(0xDF);
}
回复

使用道具 举报

3

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
168
金钱
168
注册时间
2017-5-6
在线时间
44 小时
发表于 2020-12-21 15:48:25 | 显示全部楼层
lovegreatly 发表于 2020-12-21 13:54
LCD的坐标设置函数改成这样试试:
我用F103的板子测试过,是可以解决问题的。
void LCD_SetCursor(u16 Xp ...

这个代码X,Y的起始点与终止点不同,实际是设置显示范围的,并非设置光标。经过调试,可刷新的范围增大了一些,如视频所示,还是无法全屏。
方便的话能否把 ILI9488寄存器初始化,控制显示方向,扫描方向部分的代码帖出来,比较一下,谢谢。

回复

使用道具 举报

13

主题

250

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2248
金钱
2248
注册时间
2019-8-7
在线时间
364 小时
发表于 2020-12-28 14:09:37 | 显示全部楼层
奇怪 你们遇到的这个写不了字符的问题我没有遇到,倒是设置了窗口显示范围后我的摄像头刷新有问题
回复

使用道具 举报

0

主题

8

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3772
金钱
3772
注册时间
2019-7-20
在线时间
306 小时
发表于 2021-2-7 02:29:18 | 显示全部楼层
我也出现了这个问题
回复

使用道具 举报

0

主题

1

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2021-5-29
在线时间
13 小时
发表于 2021-6-8 10:44:38 | 显示全部楼层
顶!!!
回复

使用道具 举报

0

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
63
金钱
63
注册时间
2017-11-9
在线时间
12 小时
发表于 2022-6-13 15:50:31 | 显示全部楼层
感谢楼主!正在调试这个LCD.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-26 23:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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