第三篇:字符显示原理

  1. 使用PCtolLCD2003制作字库

注意,我们开始取模前一定要记得设置取模方式,这个取模方式和我们显示屏的显示方式要一致

  1. 设置字体为宋体,字体大小为16*16(这里当然可以设为别的)

  1. 输入想要显示的字

  1. 点击生成字模

u8 shuai[] = {0x10,0x04,0x10,0x04,0x12,0x04,0x12,0x04,0x92,0x3F,0x92,0x24,0x92,0x24,0x92,0x24,
0x92,0x24,0x92,0x24,0x92,0x24,0x90,0x2C,0x88,0x14,0x08,0x04,0x04,0x04,0x02,0x04};

接下里我们来分析字模如何显示:

  1. 字体大小为16*16,每一行用两个字节来表示,总共16行,也就时2*16 = 32个字节.

  1. 第一个字节为0x10,二进制位0001 0000,我们想要显示出字体,只需要判断每一个bit对应的值是0还是1,当为0是显示背景色,为1时显示字体颜色,依次类推就可以显示出完整的一个字了

  1. 由于我设置的时低位在前,因此第一个点是字节的最低位,如果选择高位在前,拿第一个点是字节的最高位.程序设计时要注意一下,否则显示的字会有乱码

2.显示16*16的字体

#ifndef MID_FONT_H
#define MID_FONT_H
#include "dev_lcd.h"

/*****************************宏替换屏蔽硬件接口*************************/

#define FONT_SET_WINDOWS(x, y, x1, y1)        LCD_SetWindows(x, y, x1, y1)
#define FONT_WRITE_COLOR(data)                Lcd_WriteData_16Bit(data)

/************************************************************************/



void FONT_Show16(unsigned int x, unsigned int y, unsigned char* zifu, u16 color);


#endif
#include "mid_font.h"

#define BACK_COLOR                0xFFFF//设置字体的背景色为白色


/*******************************************************************
函数功能:
    显示16*16大小的字体
参数:
返回值:
说明:
*******************************************************************/
void FONT_Show16(unsigned int x, unsigned int y, unsigned char* zifu, u16 color)
{
    unsigned int i,j;
    unsigned char temp;
    FONT_SET_WINDOWS(x, y, x + 15, y + 15  );
    for(i=0;i<32;i++)
    {
        temp = *(zifu + i);
        for(j=0;j<8;j++)
        {
            if(temp&0x01)
                FONT_WRITE_COLOR(color);
            else
                FONT_WRITE_COLOR(BACK_COLOR);
            temp=temp>>1;
        }
    }
}

3.效果展示

#include "stm32f10x.h"
#include "bsp_lcd.h"
#include "dev_lcd.h"
#include "mid_ui.h"
#include "mid_font.h"

u8 wan[] ={0x00,0x00,0x00,0x00,0xBF,0x3F,0x08,0x00,0x08,0x00,0x08,0x00,0xC8,0x7F,0x3E,0x09,
0x08,0x09,0x08,0x09,0x08,0x09,0x08,0x09,0xB8,0x48,0x87,0x48,0x42,0x70,0x20,0x00};

u8 qian[] = {0x80,0x00,0x84,0x10,0x84,0x10,0xFC,0x1F,0x00,0x04,0x44,0x04,0x44,0x7C,0xFF,0x42,
0x44,0x29,0x44,0x08,0x7C,0x08,0x44,0x08,0x44,0x14,0x7C,0x14,0x44,0x22,0x00,0x41};/*"嵌",0*/

u8 ru[] = {0x20,0x00,0x40,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x40,0x01,0x40,0x01,0x40,0x01,
0x20,0x02,0x20,0x02,0x10,0x04,0x10,0x04,0x08,0x08,0x04,0x08,0x02,0x10,0x01,0x60};/*"入",0*/

u8 shi[] = {0x00,0x12,0x00,0x22,0x00,0x22,0x00,0x02,0xFF,0x7F,0x00,0x02,0x00,0x02,0x7C,0x02,
0x10,0x02,0x10,0x02,0x10,0x04,0x10,0x44,0xF0,0x48,0x1E,0x50,0x04,0x60,0x00,0x40};/*"式",0*/

u8 de[] = {0x08,0x02,0x08,0x02,0x04,0x02,0x7E,0x3E,0x42,0x21,0x42,0x21,0xC2,0x20,0x42,0x22,
0x7E,0x24,0x42,0x24,0x42,0x20,0x42,0x20,0x42,0x20,0x7E,0x20,0x42,0x14,0x00,0x08};/*"的",0*/

u8 cai[] = {0x10,0x04,0x10,0x04,0xFF,0x7F,0x10,0x04,0x00,0x08,0x00,0x1F,0xFC,0x00,0x88,0x08,
0x10,0x04,0x80,0x00,0xFE,0x3F,0xA0,0x02,0x90,0x04,0x8C,0x18,0x83,0x60,0x80,0x00};/*"菜",0*/

u8 ji[] = {0x00,0x04,0x00,0x02,0x00,0x3F,0x3F,0x21,0x20,0x25,0x20,0x21,0x12,0x29,0x14,0x11,
0x08,0x01,0x08,0x7F,0x14,0x40,0x24,0x40,0xA2,0x5F,0x01,0x40,0x00,0x28,0x00,0x10};/*"鸡",0*/


int main(void)
{    
    unsigned int x = 50, y = 100;;
    bsp_spi_init();
    bsp_gpio_init();  
    dev_lcd_init();
    
    FONT_Show16(x,y,wan, RED);
    x = x+16; y = y+16;
    
    FONT_Show16(x,y,qian, RED);
    x = x+16; y = y+16;
     
    FONT_Show16(x,y,ru, RED);
    x = x+16; y = y+16;
    
    FONT_Show16(x,y,shi, RED);
    x = x+16; y = y+16;
    
    FONT_Show16(x,y,de, RED);
    x = x+16; y = y+16;
    
    FONT_Show16(x,y,cai, RED);
    x = x+16; y = y+16;
    
    FONT_Show16(x,y,ji, RED);
    x = x+16; y = y+16;
    while(1)
    {
    
    }
}

4.GBK字库制作

  1. 设置要生成字库的字体和大小

  1. 选择gbk_ziku.txt文本

  1. 选择生成二进制

  1. 生成

/* 从GD25Q64中获取某汉字的字模
   参数gbk:是汉字的GBK码
   参数rec_data:字模会被读到这个数组*/
void GBK_Fetch(unsigned char* gbk, unsigned char* rec_data)
{
    unsigned char GBKH,GBKL;
    unsigned long addr;
    
    GBKH=*gbk;
    GBKL=*(gbk+1);
    
    if((GBKH>0XFE)||(GBKH<0x81))return;
    GBKH=GBKH-0X81;
    GBKL=GBKL-0X40;
    
    addr=((unsigned long)GBKH*192+GBKL)*128;
    GD25Q64_Read(rec_data, addr, 128);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

入门->放弃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值