<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 光電顯示 > 設計應用 > 點(diǎn)陣液晶屏畫(huà)豎線(xiàn)算法的優(yōu)化及應用

點(diǎn)陣液晶屏畫(huà)豎線(xiàn)算法的優(yōu)化及應用

作者:吳永德,羅萍(廣東省電子職業(yè)技術(shù)學(xué)校,廣州 510515) 時(shí)間:2022-05-28 來(lái)源:電子產(chǎn)品世界 收藏
編者按:以SBN0064控制的點(diǎn)陣液晶模塊TG12864B為例,根據LCM內部顯示存儲器結構,對畫(huà)豎線(xiàn)程序進(jìn)行優(yōu)化,并給出了具體的C程序代碼。測試結果表明,采用優(yōu)化的豎線(xiàn)程序在繪制豎線(xiàn)、填充矩形、橢圓等常用基本圖形時(shí),可以大幅度地提高程序的運行速度,具有較強的實(shí)用價(jià)值。

液晶顯示屏(liquid crystal display,LCD) 因具有低功耗、體積小、重量輕、壽命長(cháng)、顯示信息量大、無(wú)閃爍等諸多特點(diǎn),被廣泛應用于各種顯示領(lǐng)域。在通訊設備、家用電器、儀器儀表等產(chǎn)品中,其顯示部件也越來(lái)越多采用了各種小尺寸的液晶顯示模塊(LCD Module,LCM)。液晶顯示模塊根據顯示方式可分為段位型、字符型和點(diǎn)陣型三種。其中點(diǎn)陣液晶顯示模塊由于既能顯示字符,又能顯示各種圖形,被廣泛應用于對圖文顯示要求相對較高的場(chǎng)合中。在進(jìn)行圖形用戶(hù)界面設計時(shí),矩形、圓、橢圓等都是常用的圖形元素,時(shí)都可通過(guò)調用畫(huà)點(diǎn)函數來(lái)實(shí)現。但對于單片機控制的小尺寸LCM 來(lái)說(shuō),當繪制的圖形點(diǎn)數較多(如內部填充的圖形),如采用畫(huà)點(diǎn)函數來(lái)繪制每個(gè)點(diǎn),運行速度會(huì )比較慢。如我們根據LCM 內部顯示存儲器結構特點(diǎn)對畫(huà)豎線(xiàn)程序進(jìn)行優(yōu)化,采用優(yōu)化的畫(huà)豎線(xiàn)程序來(lái)繪制這些內部填充的基本圖形,將可以大大提高程序的運行速度。本文將以STC90C52RC 單片機控制128(列)×64(行)點(diǎn)陣液晶顯示模塊(TGB)為例,根據LCM 的存儲器結構特點(diǎn),對其畫(huà)豎線(xiàn)程序進(jìn)行優(yōu)化,并將它應用到繪制內部填充的矩形、圓、橢圓等基本圖形中。

本文引用地址:http://dyxdggzs.com/article/202205/434592.htm

1   LCM與單片機接口電路設計

TGB 是廣州同華公司生產(chǎn)的一款無(wú)字庫的單色點(diǎn)陣液晶顯示模塊,控制芯片為SBN0064,支持68時(shí)序8 位并行總線(xiàn),采用標準20 腳接口[1]。VDD、VSS為模塊邏輯電路電源,VEE 是模塊內部提供的液晶驅動(dòng)電壓,V0 是液晶對比度調節端,LED+、LED- 是背光電源。單片機STC90C52RC 通過(guò)I/O 方式讀寫(xiě)控制TGB ,見(jiàn)圖1 所示。

image.png

2   LCM畫(huà)豎線(xiàn)算法的實(shí)現與優(yōu)化

我們采用的屏坐標系:TG12864B 屏的左上角為坐標原點(diǎn)(0,0),水平方向為x 軸,自左向右;垂直方向為y 軸,自上向下。TG12864B 屏上各點(diǎn)的亮滅由其內置的顯示數據RAM(DDRAM) 控制。這DDRAM 的每一位數據對應屏上一個(gè)點(diǎn)的亮(數據為1)和暗(數據為0)。DDRAM 與頁(yè)、列地址的對應關(guān)系如下表1所示。

1653745279823531.png

CS1=1 時(shí),DDRAM 的列地址0-63 對應左半屏的0-63 列;CS2=1 時(shí),DDRAM 的列地址0-63 對應右半屏的0-63 列。DDRAM 的頁(yè)地址為0-7,每頁(yè)8 位,共64 位,分別對應著(zhù)顯示屏的0-63 行。用戶(hù)可通過(guò)頁(yè)地址和列地址按字節讀寫(xiě)DDRAM。

2.1 畫(huà)點(diǎn)程序

對點(diǎn)陣顯示屏來(lái)說(shuō),點(diǎn)是一切圖形的基礎。對單色屏來(lái)說(shuō),對它的每個(gè)像素點(diǎn)只有三種操作:畫(huà)點(diǎn)、擦除點(diǎn)、取反點(diǎn)(點(diǎn)由亮變暗,或由暗變亮)。根據LCM 內部的DDRAM 結構,我們在其屏幕上描畫(huà)一個(gè)點(diǎn),比如點(diǎn)(15,20),步驟如下:

(1)根據點(diǎn)的屏幕坐標(15,20),計算出它的DDRAM 地址:左半屏(CS1=1),DDRAM 列地址為15,頁(yè)地址為2。

(2)讀出該地址對應存儲單元(1 字節)的數據。

(3)根據需要對該點(diǎn)的操作(畫(huà)點(diǎn)、擦除點(diǎn)、取反點(diǎn)),對該字節數據的對應位(DB4 位)進(jìn)行相應的處理,獲得一個(gè)新的數據。

(4)將新數據寫(xiě)回原地址的DDRAM。

按以上思路,用C 語(yǔ)言編寫(xiě)TG12864B 的畫(huà)點(diǎn)函數如下。為了書(shū)寫(xiě)方便,我們重新定義無(wú)符號字符數據類(lèi)型為uchar。程序中用到兩個(gè)讀、寫(xiě)DDRAM的底層函數,聲明如下:

uchar ReadPosDat(uchar page,uchar col);

// 讀DDRAM page 頁(yè),col 列的一字節數據, 并返回

void WritePosDat(uchar page,uchar col,uchar dat);

// 將一字節數據dat 寫(xiě)到DDRAM page 頁(yè),col 列

/**************************************************

參數:屏幕像素坐標(x,y),列x(0-127),行y(0-63)

type=0: 該點(diǎn)填充0,擦除點(diǎn)

type=1: 該點(diǎn)填充1,畫(huà)點(diǎn)

type=2: 該點(diǎn)取反 ,取反點(diǎn)

**************************************************/

void draw_point(uchar x,uchar y,uchar type){ uchar dat,page;

1676272013311580.png

2.2 傳統的畫(huà)豎線(xiàn)程序

直線(xiàn)由點(diǎn)構成。給出豎線(xiàn)的起點(diǎn)和終點(diǎn)坐標,根據前面的畫(huà)點(diǎn)函數便可逐點(diǎn)畫(huà)出豎線(xiàn),其C語(yǔ)言程序如下:

/**************************************************

畫(huà)豎線(xiàn)函數( 利用畫(huà)點(diǎn)函數)

參數:type=0, 擦除;type=1, 畫(huà)線(xiàn);type=2,取反x 為水平坐標值,y0,y1 為起點(diǎn)和終點(diǎn)的垂直坐標值

**************************************************/

1676280578860744.png

2.3 畫(huà)豎線(xiàn)程序的優(yōu)化

根據表1 DDRAM 與屏幕顯示位置的關(guān)系, 由DDRAM 頁(yè)地址和列地址確定的1 個(gè)字節單元對應著(zhù)屏幕的Y 軸方向的8 個(gè)像素點(diǎn)。在我們上面傳統的畫(huà)豎線(xiàn)程序中,采用逐點(diǎn)描畫(huà)豎線(xiàn),對同一個(gè)DDRAM 字節對應的點(diǎn),也需要重復的操作8 次:重復讀同一個(gè)DDRAM 字節8 次,計算該字節上對應位8 次,回寫(xiě)該字節8 次。顯然,這是一個(gè)巨大的冗余。其實(shí),根據DDRAM 的結構特點(diǎn),在畫(huà)豎線(xiàn)時(shí),我們通過(guò)讀、修改、寫(xiě)DDRAM 1 個(gè)字節1 次,就可直接描畫(huà)出豎線(xiàn)上的8個(gè)點(diǎn)。而且,在進(jìn)行畫(huà)線(xiàn)或擦除線(xiàn)操行時(shí),除了豎線(xiàn)的起點(diǎn)和終點(diǎn)所在DDRAM 字節,我們需要進(jìn)行讀、修改、寫(xiě)操作,豎線(xiàn)經(jīng)過(guò)的中間字節,我們直接寫(xiě)入全1 或全0 就可以了,這將大大提高程序的運行速度?;谝陨纤枷?,我們對畫(huà)豎線(xiàn)程序進(jìn)行優(yōu)化,其C 語(yǔ)言程序如下:

/*************************************************

優(yōu)化的畫(huà)豎線(xiàn)函數

參數:type=0, 擦除;type=1, 畫(huà)線(xiàn);type=2,取反x 為水平坐標值,y0,y1 為起始和終點(diǎn)的垂直坐標值

**************************************************/

1676280716391535.png

1676280748638721.png

1676280775539345.png

1676280847349064.png

1676280883345015.png

1676280904752058.png

1676280924225759.png

2.4 畫(huà)豎線(xiàn)程序的測試

對這兩種畫(huà)豎線(xiàn)函數,輸入各種不同的運行參數(uchar x,uchar y0, uchar y1,uchar type),測量它們的運行效果和時(shí)間。

運行時(shí)間測試方法:采用電路中的STC90C52RC單片機(外接晶振12MHz)的定時(shí)器T0 進(jìn)行檢測,設置T0 為16 位定時(shí)模式,一次定時(shí)50 ms,采用中斷方式工作。50 ms 以上的時(shí)間,通過(guò)統計中斷次數計算獲得,50 ms 以?xún)鹊臅r(shí)間,通過(guò)讀取定時(shí)器的計數寄存器TH0、TL0 獲得。經(jīng)過(guò)運行測試,兩種畫(huà)豎線(xiàn)函數均能正確畫(huà)出相應的豎線(xiàn),運行時(shí)間如表2 所示。

1653746762972390.png

在以上三組測試數據中,傳統的畫(huà)豎線(xiàn)程序的運時(shí)間分別是優(yōu)化的畫(huà)豎線(xiàn)程序的5.7 倍、11.5 倍和9.1 倍,優(yōu)化效果顯著(zhù)。

3   畫(huà)豎線(xiàn)程序在圖形填充中的應用

在進(jìn)行圖形用戶(hù)界面設計時(shí),矩形、圓、橢圓等都是常用的基本圖形元素。采用優(yōu)化的畫(huà)豎線(xiàn)程序來(lái)繪制這些內部填充的基本圖形,相比直接采用畫(huà)點(diǎn)函數(種子填充法、掃描線(xiàn)填充法[2])或基于畫(huà)點(diǎn)函數的傳統畫(huà)豎線(xiàn)程序,可以大幅地提高程序的運行速度。

3.1 畫(huà)填充矩形

給出矩形的左上角點(diǎn)和右下角點(diǎn)坐標,根據上面的畫(huà)豎線(xiàn)函數,便可從左到右逐根豎線(xiàn)地繪制出填充的矩形,其C 語(yǔ)言程序如下:

/*************************************************

畫(huà)填充矩形函數

參數:x0、y0 為矩形左上角點(diǎn)坐標

x1、y1 為矩形右下角點(diǎn)坐標

type=0,填充0;type=1,填充1;type=2,

取反

**************************************************/

void draw_rectangle_fill(uchar x0,uchar y0,uchar x1,uchar y1,uchar type)

{ while(x0 <= x1)// 畫(huà)填充矩形

          { imp_vline(x0,y0,y1,type);

            x0 ++;

           }

}

對調用傳統的畫(huà)豎線(xiàn)函數實(shí)現的填充矩形函數和調用優(yōu)化的畫(huà)豎線(xiàn)函數實(shí)現的填充矩形函數,輸入各種不同的運行參數(uchar x0,uchar y0,uchar x1,uchar y1,uchar type),測量它們的運行效果和時(shí)間。經(jīng)過(guò)運行測試,兩種畫(huà)填充矩形函數均能正確畫(huà)出相應的矩形,運行時(shí)間如表3 所示。

1653746870235062.png

在以上三組測試數據中,采用傳統畫(huà)豎線(xiàn)函數的填充矩形程序的運行時(shí)間分別是采用優(yōu)化畫(huà)豎線(xiàn)函數的填充矩形程序的9.3 倍、10.0 倍、9.1 倍,優(yōu)化效果顯著(zhù)。

3.2 畫(huà)填充橢圓

根據中點(diǎn)生成橢圓的整數型算法[3],可計算出橢圓圓心在坐標原點(diǎn)的標準橢圓在第一象限上的1/4 橢圓弧的各點(diǎn)坐標。再由橢圓關(guān)于X 軸和Y 軸的對稱(chēng)性,便可得到其在另外3 個(gè)象限的橢圓弧坐標。經(jīng)過(guò)平移,就可得到橢圓圓心在任意位置的橢圓弧各點(diǎn)坐標。以橢圓弧關(guān)于過(guò)橢圓圓心的水平線(xiàn)對稱(chēng)的每一對點(diǎn)為端點(diǎn)畫(huà)豎線(xiàn),便能畫(huà)出內部填充的橢圓。

對調用傳統的畫(huà)豎線(xiàn)函數實(shí)現的填充橢圓函數和調用優(yōu)化的畫(huà)豎線(xiàn)函數實(shí)現的填充橢圓函數,輸入各種不同的運行參數(uchar x0,uchar y0,uchar a,uchar b,uchar type) ,(x0,y0)為橢圓圓心坐標,a 為橢圓長(cháng)半軸,b 為橢圓短半軸。測量它們的運行效果和時(shí)間。經(jīng)過(guò)運行測試,兩種畫(huà)填充橢圓函數均能正確畫(huà)出相應的橢圓,運行時(shí)間如表4 所示。

1653746939767262.png

在以上三組測試數據中,采用傳統畫(huà)豎線(xiàn)函數的填充橢圓程序的運行時(shí)間分別是采用優(yōu)化畫(huà)豎線(xiàn)函數的填充橢圓程序的7.8 倍、10.0 倍、6.1 倍,優(yōu)化效果顯著(zhù)。

5   結論

本文以SBN0064 控制的點(diǎn)陣TG12864B為例,根據LCM 內部顯示存儲器結構,對畫(huà)豎線(xiàn)程序進(jìn)行優(yōu)化,在繪制豎線(xiàn)、填充矩形、圓形、橢圓等常用基本圖形時(shí),可以大幅度地提高程序的運行速度,具有較強的實(shí)用價(jià)值。以上結論,亦適用于其它采用SBN0064 或其兼容芯片( 如KS0108、S6B0108、HD61202 等)控制的12864 點(diǎn)陣。而對采用ST7920 或其兼容芯片控制的帶中文字庫的點(diǎn)陣液晶模塊,則可根據其內部GDRAM 結構,對畫(huà)橫線(xiàn)程序進(jìn)行優(yōu)化。

參考文獻:

[1] 廣州同華實(shí)業(yè)有限公司.TG12864B-01使用說(shuō)明書(shū)[EB/OL].[2021-10].http://gb.tinsharp.com.

[2] 郭曉新,徐長(cháng)青,楊瀛濤.計算機圖形學(xué)[M].3版.北京:機械工業(yè)出版社,2017:25-28.

[3] 張博,周麗韞,李興霞.中點(diǎn)生成橢圓的整數型算法[J].工程圖學(xué)學(xué)報,2011,32(1):1-4.

[4] 譚浩強.C程序設計[M].5版.北京:清華大學(xué)出版社,2017.

(本文來(lái)源于《電子產(chǎn)品世界》雜志2022年5月期)



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>