软件下载
通过网盘分享的文件:PCtoLCD2002.rar
链接: https://pan.baidu.com/s/1eRVhcjShOafdEleocABhVg 提取码: 2002
BMP图片

1:字体配置
字体宽度和高度配置。写显示函数时候需要知道,英文和数字设定的字宽只有一半
所以看到的只有14*28


2:手画BMP图片
模式---选择图片模式
文件-新建-设置宽*高

手画图片注意蓝色格子才是显示前景,黑色是背景,
鼠标左键为添加,鼠标右键为删减
需要知道图片大小,写函数需要用到

显示图片

3:添加BMP图片
选择文件-打开-选择BMP图片-生成字模


如果DEMO函数中没有显示合适的函数,可以自己写,下面提供参考函数,写出显示自定义字体大小,和自定义图片大小的函数。局部刷新等函数。
4:演示视频
演示视频
5:代码实现
由于我这个是51的主控8051核时钟中有几MHZ,用模拟SPI的方式。实际只有213KHZ,本视频仅为演示使用。
5.2:显示图片函数和局部刷新
/**********************************************************************************************************
**函数名称 : Picture_display
**函数描述 :显示BMG格式14*28
**输 入 :None
**输 出 :None
**********************************************************************************************************/
void Picture_display(unsigned int x,unsigned int y,unsigned long color,const unsigned char *point,const unsigned char Sel)
{
unsigned int row,col,i;
unsigned char temp;
unsigned char byte_per_line = 2; //总字节 = 高度 × ((宽度 + 7) / 8)
unsigned char bitt;
TFT_SEND_CMD(0x2A);
TFT_SEND_DATA(x>>8);
TFT_SEND_DATA(x);
TFT_SEND_DATA((x+14-1)>>8);
TFT_SEND_DATA(x+14-1);
TFT_SEND_CMD(0x2B);
TFT_SEND_DATA(y>>8);
TFT_SEND_DATA(y);
TFT_SEND_DATA((y+28-1)>>8);
TFT_SEND_DATA(y+28-1);
TFT_SEND_CMD(0x2C);
if(Sel)
{
for(row=0; row<28; row++) //遍历高
{
for(col=0; col<byte_per_line; col++)
{
temp = *point++;
for(bitt=0; bitt<8; bitt++) //设定像素点
{
if((col*8+bitt)>=14) break; //遍历宽
if(temp & 0x01) //LSB
{
TFT_SEND_DATA(color>>16);
TFT_SEND_DATA(color>>8);
TFT_SEND_DATA(color);
}
else
{
TFT_SEND_DATA(0);
TFT_SEND_DATA(0);
TFT_SEND_DATA(0);
}
temp >>= 1;
}
}
}
}
else
{
for(i=0; i<14*28; i++)
{
TFT_SEND_DATA(0);
TFT_SEND_DATA(0);
TFT_SEND_DATA(0);
}
}
}
置1显示图片,置0局部清空图片,
设定图片或字体时注意查看像素大小

5.3:显示字体
void display_char52_52_clear(unsigned int x,unsigned int y)
{
unsigned int row,col;
unsigned char bitt,temp;
unsigned char byte_per_line = 4; //byte_per_line = (26 + 7) / 8 = 33 / 8 = 4 byte
TFT_SEND_CMD(0x2A);
TFT_SEND_DATA(x>>8);
TFT_SEND_DATA(x);
TFT_SEND_DATA((x+26-1)>>8);
TFT_SEND_DATA(x+26-1);
TFT_SEND_CMD(0x2B);
TFT_SEND_DATA(y>>8);
TFT_SEND_DATA(y);
TFT_SEND_DATA((y+52-1)>>8);
TFT_SEND_DATA(y+52-1);
TFT_SEND_CMD(0x2C);
for(row=0; row<52; row++) //高
{
for(col=0; col<byte_per_line; col++)
{
for(bitt=0; bitt<8; bitt++) //像素 8
{
if((col*8+bitt)>=26) break; //宽
TFT_SEND_DATA(0);
TFT_SEND_DATA(0);
TFT_SEND_DATA(0);
temp >>=1;
}
}
}
}
和显示图片一样的原理