日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

點(diǎn)陣式液晶任意圖片顯示的實(shí)現(xiàn)

 弓道自然_改名 2007-11-22

式液晶任意圖片顯示的實(shí)現(xiàn)

標(biāo)簽: 點(diǎn)陣  繪圖  液晶  圖形  memo 
點(diǎn)陣式液晶任意圖片顯示的實(shí)現(xiàn)
長(zhǎng)江大學(xué)電子信息學(xué)院 孫先松

引言

液晶顯示器(Liquid Crystal Display,LCD )具有功耗低、體積小、質(zhì)量輕、超薄和可編程驅(qū)動(dòng)等其他顯示無法比擬的優(yōu)點(diǎn),不僅可以顯示數(shù)字、字符,還可以顯示漢字及各種圖形、圖片,可實(shí)現(xiàn)屏幕上下左 右滾動(dòng)、動(dòng)畫、反轉(zhuǎn)顯示、顯示閃爍多種功能,日益成為智能儀器儀表和測(cè)試設(shè)備的首選顯示器件。目前常用的LCM12864系列的液晶模塊,一般都沒有圖形 驅(qū)動(dòng)模塊,而圖形作為一種更為生動(dòng)的表現(xiàn)方式,是用戶需求的重點(diǎn)和設(shè)計(jì)的亮點(diǎn)。如何在這種點(diǎn)陣式液晶顯示器中顯示任意靜態(tài)圖片以及動(dòng)畫, 成為困擾設(shè)計(jì)者大量應(yīng)用LCD的問題。我們現(xiàn)在可以通過互聯(lián)網(wǎng)、圖形處理軟件及掃描儀等很方便地獲得各種各樣的圖像、圖片,這樣可以通過比較簡(jiǎn)單的方法把 任意圖片移植到液晶顯示器LCD上。文章通過分析BMP圖像的存儲(chǔ)格式和128 64點(diǎn)陣LCD上圖像顯示的原理,設(shè)計(jì)了一個(gè)LCD圖片數(shù)據(jù)轉(zhuǎn)換及模擬顯示的軟件,并介紹了實(shí)現(xiàn)LCD意圖片的顯示方法。


BMP圖片格式及LCD顯示原理

BMP位圖是微軟公司(Microsoft)和國際商用機(jī)器公司(IBM)共同倡導(dǎo)的一種圖片格式。它按點(diǎn)陣排列順序,將每個(gè)像素的色彩值以規(guī)定的 方式把整個(gè)圖片記錄下來。根據(jù)色彩位深度不同,Windows BMP文件像素描述部分差別較大,如256色每個(gè)像素需要8位(即1個(gè)字節(jié))來描述,而16色的圖片每個(gè)像素描述者只需4 位(即半個(gè)字節(jié))。對(duì)于絕大部分電子設(shè)計(jì)者來說,最常用的是黑白二色的點(diǎn)陣式液晶顯示器。因此,這里僅分析對(duì)Microsoft Windows類型1位(Bit)描述的黑白二色BMP圖片文件的處理。

一幅128 64點(diǎn)陣的黑白BMP圖片文件的總長(zhǎng)度為1086字節(jié),前62個(gè)字節(jié)是文件頭,用于表示文件類別、長(zhǎng)度、圖像的行數(shù)以及列數(shù)等信息,地址為 00H~3DH;后1024字節(jié)則對(duì)應(yīng)畫面的點(diǎn)陣數(shù)據(jù),地址為3EH~43DH。BMP文件的中字節(jié)排列與點(diǎn)陣數(shù)據(jù)對(duì)應(yīng)關(guān)系如圖1 所示,BMP點(diǎn)陣數(shù)據(jù)塊第0個(gè)字節(jié)對(duì)應(yīng)圖片中左下角第63行的第0到7列,第15個(gè)字節(jié)對(duì)應(yīng)圖片中第63行的第112到127列,也就是按照從左至右,從 下到上的順序,BMP數(shù)據(jù)塊最后一個(gè)字節(jié)對(duì)應(yīng)第0行的112到127列。因此,要想實(shí)現(xiàn)將BMP圖片文件轉(zhuǎn)化為供模塊直接顯示的數(shù)據(jù),不但涉及到各個(gè)數(shù)據(jù) 排列的先后順序,還涉及到字節(jié)中各個(gè)位的重組。

對(duì)于RT12864HZ漢字圖形點(diǎn)陣液晶顯示模塊,它可顯示漢字及圖形,內(nèi)置8192個(gè)中文漢字(16 16點(diǎn)陣)、128個(gè)字(8 16點(diǎn)陣)及繪圖顯示RAM(GDRAM)。繪圖顯示RAM提供128 8個(gè)字節(jié)的記憶空間,在更改繪圖RAM時(shí),先連續(xù)寫入水平與垂直的坐標(biāo)值,再寫入兩個(gè)字節(jié)的數(shù)據(jù)到繪圖RAM,而地址計(jì)數(shù)器(AC)會(huì)自動(dòng)加一;在寫入繪 圖RAM的期間,繪圖顯示必須關(guān)閉,整個(gè)寫入繪圖RAM的步驟如下:

(1) 關(guān)閉繪圖顯示功能。
(2) 先將水平的位元組坐標(biāo)(X)寫入繪圖RAM地址;再將垂直的坐標(biāo)(Y)寫入繪圖RAM地址;將D15~D8寫入到RAM中;將D7~D0寫入到RAM中。
(3) 打開繪圖顯示功能。

繪圖顯示的緩沖區(qū)與圖形點(diǎn)陣對(duì)應(yīng)分布參考圖2所示(水平方向X以字節(jié)單位,垂直方向Y以位為單位)。

 

點(diǎn)陣式液晶任意圖片顯示的實(shí)現(xiàn)

用DELPHI語言轉(zhuǎn)換BMP圖片數(shù)據(jù)

Windows中的畫圖軟件為圖片編輯提供了放大、網(wǎng)格、旋轉(zhuǎn)、定位、定幅等強(qiáng)大、實(shí)用而靈活的功能,同時(shí)有輸入各種字體及大小的漢字的功能,是編 輯畫面的理想工具。打開菜單[圖像]下的[屬性]項(xiàng),設(shè)置任意圖片寬度為128,高度為64,單位為像素,顏色為黑白。保存的BMP文件經(jīng)過下面 DELPHI編寫的函數(shù)s_copyfile()便可轉(zhuǎn)換為L(zhǎng)CD模塊顯示的點(diǎn)陣數(shù)據(jù),數(shù)據(jù)以單片機(jī)數(shù)據(jù)表定義的格式放在Memo1中,可以直接拷貝至 LCM控制匯編程序中當(dāng)數(shù)據(jù)表用,如圖3所示。另外使用了heckBox1控件來使圖片反白。

 

函數(shù)s_copyfile()的源程序如下[4]:
function s_copyfile(filesou:string;filedes:string):boolean;
var
FromF, ToF: file;
s,t:string;
i,j,NumRead, NumWritten: Integer;
tem: array[1..62] of Char;
Buf: array[1..16] of Char;
begin
{$I-}
s_copyfile:=false;
if not fileexists(filesou) then
begin
showmessage(‘沒有發(fā)現(xiàn)源文件‘+#13+filesou);
exit;
end;
assignfile(fromf,filesou);
assignfile(tof,filedes);
Reset(FromF,1);{ Record size = 1 }
main.Memo1.Clear;
main.Memo3.Clear;
BlockRead(FromF, tem, SizeOf(tem), j);
j:=1;
repeat
s:=‘ DB ‘;
t:=‘‘;
BlockRead(FromF, Buf, SizeOf(Buf), NumRead);
for i:=1 to NumRead do
begin
if main.CheckBox1.Checked then buf[i]:=chr
(255-ord(buf[i]));
appendstr(t,IntToHex(ord(buf[i]),2));
if ord(buf[i])>159 then
AppendStr(s,‘0‘+IntToHex(ord(buf[i]),2)
+‘H,‘)
else
AppendStr(s,IntToHex(ord(buf[i]),2)
+‘H,‘);
end;
delete(s,length(s),1);
main.memo1.Lines.Append(s);
main.memo3.Lines.Append(t);
inc(j);
until (NumRead = 0);
main.Memo1.Lines.Delete(main.Memo1.Lines.
Capacity-1);
CloseFile(FromF);
CloseFile(ToF);
s_copyfile:=true;
end;
LCD模擬顯示

 


對(duì)于如圖4所示的一張128 64的BMP圖片,其模擬顯示如圖5所示,反白后顯示如圖6所示。

有的LCM數(shù)據(jù)是奇偶行交錯(cuò)的,也可以通過使用隔行來改變。模擬顯示的源程序主要是采用在畫布上畫矩形框的方法,語句如下:


Image1.Canvas.FillRect(rect(16*S_col+4*i,
4*S_row,16*S_col+4*i+3,4*S_row+3));
其中S_col為行坐標(biāo)(1~64),S_row為列坐標(biāo)(0~31),每個(gè)字節(jié)分高4位與低4位分別來畫矩形框。當(dāng)高4位或低4位值為1~F時(shí),對(duì)應(yīng)的i分別如表1所示。

LCD顯示控制程序設(shè)計(jì)

LCM內(nèi)部帶有8K字節(jié)的RAM緩存區(qū),往RAM緩存區(qū)寫入數(shù)據(jù),則在LCD 顯示屏上產(chǎn)生顯示。通過改變顯示緩存區(qū)首地址可實(shí)現(xiàn)屏幕滾動(dòng)、屏幕換頁等功能。

GRAPHIC_DISP:

LCALL CLEAR_GRAPHIC ;清除圖形顯示RAM單元(GDRAM)
MOV G_ROW, #80H ;設(shè)定圖形顯示起始行單元
MOV G_COLUMN, #80H ;設(shè)定圖形顯示起始列單元

GRA_DISP:

MOV A, #34H ;選擇擴(kuò)充指令集,關(guān)閉圖形顯示
LCALL INPUT
MOV A, G_ROW ;輸入圖形顯示起始行地址
LCALL INPUT
MOV A, G_COLUMN ;輸入圖形顯示起始列地址
LCALL INPUT
MOV A, #30H ;重新選擇基本指令集
LCALL INPUT
CLR A
MOVC A, @A+DPTR ;輸入顯示數(shù)據(jù)(橫向高8位數(shù)據(jù))
LCALL DISPL
INC DPTR
CLR A
MOVC A, @A+DPTR ;輸入顯示數(shù)據(jù)(橫向低8位數(shù)據(jù))
LCALL DISPL
INC DPTR
INC G_COLUMN ;列地址加一
MOV A, G_COLUMN
CJNE A, #90H, GRA_DISP ;最后一列地址為90H(共計(jì)16列)
MOV G_COLUMN, #80H
INC G_ROW ;行地址加一
MOV A, G_ROW
CJNE A, #0A0H, GRA_DISP ;最后行地址為0A0H
MOV G_COLUMN, #80H
MOV G_ROW, #80H
MOV A, #36H ;打開圖形顯示
LCALL INPUT
RET

在上面程序中,是與圖2所示的GRAM映射的點(diǎn)陣坐標(biāo)一樣,分成0~15列,每列寫2個(gè)字節(jié)數(shù)據(jù),共有32行。CLEAR_GRAPHIC為清除圖 形顯示CGRAM的子程序,INPUT為寫指令子程序,DISPL為寫數(shù)據(jù)子程序,這里不再詳細(xì)列出。另外硬件設(shè)計(jì)時(shí),注意空腳(NC)應(yīng)懸空,不能接 地。調(diào)試時(shí),適當(dāng)調(diào)整液晶顯示偏壓信號(hào)V0,使之在一合適電壓,這一電壓若設(shè)置不當(dāng),LCM 無法正常工作。


結(jié)束語

按照上面分析的方法,可以方便的在液晶上顯示任意圖片。點(diǎn)陣的LCD模塊還可實(shí)現(xiàn)屏幕合成、滾動(dòng)、動(dòng)畫、閃爍等功能,正越來越受到廣泛的應(yīng)用和關(guān) 注。需要指出的是,由點(diǎn)陣液晶顯示器件與相應(yīng)的控制器、驅(qū)動(dòng)器裝配成的顯示模塊的種類較多,其功能、指令、接口定義及引腳并無統(tǒng)一標(biāo)準(zhǔn),具體使用時(shí)應(yīng)加以 選擇。

評(píng)論 (0) |  閱讀 (23)  |  固定鏈接 |  類別 (單片機(jī)學(xué)習(xí)) |  發(fā)表于 09:46

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多