目录
字模提取
工具资源下载:
链接:https://pan.baidu.com/s/1BF8lJLmM-V-vWrl2F6Cd7Q?pwd=mx1y
提取码:mx1y
使用方法:
1.打开软件中的PCtoLCD2002.exe
2.点击顶端的 “选项” 按钮
3.进行如下设置
点阵格式(取模时候字体的点,用1还是用0)
取模走向(决定取模时,靠左/靠上的点是高位还是低位)
自定义格式(一般选择C51)
取模方式(和取模走向共同决定取模的数据走向)
*/一般要删除“行前缀”和“行后缀”里的两个大括号/*
4.选择字形,并输入内容生成字模
5.将保存的字模文件中的数据复制出来,添加到我们的代码中。
格式类似如下,部分地方适情况修改。例:
6.(此项按照个人情况参考)将提取后的字模用于STM32F401开发板
代码 .c .h文件下载参考:
链接:https://pan.baidu.com/s/1Zu-kVByL_ny9RFGOgvUTaA?pwd=j4tl
提取码:j4tl
首先:在Keil uVision5中新建一个.c结尾的文件,专门存放我们与lcd有关的函数
以下展示部分主要函数:
/* ********************************************************************** 画点函数 ********************************************************************** */ void LCD_DrawPoint(u16 x,u16 y,u16 color) { st7789vm_PostionSet(x,y,x,y); st7789vm_write_Data(color); } /* ********************************************************************** 图片显示 ********************************************************************** */ void Display_Pic(u16 x,u16 y,u8 *pic) { u16 i; u16 w; u16 h; w = pic[2] << 8 | pic[3]; h = pic[4] << 8 | pic[5]; st7789vm_PostionSet(x,y,x+w,y+h); for(i=0;i<w*h;i++) { st7789vm_write_Data(pic[8+i*2] << 8| pic[8+i*2+1]); } } /* ********************************************************************** 显示一个字符 ********************************************************************** */ void Single_Char_Display(u16 x,u16 y,u16 font_color,u16 bg_color,u16 size,u8 *eng) { u8 i,j; if(size == 16) { for(i=0;i<16;i++)//确定字符有多少行 { for(j=0;j<8;j++)//确定一行里有多少位 { if(eng[i] & 0x80 >> j) { LCD_DrawPoint(x + j,y + i,font_color); } else { LCD_DrawPoint(x + j,y + i,bg_color); } } } } else if(size == 24) { u32 buf; for(i=0;i<24;i++)//确定字符有多少行 { buf = eng[i*2] << 8 | eng[i*2 + 1]; for(j=0;j<16;j++)//确定一行里有多少位 { if(buf & 0x8000 >> j) { LCD_DrawPoint(x + j,y + i,font_color); } else { LCD_DrawPoint(x + j,y + i,bg_color); } } } } } /* ********************************************************************** 显示一个汉字 ********************************************************************** */ void Single_Chi_Display(u16 x,u16 y,u16 font_color,u16 bg_color,u16 size,u8 *eng) { u16 i,j; u32 buf; for(i=0;i<32;i++)//确定字符有多少行 { buf = eng[i*4] << 24 | eng[i*4 + 1] << 16 | eng[i*4 + 2] << 8 | eng[i*4 + 3]; for(j=0;j<32;j++)//确定一行里有多少位 { if(buf & 0x80000000 >> j) { LCD_DrawPoint(x + j,y + i,font_color); } else { LCD_DrawPoint(x + j,y + i,bg_color); } } } }
其次:再新建一个.h结尾的函数,专门申明和定义我们的 lcd.c 里的函数
最后:在主函数中调用显示文字的函数,并赋上基础值。
例:
st7789vm_init();
*//*
Single_Char_Display(0,0,0x0000,0xffff,16,eng);
Single_Char_Display(0,16,0x0000,0xffff,24,eng24);
Single_Chi_Display(0,48,0x0000,0xffff,32,chi);
图片转码
工具资源下载:
图片转码 链接:https://pan.baidu.com/s/1W339tTGl-TkKyv9sEZsCdg?pwd=mmrp
提取码:mmrp
GIF分解工具 链接:https://pan.baidu.com/s/1OmOT1ZurG0C-ZjBCJbJDgg?pwd=wlzi
提取码:wlzi
使用方法:
1.直接导入图片(如果导入的图片有问题,可以选择其他的文件格式。亲测 jpg 格式可用)
2.按个人需求调整扫描模式、输出灰度、图片尺寸(注意是否勾选了 “高位在前” 的选项)
3.保存扫描并转码后的文件(图片和字符相比,数据大太多。ctrl+A全选再使用吧)
4.(此项按照个人情况参考)将提取后的字模用于STM32F401开发板
代码 .c .h文件下载参考:
链接:https://pan.baidu.com/s/1RdQOoJZDm_mw-bldfENCsQ?pwd=anfe
提取码:anfe
首先:在Keil uVision5中新建一个.c结尾的文件,专门存放我们与lcd有关的函数
以下展示部分主要函数:
lcd.c
/*
**********************************************************************
画点函数
**********************************************************************
*/
void LCD_DrawPoint(u16 x,u16 y,u16 color)
{
st7789vm_PostionSet(x,y,x,y);
st7789vm_write_Data(color);
}
/*
**********************************************************************
图片显示
**********************************************************************
*/
void Display_Pic(u16 x,u16 y,u8 *pic)
{
u16 i;
u16 w;
u16 h;
w = gImage_123123[2] << 8 | gImage_123123[3];
h = gImage_123123[4] << 8 | gImage_123123[5];
st7789vm_PostionSet(x,y,x+w,y+h);
for(i=0;i<w*h;i++)
{
st7789vm_write_Data(gImage_123123[8+i*2] << 8| gImage_123123[8+i*2+1]);
}
}
其次:新建一个bmp.c的文件,存放我们导出来的图片数据
再次:再新建两个.h结尾的函数,分别申明和定义我们的 lcd.c和 bmp.c 里的函数
最后:在主函数中调用显示文字的函数,并赋上基础值。
例:
st7789vm_init();
*//*
Display_Pic(0,0,(u8 *)gImage_123123);