LCD液晶屏中文顯示介紹

2021-09-06 14:58:02 字數 3367 閱讀 7379

和微控制器搭配的顯示器,有lcd12864、tft、oled等。在有些系統中,我們需要顯示漢字,可以購買漢字晶元,或者購買帶漢字顯示的顯示器,當然,也可以自己做字型檔。這裡我們介紹一種自己做字型檔的方法。

看原理需要知道什麼是畫素:畫素是液晶屏的最小單位,看你的手機螢幕或者電腦螢幕,他們實際上是由乙個乙個的正方形組成的,如果你的電腦或手機螢幕解析度太高,不容易看到,需要借助放大鏡,解析度低的話,仔細一看就看見了,都是由乙個乙個的正方形組成的,這裡面的乙個正方形,就是1個畫素。例如,12864螢幕就是128畫素*64畫素的螢幕,即橫著有12864個正方形,豎著有64個正方形。

上圖是12864螢幕的一角,請你仔細看看,是不是乙個乙個的正方形組成?

比12864大的解析度是320240,還有800600,1024768,1280*720等,總之,解析度越大,人的肉眼就越但不見它是由乙個乙個小正方形組成的。所以現在的手機螢幕是越來越高,當你用慣乙個解析度極高的手機,再去用你原來解析度極低的手機,你就會發現原來的那個手機真是很模糊!

講完了畫素的概念,下面開始講漢字顯示的原理:

現在流行的漢字字型檔有兩種,一種是gb2312、一種是gbk。這是兩種不同的編碼約定。

gb2312有六千多個漢字,是一些常用的漢字

gbk有2萬多個漢字,包含所有的gb2312漢字,包含整個中國的漢字

假如我們想在液晶顯示器上顯示乙個16*16畫素大小的漢字「瑞」,怎麼辦呢?先看一下「瑞」字在液晶顯示器上被放大的效果:

上面的這個瑞即是16 * 16畫素大小的字型,你可以數一下上面的畫素點。你可以看一下,在上面「亮」的地方用「寫點函式」寫成和其它點不同的顏色,不就可以了嗎!按照這個思想,我們就需要採用一種有效的辦法了。從上面影象的右上角開始掃瞄,每行有16個點,即可以用兩個位元組來表示,「暗」的地方用0表示,亮的地方用1表示,那麼第一行就可以寫成十六進製制的00 20,以此類推,可以得出第二行,第三行的位元組碼,如此一來,乙個漢字就需要32個位元組來表示。搞好了漢字的這些碼,在程式中給tft開個16 * 16大小的區域,然後開始掃瞄這些位元組,遇到0,寫背景色,遇到1,寫定義的顏色。漢字顯示就是如此了。

英文的單詞都是由26個字母構成了,加上大小寫的區別和一些字元,也不過才95個。假如要顯示8*16畫素大小的字元,每乙個字元需要16(8 * 16/8)個位元組的字型檔空間,95個字元即是95 * 16=570個位元組。即占用570個位元組的ram。對於lpc1114的8k位元組ram來說,搓搓有餘了。

顯示中文的話,必須需要每乙個字的字模,16 * 16畫素大小的中文,每乙個中文都要32(16 * 16/8)個位元組。gbk收錄了中文兩萬多個,如果要都能顯示,需要700多k位元組的空間。

所以,我們選擇了把這些字型檔放在外部儲存器當中,我們選擇了2m的flash儲存晶元w25q16做為儲存媒介。放個700多k的字型檔足夠了,如果你願意,同時放兩種字型的字型檔都沒問題。

在工具欄處點「開啟」按鈕,開啟gbk_ziku.txt檔案,然後根據自己的需要,設定想要的取模方式,然後點工具欄上的「輸出」按鈕 並等待其完成,完成後會在取模軟體所在路徑生成了乙個temp.txt檔案,修改這個檔名,比如現在我是按照「宋體、點陣數為16、字重為4、取模為為16 * 16、對齊設定為左上、方向設定為橫向取模,高位在左」的方式來取的字模,也就是我平時tft常用的一種字模,改檔名為st16x16.txt 。

為了生成的方便,我們在d盤根目錄下新建乙個資料夾,名稱就叫ziku吧,然後,把ziku.exe 和 st16x16.txt複製乙份到這個資料夾裡。

開啟自己計算機的命令視窗:「開始」->「執行」->「cmd」,如下圖所示:

然後用cd命令進入到我們剛剛建的ziku資料夾下,輸入命令如下圖所示:

輸入命令,生成字型檔檔案,如下圖所示:

回車,然後程式會在ziku資料夾下生成乙個名稱固定為ziku.bin的字型檔檔案

為了區分,把這個字型檔檔案修改名稱為st16x16.bin 。

到此,字型檔已經製作完成。

硬體:電腦串列埠—微控制器—w25q16

程式:微控制器與電腦採用串列埠連線,微控制器與w25q16採用spi方式連線。所以,我們只需要給微控制器寫乙個接收串列埠資料再把資料通過spi口傳輸到w25q16中的程式即可。

如果我們想要顯示漢字「瑞」,我們該從w25q16中的哪個位元組開始提取它的字模呢?這時候,就需要知道字元儲存編碼的原理了。

字元編碼原理:英文本母帶各種符號等共有95個,都有自己的ascii碼,乙個字母或者符號就是乙個ascii碼。漢字以及漢字的符號是需要2個位元組來儲存,在keil等主流編譯器中,一般都是以gbk編碼方式儲存。

gbk編碼:每個gbk碼由2個位元組組成,第乙個位元組為0x81~ 0xfe ,第二個位元組分為兩部分,一是0x40~ 0x7e,二是0x80~ 0xfe。例如漢字「瑞」的gbk編碼為c8 f0,第一位元組c8,位於0x81~ 0xfe之間,第二位元組f0,位於0x40~0xfe之間。第乙個位元組代表的意義稱為區,那麼gbk裡面總共有126個區(0xfe-0x81+1=126);第二個位元組代表的意義就是每個區內有多少個漢字,算了一下,一共有190個(0xfe-0x80+0x7e-0x40+2=190)。那麼,gbk一共儲存了126x190=23940個漢字。

我們仔細看gbk編碼第二個位元組兩部分,0x40~ 0x7e 0x80~ 0xfe ,也就是說它是從0x40~到0xff,中間的0x7f和最後的0xff沒有用到。但是為了能夠線性查詢,我們暫且認為這兩個位元組也存在,就是我們強制把每個區190個漢字當做每個區192個漢字,不過0x7f和0xff上沒有漢字。

void get_gbk_dzk(uint8_t *code, uint8_t *dz_data)

函式中,引數*code帶入漢字的兩位元組編碼,*dz_data是乙個32個位元組的資料,帶入函式中,就可以得到任何乙個漢字的字模了。例如:

uint8_t buf[32];

get_gbk_dzk("瑞", buf);

LCD液晶屏怎麼安裝

lcd液晶屏組裝的工具主要是錘子和扳手,它們被用於擰框架腳。組裝操作的順序是首先將所有的工具和原材料有秩序地放在工作台上。其次將殼按工藝卡說明正確放置在工作台上,如有組裝工裝,按要求放在工裝上,注意殼的方向要正確。接下來揭去lcd屏的保護膜,用無塵紙將電極擦乾淨,確認方向後,按工藝卡說明,正確放入殼...

LCD液晶屏的驅動方式

液晶的顯示是由於在顯示畫素上施加了電場的緣故,而這個電場則由顯示畫素前後兩個電極上的電位訊號合成產生,在顯示畫素上建立直流電場是非常容易的事,但直流電場將導致液晶材料的化學反應和電極老化,從而迅速降低液晶的顯示壽命,因此得建立交流驅動電場,並且要求這個交流電場中的直流分量越小越好,通常要求直流分量小...

LCD段碼液晶屏知識

液晶的發現可追溯到19世紀末,1888年被奧地利植物學家發現。它是一種在一定溫度範圍內呈現既不同於固態 液態,又不同於氣態的特殊物質態。既具有晶體所具有的各向異性造成的雙折射性,又具有液體獨特的流動性。一般可分熱致液晶和溶致液晶兩類。顯示應用領域使用的是熱致液晶,溫度低了,出現結晶,溫度高了,就變成...