930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 8511|回复: 0

LCD 12864液晶模块使用详解4-显示字符汉字

[复制链接]

27

主题

72

帖子

384

积分

版主

Rank: 7Rank: 7Rank: 7

积分
384
发表于 2016-9-14 16:09:47 | 显示全部楼层 |阅读模式
本帖最后由 飞宇 于 2016-9-14 17:37 编辑

1. 字库和显示坐标
     LCD12864液晶模块内置 8192个中文汉字(16X16 点阵)、128个字符(8X16点阵):
     1) 每行可显示的汉字数量:128/16 = 8个。
     2) 每行可显示的字符数量:128/8 = 16个。
     3) 可显示的汉字行数:64/16 = 4行。
     4) 可显示的字符64/16 = 4行。


     显示字符也可以通过图形的方式来显示,在后面的章节会详细说明,本节说明的是使用字库的方式来显示字符。


     使用字库的方式来显示字符需要使用基本指令集,流程是先写入显示地址指定字符在LCD上显示的起始位置,之后写入字符编码,LCD会根据字符编码从字库中查找对应的字模并显示到屏幕上。
     显示坐标

     显示坐标(地址)确定了显示的起始位置,下表中列出了可写入的所有的起始地址,共32个,对应LCD的4行8列。注意这和绘图时写入的地址是不一样的,绘图时,地址是根据“点”来确定的,字库显示时是将16×16点阵作为一个单元来处理的。

     为了更好的理解LCD字符显示,我们准备了2个字符显示函数:单个字符显示和字符串显示,字符串显示也可以显示汉字。


     单个字符显示
     每次写入一个字符。注意,虽然写入的是一个字符,但是每次操作的仍然是一个16×16点阵的区域。

程序清单:
  1. /************************************************************************
  2. * 描  述 : 指定位置显示单个字符
  3. * 参  数 : row[in]:行,范围1~4
  4. *        :column[in]:列,范围0~7  
  5. *        :chr[in]:字符编码
  6. * 返回值 : 无
  7. ************************************************************************/
  8. void LCD_ShowChar(uchar row,uchar column,uchar chr)
  9. {      
  10.     uchar Address;
  11.    
  12.     //row判断第几行,column判断第几列,0x80为液晶行初始地址   
  13.     if(row == 1)Address=0x80+column;   
  14.     if(row == 2){Address=0x90+column;}        
  15.     if(row == 3){Address=0x88+column;}   
  16.     if(row == 4){Address=0x98+column;}  
  17.     Write_Cmd(Address);  //写入地址命令到LCD12864     
  18.     Write_Data(chr);     //写入显示数据到LCD12864   
  19. }
复制代码


因为操作是的16×16点阵区域,而我们写入的英文字符是8×16的,所以字符间会有8×16个点的空隙。


    字符串显示:
    在一个写流程里面连续写入n个字符。显示汉字时注意一个汉字等于2个字符。

程序清单:
  1. /************************************************************************
  2. * 描  述 : 字符串显示
  3. * 参  数 : row[in]:行,范围1~4
  4. *        :column[in]:列,范围0~7  
  5. *        :num[in]:字符个数,注意一个汉字=2个字符
  6. *        :s[in]:指向待显示的字符串
  7. * 返回值 : 无
  8. ************************************************************************/
  9. void LCD_ShowString(uchar row,uchar column,uchar num,uchar *s)   
  10. {     
  11.     uchar Address;   
  12.    
  13.     //row判断第几行,column判断第几列,0x80为液晶行初始地址   
  14.     if(row == 1)Address=0x80+column;   
  15.     if(row == 2){Address=0x90+column;}        
  16.     if(row == 3){Address=0x88+column;}   
  17.     if(row == 4){Address=0x98+column;}   
  18.     Write_Cmd(Address);    //写入显示起始地址
  19.     while(num)             //写入显示数据的大小  
  20.     {   
  21.         Write_Data(*(s++));  //写入显示数据到LCD12864   
  22.         num--;         
  23.     }   
  24. }
复制代码
    显示字符时,“LCD12864”共8个字符,所以长度为8,显示汉字时,“液晶模块”4个汉字,一个汉字等于2个字符,所以长度也是8。
本文配套的源程序:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

Copyright © 合肥艾克姆电子科技有限公司
快速回复 返回顶部 返回列表