硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1025|回复: 7
收起左侧

LCD显示疑问

[复制链接]

1

主题

4

回帖

7

积分

新手上路

积分
7
发表于 2024-8-29 16:40:57 | 显示全部楼层 |阅读模式
最近拿到同事一份代码,看见显示方式很奇怪,原理图看不出啥驱动方式,同事说这个只能显示R,G,B三种单色颜色,从函数API调用,貌似用的是SPI驱动方式,且是使用全局缓冲进行刷屏,类似常见在小屏幕的那种方式。由于硬件需求改版为8080口,并且换了一个RGB565屏幕,原来的是RGB888的,我在原代码上上改写驱动,总是显示异常,见惯了常用的那种显示方式,实在不清楚这个咋搞,屏幕都是272*480的,希望各路大神能够赐教解答

原理图

原理图

原来代码

原来代码

现在的刷新函数

现在的刷新函数
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2024-8-29 17:21:27 | 显示全部楼层
你们现在换成了8080接口方式的565显示屏,不应该使用FSMC驱动吗,不知道楼主描述是不是这个意思。
回复

使用道具 举报

7

主题

146

回帖

167

积分

初级会员

积分
167
发表于 2024-8-30 10:03:27 | 显示全部楼层
和驱动方式无关吧,你原来是单色,现在也要用单色显示才对,原来是GPIO控制颜色,你现在是FMSC写颜色
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2024-8-30 14:20:17 | 显示全部楼层
eric2013 发表于 2024-8-29 17:21
你们现在换成了8080接口方式的565显示屏,不应该使用FSMC驱动吗,不知道楼主描述是不是这个意思。

是的,现在换成FSMC方式,函数接口也变成上面那种
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2024-8-30 14:23:05 | 显示全部楼层
mygod 发表于 2024-8-30 10:03
和驱动方式无关吧,你原来是单色,现在也要用单色显示才对,原来是GPIO控制颜色,你现在是FMSC写颜色

你这么一说,貌似有道理,但是按理说他是用全局缓冲的的方式,最后调用写函数刷新,我改成自己现在的写函数就行了吧,如果不行,那现在这种FSMC接口,怎么写单色呢
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2024-8-30 14:26:08 | 显示全部楼层
[C] 纯文本查看 复制代码
static uint8_t framebuffer[273][60];

void LCD_setbackground(void)
{
	uint16_t i=0, j=0;
	/* SET BACKGROUND COLOR*/
	for(i=0; i<32; i++)
	{
		for(j=0; j<60; j++)
			framebuffer[i][j] = 0xff;
	}
	
	for(i=0; i<240; i++)
	{

		for(j=0; j<60; j++)
		{
			framebuffer[32+i][j] = 0x00;
		}
	}
	
	ColorMode = RED_BLUE;
}

void LCD_setbackground_Blue(void)
{
	uint16_t i=0, j=0;
	/* SET BACKGROUND COLOR*/
	for(i=0; i<272; i++)
	{
		for(j=0; j<60; j++)
			framebuffer[i][j] = 0x00;
	}
	ColorMode = BLUE;
}

void LCD_pset(UG_S16 x,UG_S16 y,UG_COLOR c)
{
	uint16_t n,m;
	
	if(y>272 || x>480) return;
	
	n = x/8;
	m = x%8;
	m = 7 - m;
	
	if(ColorMode==RED_BLUE)
	{
		if(c==1)
		{
			if(y<32)
			{
				framebuffer[y][n] &= ~(1<<m);
			}
			else
			{
				framebuffer[y][n] |= 1<<m;	
			}
		}
		else 
		{
			if(y<32)
			{
				framebuffer[y][n] |= 1<<m;
			}
			else
			{
				framebuffer[y][n] &= ~(1<<m);	
			}
			
		}
	}
	else if(ColorMode==BLUE)
	{
		if(c==1)
		{
			framebuffer[y][n] |= 1<<m;	
		}
		else 
		{
			framebuffer[y][n] &= ~(1<<m);	
		}
	}
}

#define WHITE_COLOR           0xFFFF
#define BLACK_COLOR           0x0000
#define BLUE_COLOR            0x001F
#define RED_COLOR             0xF800
#define GREEN_COLOR           0x07E0
#define YELLOW_COLOR          0xFFE0 



大概代码片段如上
回复

使用道具 举报

1

主题

4

回帖

7

积分

新手上路

积分
7
 楼主| 发表于 2024-9-3 10:59:56 | 显示全部楼层
没人知道怎么解决吗
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115653
QQ
发表于 2024-9-4 08:33:34 | 显示全部楼层
Kamyzhao 发表于 2024-9-3 10:59
没人知道怎么解决吗

不清楚了。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-10 04:03 , Processed in 0.311809 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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