電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 2581|回復(fù): 0
收起左側(cè)

C 語(yǔ)言編程修煉之四屏幕操作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-8-20 17:49:25 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
        C 語(yǔ)言嵌入式系統(tǒng)編程修煉之四:屏幕操作
一、 漢字處理
        現(xiàn)在要解決的問題是,嵌入式系統(tǒng)中經(jīng)常要使用的并非是完整的漢字庫(kù),往往只是需要提供數(shù)量有限的漢字供必要的顯示功能。例如,一個(gè)微波爐的LCD 上沒有必要提供顯示"電子郵件"的功能;一個(gè)提供漢字顯示功能的空調(diào)的LCD 上不需要顯示一條"短消息",諸如此類。但是一部手機(jī)、小靈通則通常需要包括較完整的漢字庫(kù)。
        如果包括的漢字庫(kù)較完整,那么,由內(nèi)碼計(jì)算出漢字字模在庫(kù)中的偏移是十分簡(jiǎn)單的:漢字庫(kù)是按照區(qū)位的順序排列的,前一個(gè)字節(jié)為該漢字的區(qū)號(hào),后一個(gè)字節(jié)為該字的位號(hào)。
        每一個(gè)區(qū)記錄94 個(gè)漢字,位號(hào)則為該字在該區(qū)中的位置。因此,漢字在漢字庫(kù)中的具體位置計(jì)算公式為:94*(區(qū)號(hào)-1)+位號(hào)-1。減1 是因?yàn)閿?shù)組是以0 為開始而區(qū)號(hào)位號(hào)是以1 為開始的。只需乘上一個(gè)漢字字模占用的字節(jié)數(shù)即可,即:(94*(區(qū)號(hào)-1)+位號(hào)-1)*一個(gè)漢字字模占用字節(jié)數(shù),以16*16 點(diǎn)陣字庫(kù)為例,計(jì)算公式則為:(94*(區(qū)號(hào)-1)+(位號(hào)-1))*32。漢字庫(kù)中從該位置起的32 字節(jié)信息記錄了該字的字模信息。
        對(duì)于包含較完整漢字庫(kù)的系統(tǒng)而言,我們可以以上述規(guī)則計(jì)算字模的位置。但是如果僅僅是提供少量漢字呢?譬如幾十至幾百個(gè)?最好的做法是:
定義宏:
        # define EX_FONT_CHAR(value)
        # define EX_FONT_UNICODE_VAL(value) (value),
        # define EX_FONT_ANSI_VAL(value) (value),
定義結(jié)構(gòu)體:
        typedef struct _wide_unicode_font16x16
        {
                WORD value;                         /* 內(nèi)碼 */
                BYTE data[32];                         /* 字模點(diǎn)陣 */
        }Unicode;
        #define CHINESE_CHAR_NUM … /* 漢字?jǐn)?shù)量 */


[hide] C 語(yǔ)言編程修煉之四屏幕操作.doc (139 KB, 下載次數(shù): 0) [\hide]

發(fā)表回復(fù)

本版積分規(guī)則


聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表