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