maxims 发表于 2014-5-1 12:28:44

【TFT屏】求助,同一位置写屏会重叠

本帖最后由 maxims 于 2014-5-2 01:22 编辑

有一个2.2寸的屏,芯片是iLi9341,网络上有一个arduino库

比方说,在同一个位置,写入0-9的数字,这些数字会重叠在一起,导致啥都看不清楚。

库里边没有处理这个情况的函数,谁能帮我解决一下问题啊~

链接:http://pan.baidu.com/s/1c0teWFI 密码:iuy2

maxims 发表于 2014-5-2 01:22:24

这么多人看,没有人理我吗?:o

Super169 发表于 2014-5-2 09:37:46

朋友, 不是不想幫, 而是要幫也不容易.

你問的是硬件問題, 而且不是普通的硬件.TFT 已不是很多人有, 而 TFT 亦有不同的芯片, 庫也不一樣.

我並沒有TFT, 但曾寫過 OLED 的庫, 或多或少也猜到問題所在, 你可以嘗試自己修改.

首先, 文字一般只用 0 1 的把有色的地方儲存在字庫中, 在顯示時有不同的方式.
以 OLED 為例, 由於每個點只有黑白 (或者是有顯不或沒有顯示) 兩個可能, 要顯示一個 6x8 的字, 就乾脆把 6x8 的地方都用直接填上就可以了 (程式上直接 overwrite).但如果要保留原有的底圖, 就只可以在該字需要顯示的地方才蓋上 (程式上用 OR 的方式, 但必須先記下之前的資料, 要動用一些記憶體).

而 TFT 跟 OLED 不同, 是多色的, 同一個點不是單單只有兩個選擇.顯示時就要分開 直接把 6x8 的地方都蓋了 (overwrite), 還是只在有顥的地方才蓋上 (由於 TFT 是單點操控, 不是 OR, 而是把沒顯的地方跳過就可以了).前者是你想要的, 後者 是你現在碰到的.
要做到前者, 在 TFT 會有一定的問題, 因為不是 0 / 1 的分別, 比如背景可能是一幅多色的圖畫, 直接蓋上就會出現一塊塊的方格.所以在 TFT 選用後者比較適合, 寫庫的人, 也不知沒顯示的點應該填上什麼, 除非是用家提供.

如果你的庫沒有提供前者的功能, 你也最少有兩個方法:
1) 直接改庫, 在顥示時, 把字庫中沒顯的地方都顯示為黑色 (或其他你喜歡的顏色)
2) 在顯示文字時, 先自行把背景地方填上一個你想要的背景, 相信這個不會太難攪

由於我沒有你的 TFT, 我只可以提供原理, 你嘗試自己做吧.

maxims 发表于 2014-5-2 18:58:08

本帖最后由 maxims 于 2014-5-3 09:42 编辑

Super169 发表于 2014-5-2 09:37 static/image/common/back.gif
朋友, 不是不想幫, 而是要幫也不容易.

你問的是硬件問題, 而且不是普通的硬件.TFT 已不是很多人有, 而 ...

已经搞定了,是我自己思路出现了一个小的偏差
void TFT::drawChar( INT8U ascii, INT16U poX, INT16U poY,INT16U size, INT16U fgcolor)
{
    if((ascii>=32)&&(ascii<=127))
    {
      ;
    }
    else
    {
      ascii = '?'-32;
    }

   for (int i =0; i<FONT_X; i++ ) {
      INT8U temp = pgm_read_byte(&simpleFont);//ascii-0x20
      INT8U eraes = pgm_read_byte(&simpleFont);//@我用不到这个@字符,所以把这个字符变成方块也就是全FF,然后在这里读取它
      for(INT8U f=0;f<8;f++)
      {
            if((eraes>>f)&0x01)
            {
                fillRectangle(poX+i*size, poY+f*size, size, size, 0x0000);//每次写屏前,先在这里把黑方块写一次。
            }
            if((temp>>f)&0x01)
            {
                fillRectangle(poX+i*size, poY+f*size, size, size, fgcolor);//然后这里才写需要的字符。
            }

      }

    }
}
页: [1]
查看完整版本: 【TFT屏】求助,同一位置写屏会重叠