2021-06-16

单片机中不带字库LCD液晶屏显示少量汉字
单片机中不带字库LCD液晶屏如何显示少量汉字,一般显示汉字的方法有1.使用带字库的LCD屏,2.通过SD卡或者外挂spi flash存中文字库,3.直接将需要的汉字取模存入mcu的flash中。
第一种方式最方便,带字库的液晶屏价格稍贵,第二种方式电路复杂价格也不便宜,第三种方法可以存储少量必要的汉字,经济实用。将汉字字模数据存储到大数组中,通过偏移值来取出需要的汉字显示。
typedef struct _GB16 // 汉字字模数据结构
{
char Index[2]; // 汉字内码索引
char Msk[32]; // 点阵码数据
}GB16_Typedef;

const GB16_Typedef GB16x16[] = {//创建字库,阴码,顺向,逐行式取模

{“L”,},

{“C”,},

{“D”,},

{“液”,},
{“晶”,},
{“屏”,},
}
/*
其中定义的汉字结构体元素中Index[2]存放汉字,而Msk用于存放点阵码。
具体程序如下:
*/
void show_chinese(uint16_t x, uint16_t y, uint8_t pstr, uint16_t pointColor, uint16_t backColor)
{
uint8_t bit_cnt, byte_cnt, wordNum;
uint16_t color, word_index;
const GB16_Typedef
p_tab;

p_tab = GB16x16;
wordNum = sizeof(GB24x24) / sizeof(GB24_Typedef);//汉字的个数

while(*pstr != ‘\0’)
{
for(word_index=0; word_index<wordNum; word_index++)
{
if(*pstr==p_tab[word_index].Index[0] && *(pstr+1)==p_tab[word_index].Index[1])
{
tft_set_window(x, y, x+15, y+15);//设置要操作的窗口范围

    for(byte_cnt=0; byte_cnt<32; byte_cnt++)
    {
      uint8_t color = p_tab[word_index].Msk[byte_cnt];
      for (bit_cnt=0; bit_cnt<8; bit_cnt++) 
      {
        if((color&0x80) == 0x80)
        {
          tft_wrdat(pointColor);//LCD写数据
        } 
        else
        {
          tft_wrdat(backColor);//LCD写数据
        } 
        color = color<<1;
      }
     
    }
    pstr+=2;
    x += 16;
    if(x > 225)   
    {
      x = 0;
      y += 16; 
    }
  } 
}

}
}
int main()
{
TFT_Init(); //TFT彩屏初始化
LED_Init(); //LED初始化
tft_clear_screen(BLACK); //清屏
show_chinese(6, 20, “LCD液晶屏”, MAGENTA, RAD);//YELLOW,lcd-expert
while(1)
{
KeyTask();//按键扫描
}
}
仅供参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值