無字庫12864液晶的驅動方法_第1頁
無字庫12864液晶的驅動方法_第2頁
無字庫12864液晶的驅動方法_第3頁
無字庫12864液晶的驅動方法_第4頁
無字庫12864液晶的驅動方法_第5頁
已閱讀5頁,還剩10頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、無字庫12864液晶的驅動方法在制作單片機系統時,一般都需要用顯示器件來顯示單片機的工作狀態并顯示輸出結果,如LED數碼管和液晶顯示器等。LED最簡單,但能給出的信息很少。數碼管能清晰地顯示數字和部分字母,但是耗電較大,不適合使用電池供電的裝置。常見的液晶顯示器有段式液晶、字符液晶和圖形液晶等。其中,段式液晶最省電,但對于通用顯示使用起來不很方便,只能顯示固定式 數字或符號,而且需要專用驅動電路或特殊的單片機。字符液晶(如1602)用得比較多,容易和單片機配合,但是一般都需要5V工作電壓,雖然現在也有3V就可以工作的模塊,但是體積還是較大,而且只能顯示數字和西文字符,無法顯示圖形和漢字。點陣液

2、晶模塊既可以顯示 ASCII字符,又可以顯示漢字和圖形,相對于前面幾種,具有更大的靈活性,所以使用得越來越多。不過常用 的圖形液晶因為顯示面積增加,體積比字符液晶(如 1602)更大,價格也更貴。初學者要注意的是,12864圖形點陣液晶隨著廠家設計 使用的驅動芯片不同,驅動程序有所區別,不像 1602那樣基本通用。幾種常見的12864圖形點陣模塊12864點陣液晶模塊分為帶漢字庫和不帶漢字庫兩大類,目前帶漢字庫的通常是ST792C驅動,它可以工作在漢字字符方式和圖形點陣方式,很多制作都用它,如果需要顯示較多漢字,用它最為方便。在顯示漢字數量很少的場合,我們可以使用更加廉價的、不帶字庫的點陣液晶

3、模塊,這正是本文重點介紹的。它們的控制電路有KS0108 和ST7565兩種:KS0108艮簡單,一共只有7條指令,可是它沒有串行接口;ST7565有20多條指令(最常用的也就幾條),有串行接口,可選串行或并行工作。KS0108W ST7565勺指令和上述帶字庫的ST792C區別較大,所以初學者買液晶時一定要搞清楚是哪種驅動電路。 即使同樣的驅動電路,不同廠家或者不同型號的產品,具體細節仍可能不同。例如有的片選信號是高電平有效,有的卻是低電平有效, 有的把顯示區分為左右兩半分別選取,有的卻不加區分。所以使用前要仔細看廠家說明,如果沒有,就要看液晶模塊背面給出的具體型 號,根據這個型號去查找使用

4、手冊。筆者最近在淘寶網上搜尋到一款12864的圖形點陣液晶,只有4cm寬、3.5cm高,顯示面積為3.2cm寬、1.95cm高,非常小巧。更加難能 可貴的是它可以在3V低電壓工作,很適合我們制作小型便攜裝置。該液晶模塊型號是 SP12864FPD-12CSBE由北京集粹電子設備公司出 品,它的外形見圖1。圖1 12864圖形點陣液晶模塊圖2小小日歷鐘(文字界面)圖3小小日歷鐘(圖形界面)圖2、圖3所示為筆者用它制作的一個小小日歷鐘,它的特點是具有可以隨意轉換的文字和圖形界面。文字界面除了顯示年月日時分秒, 在右上角還有一個小雞啄米的小動畫,圖形界面用指針在刻度上指示出時分秒,是不是有點新意呢?

5、圖4所示是調頻收音機的顯示屏,用進度條指示音量,用刻度尺顯示信號強度,比1602只能顯示數字和字母要生動多了。沒有字庫用起來是否很麻煩?其實搞清了圖形點 陣的基本工作原理,用起來并不麻煩卻更靈活,不帶字庫我們就按需要打造字符!£7£ . " yr二S-ii!"? E JrA.yNna£:- 彳?K、J$iw 二 浴彳衣L.慮j«-r.:r;fJ? r,電H*/yd,;w 廠門A 、 c< o: J. <>>A *V.Y10 陰 <A*5亠“y £l_:s士.,至曇H FT- 一:*y 2I ;=

6、。.-.4'.汐J、j 、亠SEEK ?6 MHz ;ImlRSSI VOL >!'. r二 -20-13:3115rr0 12 3 127列列列歹U列圖4調頻收音機 圖5液晶模塊采用 COG”封裝 圖6點陣液晶顯示原理下面就談談這個液晶的驅動方法,以后將給出一些制作實例,以幫助初學者用它做出具有個性的東西。液晶模塊SO12864-12Q簡介此型號小液晶包括一系列子型號,詳見。這次所用的 SO12864FPD-12CSB只是其中的一種,我們先來了解一下它的主要特性:邏輯或電源電壓2.85.5V;藍色背光,背光電壓3V;串行接口,用8個焊盤引出包括電源、背光、地和控制線數據

7、線;不帶字庫,需要自己編輯外部字模數組;速度較快,用時鐘1MHz的AVR單片機驅動,編程時無須附加脈沖額外延時;使用ST7565電路,命令代碼一共23條。顯然,它十分適合低壓小尺寸場合應用,串行接口最大限度減少了液晶和單片機的連線,雖說比并行慢一點,實際上如果不是頻繁刷屏 影響并不大。要自己編制字庫確實比較麻煩,但是只要顯示的文字量少,制作小字模也不困難,反而可以自己打造個性化的字體,使得 顯示具有特色。把液晶模塊翻過來,如圖5所示,發現電路板上沒有通常液晶模塊的黑膠封裝集成電路,原來這個液晶采用的是“COG封裝,就是把集成電路直接綁定在液晶玻璃板上。它的8個接口焊盤位于模塊上方,定義如下:1

8、. 片選CS它為低電平才能進行操作,在加載數據后至少維持40ns低電平。2. 復位RES啟動時至少維持1卩s低電平以使液晶內部復位,然后升高,再過 1卩s完成復位,以后才能對液晶進行操作。3. 命令數據選擇A0:高電平為數據,低電平為命令。4. 串行時鐘SCL頂底寬度至少25ns,低時AC和SI至少穩定20ns,然后在上升沿加載數據或命令。5. 串行數據SI :同上,在SCL上升沿加載后至少還要保持10ns穩定。6. 電源正VCC最低2.8V,標準3V,最大5.5V。7. 地 VSS8. 背光LED+藍色背光最低2.8V,標準3V,最大3.2V,使用時要注意不要超過。在串行模式時,一個命令或數

9、據字節要分為 8次加載,從最高位開始。圖形點陣的顯示原理12864點陣液晶的圖形顯示原理都差不多。液晶屏x方向(水平)具有128列像素從左到右為第0列第127列,y方向(垂直)具有64行像素。每8行組成1頁,從上到下就是第0頁第7頁。這樣以列號和頁號為坐標,就可以指定交叉位置的8個像素。例如第0、1、2、 3列第1頁的8個像素,如圖6所示。在液晶內部有一塊顯示緩存區,按照列號和頁號就可以對顯緩區的某個字節寫數,該字節的8位二進制數就對應了液晶屏同樣位置的像素的亮滅,如對第1列第1頁的那個緩存單元寫入0X80即0b10000000,那么液晶對應位置的最下面一點 7亮(低位在上高位在下)其余都滅,

10、如果第 2列第1頁寫入0X0F即0b00001111,貝U該位置上方4個點0123亮,其余像素不亮,第3列第1 頁寫0X33,則該處間隔2點亮。這樣就可以通過程序控制液晶屏的任意像素了。 不同的液晶屏指令代碼可能不同(例如這個屏和常見的7920 驅動不一樣),屏幕劃分也可能不同,例如有的是分為左右兩半,每半邊64列,有的是分為上下兩半等。液晶SO12864-12C的編程要點控制液晶最基本的工作就是往液晶的控制器寫入命令碼或往顯緩區寫入數據碼,是命令還是數據由加到上述A0的電平高低決定:高,數據;低,命令。因為現在是串行傳送,所以只能由高到低一位位寫。串行只能寫不能讀。以前要靠讀來判定液晶是否忙

11、,這個液晶速度較高,實際使用證明串行傳輸不用讀忙。編程就是用單片機的幾根口線按照所需的時序發出高低電平,再往液晶里送入代碼或數據。控制脈沖和代碼脈沖的時序關系如圖7所示CS 片 1LTSI為命令A0命令數據選擇XSI為數據SCL時鐘(SI命令碼或數據XD7 X 06圖7控制脈沖和代碼脈沖的時序關系最常用的幾個命令1. 顯示開/關:代碼:OXAF開),OXAE關)啟動復位后為“關”,必須在液晶初始化時置“開”。2. 頁地址定位:代碼:OXBO0XB7,對應第0頁到第7頁,復位后自動安置為第0頁。3. 列地址定位:列地址是0X000X7F,但不是直接用列地址而要轉換為雙字節代碼。方法是0X10加原

12、高4位和0X00加原低4位。例如第33列,本是0X21,現在應該轉換為0X12和0X01,分2次寫入。4. 寫顯示數據:代碼就是顯示數據,控制脈沖A0為高。5. 復位:代碼0XE2通過程序使得液晶恢復各種起始默認狀態。有了這幾條命令就已經可以使液晶畫出以像素點為基礎的圖形或字符了。有些其他命令(如對比控制、亮度、偏壓等)就取默認值,無 需修改(初始化要用一下),還有些很有用的命令(如反向列頁掃描、起始行、反白顯示等),需要時再去查資料不遲。有了上述命令代 碼,我們就可以通過匯編或 C語言,按照控制時序編出子程序或函數,以便在程序中使用。C語言因為易讀性好、通用性好、移植性好所以用得較多,下面就

13、給出一些 C的函數,由它們就構成了液晶的驅動。驅動液晶的基本C函數我們用C語言編程,在C語言里,用“函數”把單片機的一系列具體操作包裝起來起個函數名,需要時直接按名調用即可,非常方便。首先必須解決怎樣對液晶串行寫數據的問題,然后按照A(線的高低,我們就可以自行編出寫數據函數和寫命令函數。一下只列出函數說明和用法舉例,函數的具體內容可到無線電網站上下載C程序代碼。1. 串行傳送1字節數據函數,參數為待傳字節。void LcdWriByte( un sig ned char nn) nn就是待寫字節這個是最基本的函數,不過我們不直接用它而是把它放在其他寫數據函數里調用。2. 寫命令。參數為命令碼。

14、void LcdWriComma nd(un sig ned char comma nd);例如,打開顯示:LcdWriComma n(0XAF);3. 寫數據。參數為待寫的顯示數據。void LcdWriData( un sig ned char data);例如,寫顯示一個點的數據:LcdWriData(0X01);4. 指定列、頁地址。參數為列地址 x和頁地址y。void LcdSetxy (un sig ned char x,un sig ned chary);例如:LcdSetxy(68,2); 設置顯示地址為第68列、第2頁。通常和上一個函數連用,見下一節函數應用舉例。在以上基本函

15、數基礎上我們還可以根據命令碼推演出幾個便于使用的功能函數。5. 開顯示。void Lcd On(v oid ); 例:LcdOn();6. 關顯示。void LcdOff(void );例:LcdOff();7. 軟復位。用它可以在任何時刻使液晶屏回到起始狀態而顯示緩沖區內容不變。void LcdReset(void );例:LcdReset();8. 刷屏。void LcdCls( un sig ned char data );就是用數據data寫滿顯示緩沖區,data如果為0,那全屏刷白(無像素顯示),如果data為0XFF則全屏刷黑(像素全部亮)。如果為0XAA 呢?感興趣的讀者不妨實驗

16、一下。例:LcdCls(0 );最后給出該液晶的初始化函數,在系統啟動后,MCI初始化以后就進行液晶初始化。9. LCD初 始化。Void Lcdn i();通常在程序開始階段進行,對各種參數進行設置,具體初始化項目請參看函數內容和注解。 函數應用舉例1. 在指定位置畫1點先給定頁和列坐標,就指定了 1列8個像素點,1個點的位置從上到下對應數值為0X01、0X02、0X04 0X08 0X10 0X20 0X40 0X80 例如在第9列、第3頁最低位畫點:LcdSetxy(9,3); LcdWriData(0X80);2. 在指定位置畫連續8個點構成的短豎線 例如位置同上,則LcdSetxy(

17、9,3);LcdWriData(0XFF);3. 畫水平線例如從第10列起在第3頁底部畫1根長度50像素點的連續直線:un sig ned char i; LcdSetxy(10,3);for (i=0;i<50;i+)LcdWriData(0X80); / 循環中列地址自動遞增明白了以上基礎,我們就可以進一步畫出長短豎線、更粗的水平線、水平雙線矩形方框、黑塊等,這樣就可以畫簡單圖形了。怎樣顯示字符或漢字字符和漢字實質是在一個矩形區域內由一系列像素點構成的圖形,也就是點陣圖。例如在一個8X 8點陣區域內,字母“ L”點陣如圖8左所示。如果要在第0頁第0第7列顯示這個字符,那么就應該在相應

18、的顯示緩沖區裝入相應的數據如右邊圖所示,這里用1表示顯示像素,不顯示的像素都是0,為清楚起見圖中就不標出,上方表示列號 07,那么從0列開始,各列的二進數和16進數分別表示為: 0B00000000 : 0X000B01000010 : 0X420B01111110 : 0X7E0B01000010 : 0X820B01000000 : 0X400B01000000 : 0X400B01100000 : 0X600B00000000 : 0X00所以我們就用一個8元素的數組來表示這個“ L”:const un sig ned char L8=0X00,0X42,0X7E,0X82,0X40,0

19、X40,0X60,0X00;要在液晶上的第3頁第6列顯示這個“ L”,就使用如下函數:LcdShow88( un sig ned x,un sig ned y, const char *p);其中p指向8點陣字符數組,那么具體代碼為:LcdShow88(6,3, L);打造字模就是按照所需顯示的文字符號一一編制各自的數組,上述8X 8點陣就可以在1頁高度內顯示,實際上其上下左右都要留空,這樣有效的點陣只有6X 6,要顯示數字和ASCII字符尚可,簡單筆畫的漢字也行,可是筆畫稍多的漢字就不行了。對于漢字顯示我們一般 使用16X 16點陣的字模。這樣的漢字高度占2頁,寬度是16列,12864的液晶

20、可以顯示4行,每行8個字。所有的12864液晶不論尺寸大小都 是如此。16一個16點陣字模數組具有32個元素,每一頁有16個元素。因此顯示這樣的漢字時,就要給同一列的某一頁和下一頁分別寫入各自的 個元素。例如漢字“鐘”的字模數組為:constun sig nedcharZHONG?=0x80,0x40,0x70,0xCF,0x48,0x48,0x00,0xF0,0x10,0x10,0xFF,0x10,0x10,0xF8,0x10,0x00,0x02,0x02,0x02,0x7F,0x22,0x12,0x00,0x07,0x02,0x02,0xFF,0x02,0x02,0x07,0x00,0x0

21、0;要在第2頁、第6列開始顯示“鐘”,我們用一個函數:LcdShow1616( un sig ned x,un sig ned y, const char *p);其中參數x是列,y是頁,p指向字模數組,具體的代碼為:LcdShow1616(6,2, ZHONG);這樣,漢字就顯出來了。最后,交代一下取得點陣漢字字模的方法。編制字模數組的好幫手一一字模軟件的使用因為我們現在需要的漢字量很少,所以可以使用一些字模提取軟件自己制作所需的字模。以一個很好用的綠色免費“畔畔字模提取軟 件”為例加以說明。此軟件在各大程序網站都有下載,下載解壓后就可使用,開啟界面如圖9所示。選取Shape :方形,Mod

22、e C51,取模順序選第4種,點陣圖右上為A,右下為B,左上為C,左下為D,這是按照先右半從上到下,后左半從上到下的順序取模。10踐畔畔宇模提収軟杵(by xQft)氧邑選擇r-綠色X色Shape 點方形C凰形Mode r ASM 冷C51提取字根Q左謔9QE0J右 ®9QEfR1到勢貼板(£職複順序AB CD額色選擇-黃色廠綠色到聖貼板£)左旋9Q®L鉀右旋9墟舊1Ok80,Ox40,Ok70,OxCF.Ox48,Ox48,OxOO,OxFO,Ox1 0,0x1 O.OxFFXxl 0,0k1 0XkF8,0k1 O.OmOO,OkO2jOx0ZOkO

23、2.Ok7F.Ok22Xh12.0x0O,On07.0«O2,0x0ZOxFF,0xO2,OxO2.CIHO7.OxO0.Ox00探取字模旦找 :比畔畔字摸提取軟件(by zsoft)r X色ShapeMode金方形C ASM1r豌a C51圖11圖12然后在下面輸入框里輸入漢字回車后, 左邊顯示點陣字,見圖10。對點陣自行修飾改動,用鼠標點選即可,例如豎筆加粗等,這里沒改 點右旋90度按鈕,點陣漢字右旋90度,其目的是由上往下取碼,相當于顯示時從左往右顯示。點“提取字模”按鈕,字模代碼呈現在點 陣下面,見圖11。注意字模碼有2行,上行對應旋轉后的右半區域從上往下取碼,下行對應左半區域從上往下取碼,這就等同于旋轉前 的漢字從左往右取碼,而上行代碼對應的是漢字的上半代碼,下行則對應的是漢字的下半代碼。正好符合上述漢字顯示程序先顯示上半 部后顯示下半部的要求。這樣就取得了例子中的字模代碼。可以把所需的漢字逐一取碼,然后存在二維表中,就形成了16X16點陣字模數組。因

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論