打印

TFT自制字库及显示求助

[复制链接]
6105|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ZRL700424|  楼主 | 2010-12-31 15:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直没弄明白TFT中的字符是怎么显示的:

在单色点阵屏中显示用字模软件生成的数据,能够理解,因为一个点对应一个位;
但TFT(16位色)是两个字节对应一个点,理论上一个字的数据量应该是单色屏数据量的16倍,可是我看了下电脑中的字库根本不分单色屏还是TFT屏都是一样的,那在TFT中怎么显示呢?
难道是按生成的数据每位进行判断,确定这个位对应的两个字节是什么颜色?

相关帖子

沙发
ejack| | 2010-12-31 16:34 | 只看该作者
显示的字符需要是彩色吗?
有必要显示真彩字符吗?

使用特权

评论回复
板凳
ZRL700424|  楼主 | 2010-12-31 17:20 | 只看该作者
本帖最后由 ZRL700424 于 2010-12-31 17:32 编辑

显示的字符跟电脑一样啊,因为电脑的字库也是很小的

比如:16*16的字,只有32个字节(对应单色屏的显存也是32个字节),而TFT屏16*16个像素对应有512个RAM,我的意思是:32个字节怎么送到512个RAM中呢?

我是这样想的,不知道对不对:
32个字节中的第1位如果是1,RAM0、RAM1显示字体色,如果第1位如果是0,RAM0、RAM1显示底色;
接下来判断第2位。。。。。。

使用特权

评论回复
地板
xwj| | 2010-12-31 18:08 | 只看该作者
字库当然“根本不分单色屏还是TFT屏都是一样的”,因为字库只要区别那个点是显示 还是不显示(或显示背景)。
单色屏——为1的位显示黑点,否则不显示
TFT屏——为1的位显示前景色,否则不显示(透明模式)或者显示底色(覆盖模式)
字库当然都是一样的。

使用特权

评论回复
5
ZRL700424|  楼主 | 2010-12-31 21:16 | 只看该作者
4# xwj

谢谢xwj!

我现在的疑问是:在TFT屏中是怎样显示字符的(单色屏是把用字模软件生成的数据直接送到相应的RAM中),难道真的像我在楼主位说的那样显示的?

使用特权

评论回复
6
xwj| | 2010-12-31 21:31 | 只看该作者
就是你3楼说的那样,逐位判断,是1就在对应点写入前景色

使用特权

评论回复
7
ZRL700424|  楼主 | 2011-1-1 11:36 | 只看该作者
哦,谢了!

使用特权

评论回复
8
ZRL700424|  楼主 | 2011-1-3 15:42 | 只看该作者
再次感谢xwj,已经成功显示自制字库中的汉字了!

使用特权

评论回复
9
我是土匪| | 2011-1-4 09:17 | 只看该作者
就是你3楼说的那样,逐位判断,是1就在对应点写入前景色
xwj 发表于 2010-12-31 21:31


顶一下

使用特权

评论回复
10
admvip| | 2011-1-7 15:48 | 只看该作者
我的TFT汉字显示函数

/*-----------------------------------------------------------------------*/
/*  LCD显示单个16X16中文汉字                                             */
/* (当前坐标处输出一个中文汉字,颜色为正文颜色)                          */
/*-----------------------------------------------------------------------*/

void LCD_PutChinese (unsigned char chinese_H, unsigned char chinese_L)
{
unsigned char i,j;
unsigned int  chinese_Num,m,n;

chinese_Num = (unsigned int)(chinese_H - 0xA1)*94 + (unsigned int)(chinese_L - 0xA1); // 根据机内码计算汉字在字库中的序号
m = chinese_Num / 8;                         // 计算字模在字库中的扇区号(每扇区256字节)
n = ((chinese_Num % 8) << 5);                                    // 计算字模在扇区中的开始位置
DF_MM_read_page(m,2);                // 读取器件号为2的FALSH中的一扇区字模数据

for(i=0;i<32;i++)                           // 循环显示完1个中文字符32字节数据
{
  for(j=8;j>0;j--)
  {
   if (buf[n+i] & BIT(j-1))        // 根据字模,是1的像素点用正文颜色填充
           DrawPoint (Text_color_H,Text_color_L);
   else
           DrawPoint (Background_color_H,Background_color_L);        // 根据字模,是0的像素点用背景颜色填充
  }// for2 end
}// for1 end   
}

使用特权

评论回复
11
xupt_james| | 2011-1-16 10:52 | 只看该作者
顶一下!

使用特权

评论回复
12
jwins| | 2011-3-15 10:26 | 只看该作者
关于彩色液晶TFT模块的显示技术,可以看看网上的一本书,《铭正同创TFT液晶彩色图像显示方法 V1.0》,下载地址:http://www.mzdesign.com.cn/articleshow.asp?id=384

使用特权

评论回复
13
njfucjh| | 2011-4-23 22:48 | 只看该作者
本帖最后由 njfucjh 于 2011-9-23 16:25 编辑

和13楼的是同行 ,串口通信的,迪文科技的

使用特权

评论回复
14
adams.gh| | 2011-5-8 18:27 | 只看该作者
本帖最后由 adams.gh 于 2011-5-8 18:28 编辑

不带字库液晶的便宜,大批量当然不用带字库的

使用特权

评论回复
15
wxy223067521| | 2011-6-3 16:23 | 只看该作者
和13楼是同行啊!Q:75693817

使用特权

评论回复
16
ysdx06010302| | 2011-12-25 18:25 | 只看该作者
10楼你好,我正在学习做字库,看到你的程序了,“chinese_Num = (unsigned int)(chinese_H - 0xA1)*94 + (unsigned int)(chinese_L - 0xA1); // 根据机内码计算汉字在字库中的序号”。chinese_H-0xa1不知为什么。我感觉应该是减0xb0吧,明白的大侠们,指点一二,谢谢。

使用特权

评论回复
17
li88owert| | 2011-12-28 10:54 | 只看该作者
高位字节 = 区码 +20H+80H
低位字节 = 位码 +20H+80H
点阵起始位置 = ((区码 - 1)*94+(位码-1))*汉字点阵字节数

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

677

帖子

0

粉丝