单片机中不带字库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[] = {//创建字库,阴码,顺向,逐行式取模

  {"天",0x00,0x00,0x3F,0xF8,0x01,0x00,0x01,0x00,
        0x01,0x00,0x01,0x00,0xFF,0xFE,0x01,0x00,
        0x02,0x80,0x02,0x80,0x04,0x40,0x04,0x40,
        0x08,0x20,0x10,0x10,0x20,0x08,0xC0,0x06},

  {"地",0x10,0x20,0x10,0x20,0x10,0x20,0x11,0x20,
        0x11,0x2C,0xFD,0x34,0x11,0x64,0x13,0xA4,
        0x11,0x24,0x11,0x34,0x11,0x28,0x1D,0x22,
        0xE1,0x22,0x41,0x02,0x00,0xFE,0x00,0x00},

  {"不",0x00,0x00,0x7F,0xFC,0x00,0x80,0x00,0x80,
        0x01,0x00,0x01,0x00,0x03,0x40,0x05,0x20,
        0x09,0x10,0x11,0x08,0x21,0x04,0x41,0x04,
        0x81,0x00,0x01,0x00,0x01,0x00,0x01,0x00},

  {"仁",0x08,0x00,0x08,0x00,0x08,0x00,0x13,0xFC,
        0x10,0x00,0x30,0x00,0x30,0x00,0x50,0x00,
        0x90,0x00,0x10,0x00,0x10,0x00,0x10,0x00,
        0x17,0xFE,0x10,0x00,0x10,0x00,0x10,0x00},

}

/*
其中定义的汉字结构体元素中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, "天地不仁", MAGENTA, YELLOW);//YELLOW
  
  while(1)
  { 
    KeyTask();//按键扫描
  } 

}
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要实现51单片机光敏电阻LCD12864带字库显示,可以按照以下步骤进行: 1. 确定所使用的LCD12864的控制器型号,例如常用的ST7565、KS0108等。 2. 根据控制器型号编写相应的驱动程序,可参考相关资料或开源代码。 3. 连接光敏电阻,读取光敏电阻的电压值,根据电压值控制LCD显示相关内容。 4. 准备字库文件,将需要显示的文字转换为字模,并存储到字库中。 5. 使用驱动程序中的函数调用字库,完成文字的显示。 具体实现过程中需要注意硬件连接、程序编写及调试等方面的问题。 ### 回答2: 51单片机光敏电阻是一种常见的电子元件,光敏电阻能够根据光的强弱来改变其电阻值。而LCD12864是一种液晶屏幕,具有128x64像素的显示区域,能够显示文字和图形。带字库显示意味着LCD12864具有一组预先定义好的文字库,可以直接显示文字而不需要通过编程生成。 在使用51单片机光敏电阻和LCD12864带字库显示时,我们可以通过测量光敏电阻的电阻值,来获取环境光的强度。根据光敏电阻的电阻值,我们可以调整LCD12864的背光亮度,以保证显示内容的清晰度。 通过编程,我们可以将需要显示的文字和图形存储在LCD12864的字库中。当需要显示某个文字时,我们只需要根据其在字库中的位置来设置相应的控制信号,LCD12864就能够正确地显示出该文字。这样,我们可以方便地显示多种文字和图案,而不需要每次都通过编程生成。 同时,我们还可以通过编程控制LCD12864显示动态内容。例如,我们可以实现文字的滚动、闪烁和变色等效果,从而使显示更加生动和多样化。利用这些功能,我们可以在各种电子设备中应用51单片机光敏电阻和LCD12864带字库显示,如温度计、天气预报、闹钟等。 总之,51单片机光敏电阻与LCD12864带字库显示的组合能够实现光敏控制和丰富的显示效果。这种组合在各种电子设备中都有广泛的应用。 ### 回答3: 51单片机是一种广泛应用于嵌入式系统开发的单片机,它具有低功耗、高性能和丰富的外设接口等特点。光敏电阻是一种能够根据光照强度改变电阻值的传感器,常用于光强检测和调光控制等场合。 LCD12864是一种具有128x64像素点的液晶显示屏,它通过控制每个像素点的亮暗来实现图像和文字的显示。配备字库可以让LCD12864能够显示更多的文字和图形,提高显示效果。 在使用51单片机连接光敏电阻和LCD12864进行显示时,首先需要将光敏电阻与51单片机的模拟输入端连接,通过读取模拟输入端的电压值,可以获取光敏电阻所检测到的光照强度。 然后,根据光照强度的变化,可以通过编程控制LCD12864显示相应的信息。可以通过指令或函数来操作LCD12864的各个像素点和字库,以在屏幕上显示特定的文本和图形。 此外,还可以根据光敏电阻的变化来调整LCD12864的亮度,以适应不同光照条件下的显示需求。这样,通过51单片机、光敏电阻和LCD12864的组合,可以实现根据光照强度的变化来显示不同的信息,提高显示效果和用户体验。 总结来说,使用51单片机、光敏电阻和带字库LCD12864可以实现根据光照强度的变化来进行文字和图形的显示,还可以通过调节亮度来适应不同光照条件。这样的组合可以广泛应用于各种嵌入式系统中,例如室内照明控制、环境光强检测等领域。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值