硬汉嵌入式论坛

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

[emWin] 字符字体颜色只输出红色

[复制链接]

5

主题

35

回帖

50

积分

初级会员

积分
50
发表于 2023-8-4 11:38:31 | 显示全部楼层 |阅读模式
环境:
硬件:LT7683

emwin:V6.16
LCD:800X480 RGB
接口:FSMC8080 16bit->RGB M565

现象:字体只显示红色,不能显示其他颜色;彩条能正常输出
颜色设置(0x0000FF)能输出正确的字体,更换(0xFF0000)输出不正确;
红色正常显示
1.jpg
蓝色只有两个点出现,其余字体没有出现
2.jpg

LT7683的EMwin驱动,主要依照RA8875修改
static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex)
LT768_DrawPixel(xPhys, yPhys, PixelIndex);

static LCD_PIXELINDEX _GetPixelIndex(GUI_DEVICE * pDevice, int x, int y)
PixelIndex = LT768_GetPixel(xPhys, yPhys);

static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1)
PixelIndex = LCD__GetColorIndex();

LT768_DrawSquare_Fill(x0, y0, x1, y1, PixelIndex);  


调用的画像素和读取像素函数,经过测试能够正确读取和写入
[C] 纯文本查看 复制代码
void LT768_DrawPixel(
 unsigned short x			// x坐标
,unsigned short y			// y坐标
,unsigned short Color		// 像素颜色
)
{
	Goto_Pixel_XY(x, y);

	pstLt768xDev2->writeReg(0x04);

	pstLt768xDev2->writeDataPixel(Color & 0xF800);
	Check_Mem_WR_FIFO_not_Full();
	
	pstLt768xDev2->writeDataPixel(Color & 0x07E0);
	Check_Mem_WR_FIFO_not_Full();
	
	pstLt768xDev2->writeDataPixel(Color & 0x001F);
	Check_Mem_WR_FIFO_not_Full();

	Check_Mem_WR_FIFO_Empty();
}

unsigned short LT768_GetPixel(
 unsigned short x			// x坐标
,unsigned short y			// y坐标
)
{
	unsigned short tmpColor = 0;
	unsigned short tmpRed = 0;
	unsigned short tmpGreen = 0;
	unsigned short tmpBlue = 0;

	Goto_Pixel_XY(x, y);

	pstLt768xDev2->writeReg(0x04);
	lt768x_LibDelayMs(1);
	
	pstLt768xDev2->readData();			//发送空周期	
	lt768x_LibDelayMs(1);
	
	tmpRed = pstLt768xDev2->readData();	
	Check_Mem_WR_FIFO_not_Full();

	tmpGreen = pstLt768xDev2->readData();	
	Check_Mem_WR_FIFO_not_Full();

	tmpBlue = pstLt768xDev2->readData();	
	Check_Mem_WR_FIFO_not_Full();

	Check_Mem_WR_FIFO_Empty();

	tmpColor = (tmpRed & 0xF800) | (tmpGreen & 0x07E0) | (tmpBlue & 0x001F);

	return tmpColor;
}


程序
[C] 纯文本查看 复制代码

/* 初始 emWin */
	GUI_Init();



/* 使能窗口使用内存设备 */
    WM_SetCreateFlags(WM_CF_MEMDEV);
    GUI_SetBkColor(GUI_BLACK);
    GUI_Clear();


/* 设置前景色、字体大小 */
	  GUI_SetColor(0xFF0000);
	  GUI_SetFont(&GUI_Font24B_ASCII);
	  GUI_DispStringHCenterAt("COLOR_ShowColorBar - Sample", 160, 5);

//	  /* 显示色条 */
	  _DemoShowColorBar();


while(1) 
{
	GUI_Delay(10);
}



请问造成这个问题是在LT7683的底层函数、LT7683的EMWIN接口上、还是EMWIN哪里没有设置正确呢?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106882
QQ
发表于 2023-8-4 15:11:06 | 显示全部楼层
1  emWin底层仅做打点和读点操作吗,不做任何其他的优化。
2  然后你的emWin库应该是用的BGR格式的吧,换个其他的,比如0x00FF00是否正常。
回复

使用道具 举报

5

主题

35

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2023-8-4 15:21:04 | 显示全部楼层
测试了应该是RGB的,用565会颜色翻转


把背景颜色设置为黄色后
GUI_SetBkColor(GUI_YELLOW);

字体设置为除了红色都输出为黑色,造成原来设置背景颜色看不到字体
图片是设置为蓝色的
GUI_SetColor(GUI_BLUE);

3.jpg

画矩形那里调用了他们的库函数
LT768_DrawSquare_Fill(x0, y0, x1, y1, PixelIndex);

画线的用他们的函数有点问题,所以暂时用回原代码


回复

使用道具 举报

5

主题

35

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2023-8-4 15:25:13 | 显示全部楼层
这里是EMWIN驱动接口函数的代码
GUIDRV_Template.rar (4.41 KB, 下载次数: 0)
回复

使用道具 举报

5

主题

35

回帖

50

积分

初级会员

积分
50
 楼主| 发表于 2023-8-5 12:00:55 | 显示全部楼层
问题点大概找到在哪里了,是那个绘画像素的函数调用问题
static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex)
下面函数
LT768_DrawPixel(xPhys, yPhys, PixelIndex);

[C] 纯文本查看 复制代码
void LT768_DrawPixel(
 unsigned short x			// x坐标
,unsigned short y			// y坐标
,unsigned long Color		// 像素颜色
)
{
//	Canvas_Image_Start_address(0);//定义读写sdram图层起始地址
	Goto_Pixel_XY(x, y);

	pstLt768xDev2->writeReg(0x04);
	while(LT768X_WaitStatus());

	pstLt768xDev2->writeDataPixel(Color & 0xF800);
	while(LT768X_WaitStatus());
	Check_Mem_WR_FIFO_not_Full();
	
	pstLt768xDev2->writeDataPixel(Color & 0x07E0);
	while(LT768X_WaitStatus());
	Check_Mem_WR_FIFO_not_Full();
	
	pstLt768xDev2->writeDataPixel(Color & 0x001F);
	while(LT768X_WaitStatus());
	Check_Mem_WR_FIFO_not_Full();

	Check_Mem_WR_FIFO_Empty();
}


只传输到了第一个函数,刚好是红色的像素;后面绿和蓝应该是没有写入成功造成只显示红色,其余为黑色,应为黑色是0x000000
现在不知道是FMC连续读写造成的,还是他们的芯片处理时间或其他问题;
因为单独调用
LT768_DrawPixel(xPhys, yPhys, PixelIndex);
画图没有颜色问题
调用EMWIN的
static void _SetPixelIndex(GUI_DEVICE * pDevice, int x, int y, LCD_PIXELINDEX PixelIndex)
才会出现这样的问题

尝试在emwin的函数直接
LT768_DrawPixel(xPhys, yPhys, 0x0000ff);
不会出现蓝色,字体和背景都为黑色,只有末尾出现蓝色竖线

现在只能找一下FMC是否满足时序,如果满足了,剩下只能问问厂家了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 18:06 , Processed in 0.285835 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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