基于液晶控制芯片T6963的液晶模塊動(dòng)態(tài)繪圖編程方法
液晶是人機(jī)交互最重要的通道,液晶不光要顯示文字信息,還要顯示波形信息,所以,編寫一套完善的函數(shù)庫(kù)是必不可少的,其中應(yīng)該包括顯示ASCII碼、字符串、整型數(shù)字、浮點(diǎn)數(shù)、漢字、畫點(diǎn)、畫線等一系列函數(shù)。
上層函數(shù)的建立離不開底層的驅(qū)動(dòng),最底層驅(qū)動(dòng)應(yīng)該是建立在液晶基本時(shí)序與指令的基礎(chǔ)上。如圖1,是液晶模塊的基本時(shí)序圖。
圖1 DMF5001液晶模塊基本時(shí)序圖
根據(jù)時(shí)序圖和控制指令,不難寫出基本的讀寫函數(shù)。這些函數(shù)就是構(gòu)建上層的基礎(chǔ)。之后,還必須了解液晶的基本顯示方式和充填方式。如圖2,是液晶模塊的緩沖區(qū)與顯示屏的映射關(guān)系。T6963控制芯片內(nèi)部有64KB的緩沖區(qū),可以由程序劃分為圖形、文本、文本特征3類緩沖區(qū),在不同緩沖區(qū)里寫入不同數(shù)據(jù),在液晶屏上將映射相應(yīng)的信息,這也就是液晶模塊顯示信息的原理。
圖2 DMF5001液晶映射方式
因?yàn)門6963內(nèi)部含有ASCII碼字庫(kù),所以要想顯示字符信息,只需在文本區(qū)內(nèi)填入相應(yīng)的信息即可。
如果要顯示漢字或圖形,則必須先在單片機(jī)內(nèi)部的ROM區(qū)建模,然后將這些信息寫入液晶的圖形緩沖區(qū),在液晶控制模塊的控制下,相應(yīng)的信息就會(huì)映射在顯示屏上,也就是我們看到的漢字或圖形信息了。
如果要實(shí)時(shí)顯示AD采集的波形圖以及FFT處理后的頻譜圖,這里將就動(dòng)態(tài)波形顯示用到的技術(shù)加以詳細(xì)介紹。
(1) 點(diǎn)的顯示
波形的顯示離不開“點(diǎn)”的顯示,所謂“點(diǎn)動(dòng)成線”也就這個(gè)道理,對(duì)于只有黑白兩級(jí)灰度的液晶來(lái)說(shuō),畫一個(gè)“點(diǎn)”就是將一個(gè)像素點(diǎn)亮。所以我們根據(jù)時(shí)序圖,先建立在LCD屏上顯示“點(diǎn)”的底層函數(shù)。在液晶屏上繪制“點(diǎn)”,有兩點(diǎn)需要注意,一是緩沖區(qū)空間的大小,二是像素的充填方式。在DMF5001液晶模塊中,“點(diǎn)”的繪制需要在圖形緩沖區(qū)中進(jìn)行。對(duì)于160×128像素的顯示屏,圖形緩沖區(qū)一共占用(160×128)/8=2560字節(jié)的空間,每一個(gè)字節(jié)對(duì)應(yīng)一個(gè)地址,也就是一共有2560個(gè)地址??紤]到DMF5001圖形的充填方式是從上到下,橫向填充,加上控制指令本身就支持對(duì)一個(gè)像素亮滅的控制。所以很容易根據(jù)緩沖區(qū)的地址,控制液晶屏上某一個(gè)點(diǎn)的亮滅,也就是所謂的畫“點(diǎn)”了。
(2) 坐標(biāo)系的建立
顯示波形,涉及到多個(gè)點(diǎn)的依次顯示,前后兩個(gè)點(diǎn)的顯示位置需要被確定,因?yàn)橹挥羞@樣,才能衡量被顯示波形的變化程度。所以,在液晶屏上建立一個(gè)參考坐標(biāo)系是很有必要的。由于圖形緩沖區(qū)與液晶屏上的點(diǎn)是一一映射的,我們不妨先在液晶屏上按照思維習(xí)慣規(guī)劃出一個(gè)坐標(biāo)系,然后根據(jù)坐標(biāo)系的坐標(biāo)值,再反映射到實(shí)際的緩沖區(qū)中,這樣,我們根據(jù)反映射之后的地址,就可以在液晶屏上對(duì)應(yīng)地址顯示“點(diǎn)”信息了。正如圖3所示。
圖3 液晶屏坐標(biāo)系與圖形緩沖區(qū)地址之間的映射
(3) 動(dòng)態(tài)波形的形成
我們?cè)谝壕峡吹降牟ㄐ问莿?dòng)態(tài)的,也就是說(shuō)波形應(yīng)該是連續(xù)閃動(dòng)變化的,這里涉及到一個(gè)掃描幀數(shù)的問(wèn)題。我們知道人眼的視覺(jué)暫留時(shí)間是0.1s,也就是說(shuō)如果圖像在一秒鐘內(nèi)連貫變化25次(幀),整個(gè)過(guò)程看上去就是“動(dòng)”起來(lái)的。對(duì)于本次作品的波形顯示來(lái)說(shuō),幀數(shù)越高,實(shí)時(shí)性就越好,當(dāng)大于25幀后,已經(jīng)看不出明顯的波形刷新過(guò)程了。但是由于實(shí)際控制器的工作速度有限,以及整個(gè)過(guò)程運(yùn)算量很大,只要能保證4到5幀的刷新率,就可滿足要求了,當(dāng)然,這是以犧牲了實(shí)時(shí)性為代價(jià)的。
波形刷新在軟件上的具體實(shí)現(xiàn)是比較容易的,因?yàn)樽鴺?biāo)系已經(jīng)被建立,所以顯示區(qū)域的大小就是已知的,一旦某次顯示區(qū)域被寫滿數(shù)據(jù),就馬上進(jìn)行該區(qū)域的清除,這樣就等于完成了一幀的掃描,往復(fù)進(jìn)行,被顯示的波形數(shù)據(jù)就“閃動(dòng)”起來(lái)了。
(4) 顯示數(shù)據(jù)的合理量化
AD模塊采集的數(shù)據(jù)如果不經(jīng)過(guò)處理而直接送入圖形緩沖區(qū)用于顯示,顯示效果是很差的。這是因?yàn)橐壕恋母叨群蛯挾榷际怯邢薜?,也就是說(shuō)屏幕的可視面積是有限的,加之我們?nèi)藶橐?guī)定了坐標(biāo)系,實(shí)際顯示的數(shù)據(jù)很可能會(huì)“溢出”坐標(biāo)系。這就需要我們根據(jù)坐標(biāo)抽的長(zhǎng)和寬,合理的縮?。ɑ蚍糯螅〢D采集的數(shù)據(jù)。示意圖如圖4所示。
以本次設(shè)計(jì)為例,液晶屏原始波形顯示區(qū)的坐標(biāo)抽規(guī)劃為:x軸有128個(gè)單位(像素),y軸有64個(gè)單位(像素),對(duì)于10位的AD,如果采集到最大電壓信號(hào)值,得到1023的AD值,為了能在顯示區(qū)域顯示出這個(gè)信號(hào)點(diǎn),需要進(jìn)行1024/64=16倍的比例縮小。如果被測(cè)量太小,顯示不明顯,我們同理也可以進(jìn)行比例放大,如果這時(shí)在屏幕上給出相應(yīng)的放大或縮小信息,就等于實(shí)現(xiàn)了顯示區(qū)域的伸縮擴(kuò)展,我們可以通過(guò)合理的計(jì)算,得到一個(gè)最佳的顯示比例,這也就是數(shù)字存儲(chǔ)示波器上自動(dòng)調(diào)節(jié)波形功能的技術(shù)雛形。
圖4 顯示數(shù)據(jù)的合理量化
(5) 優(yōu)化顯示效果
按比例縮小后的AD值是離散的,如果直接在屏幕上顯示,看到的是一個(gè)個(gè)離散的點(diǎn),視覺(jué)效果同樣很差,所以有必要對(duì)這些離散的點(diǎn)進(jìn)行插值補(bǔ)償,讓它們變得連續(xù)光滑。插值補(bǔ)償?shù)乃惴ê芏?,不同的算法帶?lái)的補(bǔ)償精度也不同,這里介紹一種最簡(jiǎn)單的補(bǔ)償方法:每當(dāng)顯示了一個(gè)點(diǎn),就用變量記錄下這個(gè)點(diǎn)的坐標(biāo)信息,當(dāng)顯示下一個(gè)點(diǎn)時(shí),對(duì)比前后兩個(gè)坐標(biāo)的差距,用跟蹤的方法,把兩個(gè)坐標(biāo)之間差的點(diǎn)補(bǔ)齊,這樣,就等于用線把兩個(gè)點(diǎn)連接在一起,波形看上去就光滑的多了。正如圖5所示。
圖5 波形優(yōu)化前后的不同效果
(6) 時(shí)標(biāo)軸左右滾動(dòng)的實(shí)現(xiàn)
根據(jù)實(shí)際的設(shè)計(jì)要求,為了方便波形數(shù)據(jù)的查閱,還設(shè)計(jì)了可以左右滾動(dòng)的時(shí)標(biāo)軸。其實(shí)現(xiàn)原理是,分別將在文本區(qū)顯示的自定義ASCII字符(這里是由“|”線構(gòu)成的時(shí)標(biāo)軸)與在圖形區(qū)顯示的波形在液晶屏上進(jìn)行合成顯示,這樣兩類信息在兩類緩沖區(qū)中運(yùn)算顯示,互不干擾,具體的對(duì)應(yīng)信息可以通過(guò)之前定義的坐標(biāo)系換算得到。這里也再次顯示出定義坐標(biāo)系的必要和方便。整個(gè)過(guò)程示意圖如圖6所示。[!--empirenews.page--]
圖6 時(shí)標(biāo)軸左右滾動(dòng)的實(shí)現(xiàn)
本次設(shè)計(jì)為DMF5001液晶模塊編寫了一整套的圖形函數(shù),充分滿足了顯示的需要。其中使用了一目了然的小圖標(biāo)來(lái)代表文字信息,更是將整個(gè)界面的友好程度提升了一個(gè)檔次。以下是一些實(shí)際顯示效果。
圖7 波形顯示效果圖