STM32F429挑战者 LCD显示字符后面出现白色竖线是什么原因造成的?

STM32F429挑战者 LCD显示字符后面出现白色竖线是什么原因造成的?

首先看下错误现象
在这里插入图片描述
每行行尾出现竖直亮线。出现的原因是我使用的颜色格式为RGB1555,显示函数里面却将显存地址强制为32位。

//功能:			显示一个 ASCII 字符到LCD
//参数:Row 		这里可以理解为要显示字符的行位置
//参数:Column 	这里可以理解为要显示字符的列位置
//参数:Ascii	要显示字符的数组数据指针
void LCD_DispChar(uint16_t Row, uint16_t Column, char Ascii)
{
	const unsigned short *Chr = &LCD_Currentfonts->table[(Ascii - 32) * LCD_Currentfonts->Height]; //这里要减32是因为当前程序使用的字模数据是从ASCII的第32个字符开始取模的
	uint16_t index = 0, counter = 0;
	uint32_t  Xaddress = 0;
	
	Xaddress = CurrentFrameBuffer + LCD_PIXEL_SIZE*(Row*LCD_PIXEL_WIDTH + Column);	
	
	for(index = 0; index < LCD_Currentfonts->Height; index++)
	{
		for(counter = 0; counter < LCD_Currentfonts->Width; counter++)
		{
			if((((Chr[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> counter)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
			(((Chr[index] & (0x01 << counter)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
			{
				/* Write data value to all SDRAM memory */
				*(__IO uint32_t*) Xaddress = CurrentBackColor;
			}
			else
			{
				/* Write data value to all SDRAM memory */
				*(__IO uint32_t*) Xaddress = CurrentTextColor;
			}		
			Xaddress += LCD_PIXEL_SIZE;  //画完当前像素,就移动到下一个像素点,内存中就要移动一个像素占据的字节数
		}
		Xaddress += LCD_PIXEL_SIZE*(LCD_PIXEL_WIDTH - LCD_Currentfonts->Width);  //画完字模的一行,移动到下一行显示空间
	}
}

上面*(__IO uint32_t*) 中的uint32_t位置。

改为uint16_t之后显示正常:

if((((Chr[index] & ((0x80 << ((LCD_Currentfonts->Width / 12 ) * 8 ) ) >> counter)) == 0x00) &&(LCD_Currentfonts->Width <= 12))||
			(((Chr[index] & (0x01 << counter)) == 0x00)&&(LCD_Currentfonts->Width > 12 )))
			{
				/* Write data value to all SDRAM memory */
				*(__IO uint16_t*) Xaddress = CurrentBackColor;
			}
			else
			{
				/* Write data value to all SDRAM memory */
				*(__IO uint16_t*) Xaddress = CurrentTextColor;
			}		

在这里插入图片描述

由于ASCII字符与汉字字符的显示函数是分开实现的,因此还需要将汉字显示的函数相应位置也改为uint16_t。

结论:像素格式是16位,显存地址格式就应该为16位;像素格式是32位,显存地址格式就应该为32位;使用16位的像素格式,却把显存地址格式设置为32位,会出现竖直亮线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值