OpenHarmony开源社区
直播中

chenzd

3年用户 26经验值
擅长:可编程逻辑
私信 关注
[资料]

【开鸿智谷NiobeU4开发板免费试用体验】3. GUI移植_lcd字库移植

  1. GUI移植_lcd字库移植

1.前言:

GUI含义为图形用户接口,与之对应的是CLI:命令行接口;在嵌入式系统中两种接口均各有优劣,但在产品端的角度,良好的图形用户接口是必要的,所以衍生出了许多GUI库,可供选择,选用成熟的GUI可以节省大量的开发时间,增强良好的用户体验。在进行GUI移植前,需要先验证lcd库的驱动是否正常。

项目概述:验证过程中移植了常用的字符库用于显示常见的ASCALL码,显示字符效果如下:显示屏.png

2.软件调试:

2.1高效工具:

2.1.1bin文件拷贝脚本

2.1.2图片文件拷贝脚本
bash.png
bin.png
picture.png

2.2源代码

引用字库.h文件,添加接口api,等源码如下:

#include "font.h"

//LCD的画笔颜色和背景色

uint16_t POINT_COLOR=BLACK; //画笔颜色

uint16_t BACK_COLOR=WHITE; //背景色

//在指定位置显示一个字符

//x,y:起始坐标

//num:要显示的字符:" "--->"~"

//size:字体大小 12/16/24

//mode:叠加方式(1)还是非叠加方式(0)

void LCD_ShowChar(uint8_t x,uint8_t y,uint8_t num,uint8_t size,uint8_t mode)

{

uint8_t temp,t1,t;

uint8_t y0=y;

uint8_t csize=(size/8+((size%8)?1:0))*(size/2);		//得到字体一个字符对应点阵集所占的字节数	

num=num-' ';//得到偏移后的值(ASCII字库是从空格开始取模,所以-' '就是对应字符的字库)

for(t=0;t<csize;t++)

{   

	if(size==12)temp=asc2_1206[num][t]; 	 	//调用1206字体

	else if(size==16)temp=asc2_1608[num][t];	//调用1608字体

	else if(size==24)temp=asc2_2412[num][t];	//调用2412字体

	// else return;

    								//没有的字库

	for(t1=0;t1<8;t1++)

	{			    

		if(temp&0x80)lcd_draw_point(x,y,POINT_COLOR);

		else if(mode==0)lcd_draw_point(x,y,BACK_COLOR);

		temp<<=1;

		y++;

		// if(y>=lcddev.height)return;		//超区域了

		if((y-y0)==size)

		{

			y=y0;

			x++;

			// if(x>=lcddev.width)return;	//超区域了

			break;

		}

	}  	 

}

}

//显示字符串

//x,y:起点坐标

//width,height:区域大小

//size:字体大小

//*p:字符串起始地址

void LCD_ShowString(uint8_t x,uint8_t y,uint16_t width,uint16_t height,uint8_t size,uint8_t *p)

{

uint8_t x0=x;



width+=x;

height+=y;

while((*p<='~')&&(*p>=' '))//判断是不是非法字符!

{       

    if(x>=width){x=x0;y+=size;}

    if(y>=height)break;//退出

    LCD_ShowChar(x,y,*p,size,0);

    x+=size/2;

    p++;

}

}

void GUI_LcdTest(void)

{

LcdInit();



while (1) 

{

    

    LCD_ShowString(10,10,210,24,24,"NiobeU4^_^");	

    LCD_ShowString(10,50,200,16,16,"TFTLCD TEST");

    LCD_ShowString(10,80,200,12,12,"2022/10/18");	 

    LCD_ShowString(10,110,200,12,12,"By chenzhendong");	      					 

    // DisplayTKR();

    LcdPush();



    LOS_Msleep(PIC_SPEED);

    

}

}

OHOS_APP_RUN(GUI_LcdTest);

2.3文件目录结构如下图所示:文件结构.png

3硬件接入:

使用开鸿智谷NiobeU4开发板套件,无需修改或添加任何元器件,即可完成本实验。

4实际效果:

实际效果如下图所示:
实际效果.png

5结束:

Lcd驱动正常,已经具备GUI移植的前提条件,下一章将继续介绍GUI的移植。

更多回帖

发帖
×
20
完善资料,
赚取积分