小點陣漢顯液晶模塊及其應用
摘要:HZ132-64B30是一種采用1212點陣的小點陣漢字液晶顯示模塊,該模塊內嵌T9拼音輸入法并采用標準的UART與控制MCU通信。文中介紹了該模塊的性能特點、引腳功能及用戶命令,給出了HZ132-64B30的具體應用電路和應用程序。 關鍵詞:小點陣;漢顯液晶模塊;單片機;HZ3132-64B30 對于手機等體積小巧的電子產品,其人機界面一方面要滿足大信息量的顯示要求,另一方面,顯示屏的大小又受體積的制約。因此,如何在面積有限的情況下多顯示一些漢字已成為此類產品需要解決的重要問題。而解決上述問題最為行之有效的方法就是采用小點陣漢字顯示,這樣可以在同樣的成本和體積下多顯示一些漢字。另一方面,此類電子產品還要求具有較強的漢字輸入功能,以滿足漢字輸入及查找的需要。 HZ132-64B30即是采用小點陣漢字顯示,它是具有1212點陣漢字顯示功能的液晶圖形顯示模塊。該模塊同時還內嵌了先進的T9拼音輸入法,并采用UART方式與控制MCU進行接口,因此可為手機、智能終端等人機交互信息量大的電子產品提供一個較好的解決方案。 HZ132-64B30漢字液晶顯示模塊的主要性能特點如下: ●模塊分辨率為132(列)64(行),全屏幕圖形點陣,漢字顯示點陣為1212; ●內含1212點陣一、二級簡體中文漢字字庫及126點陣ASCⅡ字符庫; ●全屏幕可以顯示每行10個共5行標準宋體漢字或者205個ASCⅡ字符,非常適合信息終端類顯示; ●具有多種圖形及文本顯示命令; ●采用串行接口控制,硬件連接比較簡單; ●內嵌先進的T9拼音輸入法,與大多數手機的拼音輸入法兼容; ●液晶屏尺寸(mm):53.0(L)28.0(W)2.0(H),顯示點陣: 0.26(L)0.28(W); ●采用單+5V電源供電,內部可提供顯示驅動負電壓。 HZ132-64B30漢顯模塊在模塊上方的一排5根引腳是給用戶的電源和串行數據口,現將各引腳功能說明如下: VCC(1):5V正電源端; TXD(2):漢顯模塊的串行數據輸出引腳; RXD(3):漢顯模塊的串行數據輸入引腳,在模塊啟動期間,該腳接地可以激活自檢程序,此時液晶屏將顯示自檢畫面? GND(4):接地端; RESET(5):外部復位引腳,高電平有效。 控制MCU一般通過串口命令與漢顯模塊進行通信,模塊對串口命令做出相應的顯示或返回相應的數據,模塊的通信格式為9600,n,8,1,所有發往漢顯模塊的命令都是以“ESC”鍵值0X1b開始,后面跟一個字節的命令碼,其后再跟具體的命令內容。模塊返回的內容則是以“ESC”開始,后面跟一個字節的命令碼,其后跟返回內容。模塊可自動對每條指令做出是否成功的返回響應,執行成功時返回“OK!”,錯誤指令則返回“error”。對于有數據返回的指令,這些響應通常跟在數據的后面。當模塊正常運行時,可以通過適當的設置使其不再對命令執行做出成功與否的響應,以提高模塊的運行速度。 發往模塊的命令格式為:ESC、命令代碼(1 byte)、命令內容(N bytes); 模塊返回的數據格式為:ESC、返回內容(N bytes)。 下面詳細介紹各用戶命令: (1)設置LCM的灰度 命令格式:ESC,0X31,HD; 0X31:灰度設置命令; HD:灰度值,取值范圍為0X00~0X3F,建議灰度值取為0X07。 (2)清屏命令 命令格式:ESC,0X32; (3)設置光標位置 命令格式:ESC,0X33,X,Y; 其中X為以漢字為單位的屏幕列坐標值,取值范圍為0~19;Y則是以漢字為單位的屏幕行坐標值,取值范圍為0~4。 命令格式:ESC,0X34,A; 其中,A為光標顯示開關,A為0時,不顯示光標,A為1時,光標顯示。 (5)在光標位置顯示字符串 命令格式:ESC,0X37,B,N,END; 該命令可在當前光標位置顯示漢字或ASCⅡ字符串,也可用于顯示單個漢字或ASCⅡ字符。其中:B為顯示屬性開關,當B為0時,正常顯示字符,B為1時,反顯字符;N為顯示字符的內容(多字節),當顯示內容為漢字時,N為顯示漢字的內碼;當顯示內容為ASCⅡ碼時,N為ASCⅡ碼值;END為結束標志,其值為0X00。 (6)在任意位置畫點 命令格式:ESC,0X38,C,X,Y; 畫點時,坐標原點(0,0)都是在左上角,X坐標向右遞增,Y坐標向下遞增。其中:C是畫點屬性開關,C為1時,在該坐標原點畫一個點,C為0時,擦除該坐標的點;X表示以點為單位的X坐標值(0<X<131);Y表示以點為單位的Y坐標值(0<Y<63)。 (7)任意位置畫線 命令格式:ESC,0X39,D,X0,Y0,X1,Y1; 其中,D為畫線屬性,D為2時,畫一條虛線;D為1時,畫一條實線;D為0時,擦除該位置的線;X0表示直線一端的X位置;Y0表示直線一端的Y位置;X1表示直線另一端的X位置;Y1表示直線另一端的Y位置。 (8)任意位置畫圓 命令格式:ESC,0X41,E,X,Y,R; 其中,E表示畫圓屬性,E為1,畫一個圓,E為0,擦除該圓;X表示圓心的X位置;Y表示圓心的Y位置;R表示半徑。 (9)畫圖片 命令格式:ESC,0X42,F,X0Y0,X1Y1,N; 其中,F為畫圖屬性,F為0,畫正常圖,F為1,畫反顯圖;X0Y0為圖片左上角的坐標位置;X1Y1為圖片大小,寬為X1? 高為Y1;N為多字節圖形數據,排列方法為橫向8bit,字節為左高右低,字節排列順序為從左到右、從上到下。 (10)畫ICON 命令格式:ESC,0X43,G,N; 該功能用于顯示廠家預設在模塊內的ICON圖形。其中:G表示ICON屬性,G為1時,畫該ICON,G為0時,擦除該ICON;N表示從左到右第幾個ICON?0<n<131?。 (11)取數字組合的有效拼音組合?用于T9拼音輸入法? 命令格式:發送:ESC,0X47,N1,END; 返回:ESC,N1,X1,END,Xn,END; 數字代表的字母采用國際標準:0和1無效,2?ABC?,3?DEF?,4?GHI?,5?JKL?,6?MNO?,7?PQRS?,8?TUV?,9?WXYZ?; N1表示輸入數字所代表的字母?小于或等于6個數字?,取值范圍為2~9,代表的字母范圍為A~F; X1表示第一個返回的拼音字符串(小寫); Xn表示第n個返回的拼音字符串(小寫); (12)取符合輸入拼音字符串的漢字串?用于T9拼音輸入法? 命令格式:發送:ESC,0X48,N,Xn,N,END; 返回:ESC,Nx,END。 其中,N表示返回漢字的個數;Xn表示返回第幾頁的漢字n≥1(用于待選漢字翻頁);N1表示輸入的拼音字符串?≤6個數字?;Nx表示返回的漢字串。 (13)設置是否對命令做返回響應 命令格式:ESC,0X50,H; 其中,H為命令響應屬性,H為00表示不返回命令響應,H為01則表示當命令正確執行時返回“OK!”,當命令不正確時返回“error”。 HZ132-64B30漢顯液晶模塊可廣泛用于人機交互界面友好、顯示信息量大的電子產品中,由于控制MCU是通過UART與液晶模塊進行通訊的,故該模塊幾乎可與任何種類的單片機進行接口。對于不具備UART或UART被占用的單片機,可使用通用I/O口線來模擬串口,但模擬串口的波特率將受到指令周期的限制而無法做得很高,一般只能做到4800bps,這時可將漢顯模塊的晶振更換為11.0592MHz,同時模塊的波特率也改為4800 bps, 即可正常通訊了。 圖1是以AT89C2051單片機為例,給出的漢顯液晶模塊與單片機的接口電路。 下面是采用C51語言編寫的與圖1硬件電路配套的子程序: #define CR putstring(“\r\n”)? //發送一個回車換行 #define OLEN 8 //串行發送緩沖區長度 idata uchar outbuf[OLEN]; //發送緩沖區 data uchar idata *outlast=outbuf; //最后由中斷傳輸出去的字節位置 data uchar idata *putlast=outbuf; //最后放入發送緩沖區的字節位置 #define ILEN 30 // 串行接收緩沖區長度 idata uchar inbuf[OLEN] ;接收緩沖區 data uchar idata *inlast=inbuf; //最后由中斷進入接收緩沖區的字節位置 data uchar idata *getlast=inbuf; //最后取走的字節位置 bit outbufsign0; //最后一個數據發完標志,發完=0 bit outbufsign; //輸出緩沖區非空標志,非空=1 bit inbufsign; //接收緩沖區非空標志, 非空=1 bit inbufful; //輸入緩沖區滿標志,滿=1 //放入一個字節到發送緩沖區 putbyte(unsigned char c) { ES=0; //暫停串行中斷,以免數據比較時出錯 while((((outlast-putlast)==2)&&(outlast > putlast )) || ((?outlast < putlast) && (OLEN-(putlast-outlast)==2))) { ES=1; c++;c--; ES=0; } *putlast=c; //放字節進入緩沖區 putlast++; //發送緩沖區指針加一 if(putlast==outbuf+OLEN) putlast=outbuf; //指針到頂部后換到底部 outbufsign=1; if (!outbufsign0) { outbufsign0=1; TI=1; ?} //緩沖區開始為空置為有,啟動發送 ES=1; } // 設置光標位置 void lcd_cursor(uchar x, uchar y) { putbyte(0x1b); putbyte(0x33); putbyte(x);? putbyte(y);? } //顯示字符串 void lcd_string(uchar attr,uchar *string) { putbyte(0x1b);? putbyte(0x37);? putbyte(attr);? putstring(string); putbyte(0x00);? } //畫點 void lcd_ dot(uchar attr,uchar x,uchar y) { putbyte(0x1b); putbyte(0x38); putbyte(attr); putbyte(x);? putbyte(y);? } // 畫圖片,*picture data指向圖片數據,圖片數據的第一二個字節是圖片寬度和圖片高度 void lcd_picture(uchar attr,uchar x0,uchar y0,uchar *picture_data) { putbyte(0x1b);? putbyte(0x42);? putbyte(attr);? putbyte(x0); putbyte(y0);? putbytes(picture_data,(((*picture_data)+7)/8)*(*(picture_data+1))+2); } //發送字符串到串口 putstring(uchar *puts) { for(;*puts!=0;puts++)//遇到停止符0結束 putbyte(*puts); } //串口中斷處理 serial () interrupt 4 { if (TI) { TI = 0; if(outbufsign) { SBUF=*outlast; //未發送完繼續 outlast++;//最后傳出去的字節位置加一 if (outlast==outbuf+OLEN) outlast= outbuf; //地址到頂部回到底部 if (putlast==outlast) outbufsign=0; //數據發送完置發送緩沖區空標志 } else { outbufsign0=0; } } if(RI) { RI = 0; if(!inbufful) { *inlast= SBUF; //放入數據 inlast++; //最后放入的位置加一 inbufsign=1; if(inlast==inbuf+ILEN)inlast=inbuf; //地址到頂部回到底部 if (inlast==getlast) inbufful=1; //接收緩沖區滿置滿標志 } } } //串口初始化 void serial_init(void) { SCON=0x50; TMOD|=0x20; PCON|= 0x80; TH1 = 0xf4; TR1 = 1; ES = 1; REN=1; EA=1; } 4 結束語 HZ132-64B30小點陣漢顯模塊的推出為小體積、交互顯示信息量較大的電子產品的人機界面顯示提供了一個較好的解決方案,它可以用較低的成本顯示較多的漢字,同時,其內嵌的T9拼音輸入法也為漢字的輸入與查找提供了方便,因而該模塊在通信、信息終端及智能化電子產品中具有廣泛的應用前景。 |
評論