嵌入式Linux主板EM9160主要應(yīng)用之一就是可以作為智能終端的核心平臺(tái),智能終端總是帶有一種顯示單元。EM9160作為一種高效、低成本的產(chǎn)品解決方案,專(zhuān)門(mén)針對(duì)小型的單色LCD顯示模塊(分辨率通常在128×64至320×240),在嵌入式Linux下完成了LCD驅(qū)動(dòng)程序,以實(shí)現(xiàn)對(duì)LCD屏讀寫(xiě)操作,驅(qū)動(dòng)程序可以實(shí)現(xiàn)直接對(duì)硬件訪問(wèn)、操作的功能,從而可以大大地加快了LCD屏的顯示速度。
嵌入式Linux下LCD驅(qū)動(dòng)簡(jiǎn)介
在嵌入式Linux環(huán)境下,LCD的驅(qū)動(dòng)已自動(dòng)加載,其設(shè)備文件名為“/dev/em9x60_lcd”。應(yīng)用程序通過(guò)調(diào)用5個(gè)IOCTL命令來(lái)實(shí)現(xiàn)對(duì)于LCD屏的操作。
EM9X60_LCD_IOCTL_TYPE: 用于設(shè)置LCD屏類(lèi)型。
EM9X60_LCD_IOCTL_LINE: 圖形方式的操作,包括畫(huà)點(diǎn)、畫(huà)線以及畫(huà)Bar條。
EM9X60_LCD_IOCTL_BLOCK:數(shù)據(jù)塊顯示操作,主要用于字模的顯示。
EM9X60_LCD_IOCTL_CLEAR:清屏操作。
EM9X60_LCD_IOCTL_UPDATE:用于刷新LCD屏數(shù)據(jù)。
針對(duì)于畫(huà)點(diǎn)、畫(huà)線、畫(huà)Bar條命令EM9X60_LCD_IOCTL_LINE需要用到以下結(jié)構(gòu):
struct lcd_line
{
unsigned int type; // = 0: point; = 1: line; = 2: bar
unsigned int x0;
unsigned int y0;
unsigned int x1;
unsigned int y1;
unsigned int color; // = 0: write '0'; = 1: write '1', = 2: xor operation
};
數(shù)據(jù)塊顯示操作命令EM9X60_LCD_IOCTL_BLOCK會(huì)用到struct lcd_block結(jié)構(gòu),該結(jié)構(gòu)中的數(shù)據(jù)data[16]中每個(gè)data[n] 值是按照x方向排列的,x 方向的大小最多為8個(gè)bit;數(shù)據(jù)data[0] ~ data[15]是按照y方向排列的,一次最多寫(xiě)16個(gè)字節(jié)大小的數(shù)據(jù)。這種數(shù)據(jù)塊結(jié)構(gòu)可應(yīng)用在寫(xiě)字模,或是公司專(zhuān)用圖形LOGO上。
struct lcd_block
{
unsigned int x0;
unsigned int y0;
unsigned int xsize; // = 1 - 8; left alignment
unsigned int ysize; // = 1 - 16;
unsigned char data[16]; // block data to be copied
};
如寫(xiě)一個(gè)漢字字模為16X16點(diǎn)陣的數(shù)據(jù),漢字模為ffont[32],可以用如下代碼來(lái)實(shí)現(xiàn):
LCD_WriteByteBlock( x, y, ffont, 16 );
LCD_WriteByteBlock( x+8, y, &ffont[16], 16 );
int LCD_WriteByteBlock( int x, int y, unsigned char* hfont, int NumOfBytes )
{
int rc;
unsigned int cmd;
struct lcd_block block;
int i1;
block.x0 = x;
block.y0 = y;
block.xsize = 8;
block.ysize = NumOfBytes;
for( i1=0; i1 {
block.data[i1]= hfont[i1];
}
cmd = EM9X60_LCD_IOCTL_BLOCK;
rc = ioctl(lcd_fd, cmd, &block );
if(rc < 0)
{
return rc;
}
return rc;
}
LCD應(yīng)用API函數(shù)簡(jiǎn)介
為了方便客戶的使用,在基于em9x60_lcd驅(qū)動(dòng)基礎(chǔ)上設(shè)計(jì)了一套通用的漢字及圖形顯示接口函數(shù),這些函數(shù)均定義在LCD_API.H中。LCD_API函數(shù)提供了一系列對(duì)LCD屏進(jìn)行畫(huà)點(diǎn)、畫(huà)線、畫(huà)Bar條以及字符串(包括漢字和西文)顯示的接口函數(shù),一共包括了11個(gè)函數(shù),關(guān)于各個(gè)函數(shù)的定義說(shuō)明,可以參見(jiàn)LCD_AP.H頭文件中的中文注釋。其中的漢字支持為標(biāo)準(zhǔn)一級(jí)全漢字,為16×16點(diǎn)陣字模或12×12點(diǎn)陣字模,西文(字母、數(shù)字和符號(hào))為8×14點(diǎn)陣字模,這兩個(gè)字模文件分別為cclib、cclib12.fnt、ascii.chr,放置在EM9160工控板的根文件系統(tǒng)“/lib”目錄中。
目前支持的LCD屏類(lèi)型包括有:
LCD控制器類(lèi)型 | 顯示分辨率 | 簡(jiǎn)要說(shuō)明 |
KS0108 | 128×64 | 最常用的LCD模塊 |
T6963C | 240×128 | 具有較大的顯示窗口 |
SED1335 | 320×240 | |
KS0108 | 192×64 | |
UC1698U | 160×160 | 電力集抄終端標(biāo)準(zhǔn)顯示屏 |
在頭文件LCD_API.H中的對(duì)應(yīng)定義如下。
#define LCD_12864 1 // LCD 128×64 KS0108控制器
#define LCD_240128 2 // LCD 240×128 T6963C控制器
#define LCD_320240 3 // LCD 320×240 SED1335控制器
#define LCD_19264 4 // LCD 192×64 KS0108控制器
#define LCD_1601605 // LCD 192×64 UC1698U控制器
經(jīng)過(guò)測(cè)試LCD的顯示速率得到了大大的提高,以下為常用的兩種LCD顯示速率:
LCD控制器類(lèi)型 | 顯示分辨率 | 清屏速率 | 滿屏字符顯示速率 |
T6963C | 240×128 | 10ms | 20ms |
UC1698U | 160×160 | 9ms | 12ms |
-
Linux
+關(guān)注
關(guān)注
87文章
11306瀏覽量
209572 -
嵌入式主板
+關(guān)注
關(guān)注
7文章
6085瀏覽量
35353
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論