stm32f1-LCDILI9341实现字符串显示

在学习freertos过程中,没有串口线,导致没有办法实践,随后将ili9341驱动,发现野火没有提供字符串格式输出,导致没有办法输出表格。遂自行编写一个简陋代码,能够将LCD屏幕当作打印输出。效果如下

 本文实现ILI9341屏幕显示printf格式输出字符串(%s)的功能。

void wprintf(char* p, char* string)
{
	uint16_t linenum=0;
	uint8_t testCNT1 = 0;//计数器,防止超过屏幕显示
	char dispBuffString[200];	//保存有限字符串
	sprintf(dispBuffString,p,string);
	linenum=LINE(testCNT1++);
	ILI9341_DispStringLine_EN(&linenum,dispBuffString);
	if(testCNT1>19) 
	{
		testCNT1=0;
	}

}

/**
 * @brief  在 ILI9341 显示器上显示英文字符串
 * @param  line :在特定扫描方向下字符串的起始Y坐标
  *   本参数可使用宏LINE(0)、LINE(1)等方式指定文字坐标,
  *   宏LINE(x)会根据当前选择的字体来计算Y坐标值。
	*		显示中文且使用LINE宏时,需要把英文字体设置成Font8x16
 * @param  pStr :要显示的英文字符串的首地址
 * @note 可使用LCD_SetBackColor、LCD_SetTextColor、LCD_SetColors函数设置颜色
 * @retval 无
 */
void ILI9341_DispStringLine_EN (  uint16_t* line,  char * pStr )
{
	uint16_t usX = 0;
	while ( * pStr != '\0' )
	{
		if ( ( usX - ILI9341_DispWindow_X_Star + LCD_Currentfonts->Width ) > LCD_X_LENGTH )
		{
			usX = ILI9341_DispWindow_X_Star;
			*line += LCD_Currentfonts->Height;
		}
		
		if ( ( *line - ILI9341_DispWindow_Y_Star + LCD_Currentfonts->Height ) > LCD_Y_LENGTH )
		{
			usX = ILI9341_DispWindow_X_Star;
			*line = ILI9341_DispWindow_Y_Star;
		}
		while(* pStr==' '||* pStr==0x09||* pStr==0x0D||* pStr==0x0A)
		{
			if(* pStr==' ')
			{
				usX += 4;
			}

			if(* pStr==0x09)
			{
				usX += (LCD_Currentfonts->Width)*2;
			}

			if(* pStr==0x0D)
			{
				usX = ILI9341_DispWindow_X_Star;
				*line += LCD_Currentfonts->Height;				
			}
			pStr ++;
		}
		if(* pStr != '\0')
		{
			ILI9341_DispChar_EN ( usX, *line, * pStr);
			
			pStr ++;
			
			usX += LCD_Currentfonts->Width;
		}
		
	}
	
}

若要实现滚动显示,将    uint8_t testCNT1 = 0;设置为全局变量即可。

注意要是字符串太大则需要修改dispBuffString,防止溢出。(懒的写判断了)

示例:

vTaskGetRunTimeStats( taskbuffer ); //获取freertos运行时间表格,也可以自己写字符串
wprintf("%s\r\n",taskbuffer);

做的不是特别好,注释也没有写见谅(懒),代码有待优化,例如水平制表符算法(tab)没有实现,指示增加多行空格。

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值