5119|2

15

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

TFT 液晶中色彩与文字编码 [复制链接]

驱动一个320*240 的液晶屏

TFT 液晶中色彩与文字编码 - java - stm32学习日志

 这里不说 液晶控制器 的驱动,其实大部分的FTF液晶的驱动时序都比较简单 也就是是初始化等的操作命令极其繁琐,不过一般都会有一个厂家出的的初始换说明可供参考。

而我做FTF对 底层的色彩 与 文字字库 很有感触,先说说 颜色。我要将一个点显示在 液晶上对其颜色的描述 是一个U16 型的数

就是 R G B   其中 R5位 G6 位 B 5位  // 绿 蓝    

16比特模式分配给每种原色各为5比特,其中绿色为6比特,因为人眼对绿色分辨的色调更精确。 比如红光与绿光按某种比例复合,对三种锥状细胞刺激后产生的色觉可与眼睛对单纯的黄光的色觉等效。但决不能认为红光与绿光按某种比例复合后生成黄光,或黄光是由红光和绿光复合而成的。扯远了~~~~~~

#define RED   0xf800  //11111 000000 00000  红
#define GREEN  0x7e0 // 00000 111111 00000 绿 
#define BLUE  0x001f
#define BLACK  0x0000
#define YELLOW  0xffe0
#define WHITE  0xffff

那么写一个点 就把颜色设好就好了。可以用 Image2Lcd 这个软件提取图片的颜色信息。颜色既然是16Bit 的 那么就有65536 种颜色了 也就是常说的6万5千色屏,这个级别在MP4与手机中比较常见。

好了 再来说说字模  比如说16*16 的 其实就是两个U8的数据做行共16 列 2*16=32 一个字要 32个 U8

比如说 "你",  (十六进制)


0x90,0x00,0x90,0x01,0x88,0x20,0xC8,0x7F,0x44,0x20,0x2C,0x12,0x16,0x02,0x45,0x0A,
0xC4,0x12,0x44,0x12,0x24,0x22,0x24,0x62,0x14,0x22,0x84,0x02,0x04,0x01,0x00,0x00,


但是 知道一个汉字 如何找到他在字库的 地址呢???若是英语这个好说 A的ASCII码是65 ,a的是97 这个大家都知道。那么汉字也有类似ASCII码吗?这个就需要 汉字的编码知识了 至少在 VC++ 与 KEIL 中汉字使用 GB2312 方式编码的 。

在使用GB2312的程序通常采用EUC储存方法,以便兼容于ASCII浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。

每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”,第二个字节称为“低位字节”。

“高位字节”使用了0xA1-0xF7(把01-87区的区号加上0xA0),“低位字节”使用了0xA1-0xFE(把01-94加上0xA0)。 由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

例如“啊”字在大多数程序中,会以两个字节,0xB0(第一个字节)0xA1(第二个字节)储存。(与区位码对比:0xB0=0xA0+16,0xA1=0xA0+1)。 大家都熟悉的4级报名等要用的 名字 的编码便是来源于此,不过我们这时用的是4位区位码 比如 啊 在16区 第一位  就是 1601  。

  • 01-09区为特殊符号。
  • 16-55区为一级汉字,按拼音排序。 //常用的
  • 56-87区为二级汉字,按部首笔画排序。 //罕用的

    如果有人的名字 编码出现了 55区之上 比如 5921 呢这些字多半就不好念了。呵呵·····~~

    TFT 液晶中色彩与文字编码 - java - stm32学习日志
     好了这里介绍 GB2312  的目的 在于说明
    GB2312 码并不是连续的 一个区中只有94 个字的GB2312码是连续的
    而字库是按GB2312的顺序从0开始连续排列的,所以知道GB2312码必须转换一下才知道其所在字库的地址。
     
    1601 啊  45217 176,161
    1602 阿  45218 176,162
    1603 埃  45219 176,163
    .......
    1694 剥 45310 176,254
    1701 薄 45473 177,161
    1702 雹  45474 177,162
    .......
    明白了吧 45217 是将 "啊" 当做一个U16 的GB2312 转换的 而 176,161 是当做两个U8 分别转换的 //U16 ==  unsigned short int 
     
     这样的话:
    u8 zi[]={"啊你好!"};
    u8 *stf=zi;
     if (*str >= 0xb0) //汉字
    {
       hz=(*str++)<<8;
       hz|=(*str++);
      TFTShowHZ16(x,y,hz,color);
    }
    /*************************************************************
     c1=(u8)hz;
     c2=hz>>8;
     addr=((c2-176)*94+(c1-161))*32;  //计算地址
  • 最新回复

    谢谢分享!!!!!!  详情 回复 发表于 2010-12-18 18:58
    点赞 关注

    回复
    举报

    2641

    帖子

    0

    TA的资源

    五彩晶圆(中级)

    沙发
     
    很不错,谢谢分享
     
     

    回复

    64

    帖子

    0

    TA的资源

    一粒金砂(初级)

    板凳
     

    谢谢分享!!!!!!

    谢谢分享!!!!!!
     
    个人签名hj
     
     

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

    随便看看
    查找数据手册?

    EEWorld Datasheet 技术支持

    相关文章 更多>>
    关闭
    站长推荐上一条 1/9 下一条

     
    EEWorld订阅号

     
    EEWorld服务号

     
    汽车开发圈

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表