lcd12864簡介
帶中文字庫的128X64是一種具有4位/8位并行、2線或3線串行多種接口方式,內(nèi)部含有國標(biāo)一級、二級簡體中文字庫的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128×64,內(nèi)置8192個(gè)16*16點(diǎn)漢字,和128個(gè)16*8點(diǎn)ASCII字符集。利用該模塊靈活的接口方式和簡單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示8×4行16×16點(diǎn)陣的漢字。也可完成圖形顯示。低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖形點(diǎn)陣液晶顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。
lcd12864基本特性參數(shù)
?。?)低電源電壓(VDD:+3.0--+5.5V)
?。?)顯示分辨率:128×64點(diǎn)
?。?)內(nèi)置漢字字庫,提供8192個(gè)16×16點(diǎn)陣漢字(簡繁體可選)
?。?)內(nèi)置128個(gè)16×8點(diǎn)陣字符
?。?)2MHZ時(shí)鐘頻率
?。?)顯示方式:STN、半透、正顯
(7)驅(qū)動(dòng)方式:1/32DUTY,1/5BIAS
?。?)視角方向:6點(diǎn)
?。?)背光方式:側(cè)部高亮白色LED,功耗僅為普通LED的1/5—1/10
(10)通訊方式:串行、并口可選
(11)內(nèi)置DC-DC轉(zhuǎn)換電路,無需外加負(fù)壓
?。?2)無需片選信號,簡化軟件設(shè)計(jì)
?。?3)工作溫度:0℃-+55℃,存儲(chǔ)溫度:-20℃-+60℃
lcd12864引腳圖及功能
1VSS-模塊的電源地
2VDD-模塊的電源正端
3V0-LCD驅(qū)動(dòng)電壓輸入端
4RS(CS)H/L并行的指令/數(shù)據(jù)選擇信號;串行的片選信號
5R/W(SID)H/L并行的讀寫選擇信號;串行的數(shù)據(jù)口
6E(CLK)H/L并行的使能信號;串行的同步時(shí)鐘
7DB0H/L數(shù)據(jù)0
8DB1H/L數(shù)據(jù)1
9DB2H/L數(shù)據(jù)2
10DB3H/L數(shù)據(jù)3
11DB4H/L數(shù)據(jù)4
12DB5H/L數(shù)據(jù)5
13DB6H/L數(shù)據(jù)6
14DB7H/L數(shù)據(jù)7
15PSBH/L并/串行接口選擇:H-并行;L-串行
16NC空腳
17/RETH/L復(fù)位低電平有效
18NC空腳
19LED_A(LED+5V)背光源正極
20LED_K(LED-OV)背光源和負(fù)極
控制器接口信號說明
1、RS,R/W的配合選擇決定控制界面的4種模式:
2、E信號
●忙標(biāo)志:BFBF標(biāo)志提供內(nèi)部工作情況.BF=1表示模塊在進(jìn)行內(nèi)部操作,此時(shí)模塊不接受外部指令和數(shù)據(jù).BF=0時(shí),模塊為準(zhǔn)備狀態(tài),隨時(shí)可接受外部指令和數(shù)據(jù)。利用STATUSRD指令,可以將BF讀到DB7總線,從而檢驗(yàn)?zāi)K之工作狀態(tài)。
●字型產(chǎn)生ROM(CGROM)字型產(chǎn)生ROM(CGROM)提供8192個(gè)此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。DFF=1為開顯示(DISPLAYON),DDRAM的內(nèi)容就顯示在屏幕上,DFF=0為關(guān)顯示(DISPLAYOFF)。DFF的狀態(tài)是指令DISPLAYON/OFF和RST信號控制的。
●顯示數(shù)據(jù)RAM(DDRAM)模塊內(nèi)部顯示數(shù)據(jù)RAM提供64×2個(gè)位元組的空間,最多可控制4行16字(64個(gè)字)的中文字型顯示,當(dāng)寫入顯示數(shù)據(jù)RAM時(shí),可分別顯示CGROM與CGRAM的字型;此模塊可顯示三種字型,分別是半角英數(shù)字型(16*8)、CGRAM字型及CGROM的中文字型,三種字型的選擇,由在DDRAM中寫入的編碼選擇,在0000H—0006H的編碼中(其代碼分別是0000、0002、0004、0006共4個(gè))將選擇CGRAM的自定義字型,02H—7FH的編碼中將選擇半角英數(shù)字的字型,至于A1以上的編碼將自動(dòng)的結(jié)合下一個(gè)位元組,組成兩個(gè)位元組的編碼形成中文字型的編碼BIG5(A140—D75F),GB(A1A0-F7FFH)。
●字型產(chǎn)生RAM(CGRAM)字型產(chǎn)生RAM提供圖象定義(造字)功能,可以提供四組16×16點(diǎn)的自定義圖象空間,使用者可以將內(nèi)部字型沒有提供的圖象字型自行定義到CGRAM中,便可和CGROM中的定義一樣地通過DDRAM顯示在屏幕中。
●地址計(jì)數(shù)器AC地址計(jì)數(shù)器是用來貯存DDRAM/CGRAM之一的地址,它可由設(shè)定指令暫存器來改變,之后只要讀取或是寫入DDRAM/CGRAM的值時(shí),地址計(jì)數(shù)器的值就會(huì)自動(dòng)加一,當(dāng)RS為“0”時(shí)而R/W為“1”時(shí),地址計(jì)數(shù)器的值會(huì)被讀取到DB6——DB0中。
光標(biāo)/閃爍控制電路
此模塊提供硬體光標(biāo)及閃爍控制電路,由地址計(jì)數(shù)器的值來指定DDRAM中的光標(biāo)或閃爍位置。
lcd12864指令說明
備注:當(dāng)IC1在接受指令前,微處理器必須先確認(rèn)其內(nèi)部處于非忙碌狀態(tài),即讀取BF標(biāo)志時(shí),BF需為零,方可接受新的指令;如果在送出一個(gè)指令前并不檢查BF標(biāo)志,那么在前一個(gè)指令和這個(gè)指令中間必須延長一段較長的時(shí)間,即是等待前一個(gè)指令確實(shí)執(zhí)行完成。
lcd12864應(yīng)用舉例
1、使用前的準(zhǔn)備:先給模塊加上工作電壓,再按照下圖的連接方法調(diào)節(jié)LCD的對比度,使其顯示出黑色的底影。此過程亦可以初步檢測LCD有無缺段現(xiàn)象。
2、字符顯示:帶中文字庫的128X64-0402B每屏可顯示4行8列共32個(gè)16×16點(diǎn)陣的漢字,每個(gè)顯示RAM可顯示1個(gè)中文字符或2個(gè)16×8點(diǎn)陣全高ASCII碼字符,即每屏最多可實(shí)現(xiàn)32個(gè)中文字符或64個(gè)ASCII碼字符的顯示。帶中文字庫的128X64-0402B內(nèi)部提供128×2字節(jié)的字符顯示RAM緩沖區(qū)(DDRAM)。字符顯示是通過將字符顯示編碼寫入該字符顯示RAM實(shí)現(xiàn)的。根據(jù)寫入內(nèi)容的不同,可分別在液晶屏上顯示CGROM(中文字庫)、HCGROM(ASCII碼字庫)及CGRAM(自定義字形)的內(nèi)容。三種不同字符/字型的選擇編碼范圍為:0000~0006H(其代碼分別是0000、0002、0004、0006共4個(gè))顯示自定義字型,02H~7FH顯示半寬ASCII碼字符,A1A0H~F7FFH顯示8192種GB2312中文字庫字形。字符顯示RAM在液晶模塊中的地址80H~9FH。字符顯示的RAM的地址與32個(gè)字符顯示區(qū)域有著一一對應(yīng)的關(guān)系,其對應(yīng)關(guān)系如下表所示。
3、圖形顯示
先設(shè)垂直地址再設(shè)水平地址(連續(xù)寫入兩個(gè)字節(jié)的資料來完成垂直與水平的坐標(biāo)地址)
垂直地址范圍AC5.。.AC0
水平地址范圍AC3…AC0
繪圖RAM的地址計(jì)數(shù)器(AC)只會(huì)對水平地址(X軸)自動(dòng)加一,當(dāng)水平地址=0FH時(shí)會(huì)重新設(shè)為00H但并不會(huì)對垂直地址做進(jìn)位自動(dòng)加一,故當(dāng)連續(xù)寫入多筆資料時(shí),程序需自行判斷垂直地址是否需重新設(shè)定。GDRAM的坐標(biāo)地址與資料排列順序如下圖:
4、應(yīng)用說明
用帶中文字庫的128X64顯示模塊時(shí)應(yīng)注意以下幾點(diǎn):
?、儆谀骋粋€(gè)位置顯示中文字符時(shí),應(yīng)先設(shè)定顯示字符位置,即先設(shè)定顯示地址,再寫入中文字符編碼。
?、陲@示ASCII字符過程與顯示中文字符過程相同。不過在顯示連續(xù)字符時(shí),只須設(shè)定一次顯示地址,由模塊自動(dòng)對地址加1指向下一個(gè)字符位置,否則,顯示的字符中將會(huì)有一個(gè)空ASCII字符位置。
③當(dāng)字符編碼為2字節(jié)時(shí),應(yīng)先寫入高位字節(jié),再寫入低位字節(jié)。
?、苣K在接收指令前,向處理器必須先確認(rèn)模塊內(nèi)部處于非忙狀態(tài),即讀取BF標(biāo)志時(shí)BF需為“0”,方可接受新的指令。如果在送出一個(gè)指令前不檢查BF標(biāo)志,則在前一個(gè)指令和這個(gè)指令中間必須延遲一段較長的時(shí)間,即等待前一個(gè)指令確定執(zhí)行完成。指令執(zhí)行的時(shí)間請參考指令表中的指令執(zhí)行時(shí)間說明。⑤“RE”為基本指令集與擴(kuò)充指令集的選擇控制位。當(dāng)變更“RE”后,以后的指令集將維持在最后的狀態(tài),除非再次變更“RE”位,否則使用相同指令集時(shí),無需每次均重設(shè)“RE”位.
lcd12864驅(qū)動(dòng)程序
/****************************************************************************/
/* */
/* Copyright (c) 2012, pcwebmaster */
/* All rights reserved. */
/* */
/* Email:pcwebmaste@163.com */
/* */
/****************************************************************************/
/****************************************************************************/
/* 文件名:LCD12864.c */
/* 版 本:Version 1.0 */
/* 描 述:實(shí)現(xiàn)液晶和單片機(jī)的通訊協(xié)議,根據(jù)計(jì)算機(jī)發(fā)給的命令進(jìn)行人機(jī)交互 */
/* 作 者:pcwebmaste */
/* 函 數(shù): */
/* LCD12864_init */
/* LCD12864WriteCommand */
/* LCD12864WriteByte */
/* LCD12864_init */
/* LCD12864SetXY */
/* LCD12864PrintfString */
/* 歷史記錄: */
/* pcwebmaste 2008-07-10 Creat Inital version. (Version 1.0) */
/* 模塊化 2012-06-02 Creat Inital version. (Version 2.0) */
/****************************************************************************/
#include “12864.h”
#define LOW 0
#define HIGH 1
sbit wela = P2^6;
sbit dula = P2^7;
#define LCD12864_RS(x) {if((x))P3 |= 1《《LCD12864_RS_PIN;\
else P3 &=~(1《《LCD12864_RS_PIN);}//寄存器選擇輸入
#define LCD12864_RW(x) {if((x))P3 |= 1《《LCD12864_RW_PIN;\
else P3 &=~(1《《LCD12864_RW_PIN);}//液晶讀/寫控制
#define LCD12864_EN(x) {if((x))P3 |= 1《《LCD12864_EN_PIN;\
else P3 &=~(1《《LCD12864_EN_PIN);}//液晶使能控制
#define LCD12864_MD(x) {if((x))P3 |= 1《《LCD12864_MD_PIN;\
else P3 &=~(1《《LCD12864_MD_PIN);}//串/并方式控制
#define LCDWELA(x) {if((x))P2 |= 1《《6; else P2 &=~(1《《6);}
#define LCDDULA(x) {if((x))P2 |= 1《《7; else P2 &=~(1《《7);}
#define DelayNOP() {_nop_();_nop_();_nop_();_nop_();}
/*********************************************/
/* */
/* 主程序 */
/* */
/*********************************************
void main()
{
DelayNOP(); //延時(shí)
wela=LOW;
dula=LOW;
LCD12864_init(); //初始化LCD
LCD12864PrintfString(0,1,dis1);
LCD12864PrintfString(1,0,dis2);
LCD12864PrintfString(2,0,dis3);
LCD12864PrintfString(3,1,dis4);
while(1);
}
/********************************************
*函數(shù)名稱:LCD12864_init
*輸 入:無
*輸 出:lcd_busy 為1時(shí),忙,等待。
lcd-busy 為0時(shí),閑,可寫指令與數(shù)據(jù)
*說 明:LCD12864LCD檢查忙狀態(tài)
/*******************************************/
bit LCD1286_busy()
{
bit result;
LCD12864_RS(LOW);
LCD12864_RW(HIGH);
LCD12864_EN(HIGH);
DelayNOP();
result = (bit)(LCD12864_PORT&0x80);
LCD12864_EN(LOW);
return(result);
}
/********************************************
*函數(shù)名稱:LCD12864WriteCommand
*輸 入:ucCmd 要寫入的命令
*輸 出:無
*說 明:LCD12864 寫命令
RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
********************************************/
void LCD12864WriteCommand(unsigned char ucCmd)
{
while(LCD1286_busy());
LCD12864_RS(LOW);
LCD12864_RW(LOW);
LCD12864_EN(LOW);
_nop_();
_nop_();
LCD12864_PORT = ucCmd;
DelayNOP();
LCD12864_EN(HIGH);
DelayNOP();
LCD12864_EN(LOW);
}
/********************************************
*函數(shù)名稱:LCD12864WriteByte
*輸 入:ucByte 要寫入的字節(jié)
*輸 出:無
*說 明:LCD12864 寫字節(jié)
RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。
********************************************/
void LCD12864WriteByte(unsigned char ucByte)
{
while(LCD1286_busy());
LCD12864_RS(HIGH);
LCD12864_RW(LOW);
LCD12864_EN(LOW);
LCD12864_PORT = ucByte;
DelayNOP();
LCD12864_EN(HIGH);
DelayNOP();
LCD12864_EN(LOW);
}
/********************************************
*函數(shù)名稱:LCD12864_init
*輸 入:無
*輸 出:無
*說 明:LCD12864LCD初始化設(shè)定
/*******************************************/
void LCD12864_init()
{
LCD12864_MD(HIGH); //并口方式
LCD12864WriteCommand(0x34); //擴(kuò)充指令操作
LCD12864WriteCommand(0x30); //基本指令操作
LCD12864WriteCommand(0x0C); //顯示開,關(guān)光標(biāo)
LCD12864WriteCommand(0x01); //清除LCD的顯示內(nèi)容
}
/********************************************
*函數(shù)名稱:LCD12864SetXY
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo)
*輸 出:無
*說 明:LCD12864 設(shè)置坐標(biāo)
********************************************/
void LCD12864SetXY(unsigned char X,unsigned char Y)
{
if (X==0)
{X=0x80;}
else if (X==1)
{X=0x90;}
else if (X==2)
{X=0x88;}
else if (X==3)
{X=0x98;}
LCD12864WriteCommand(X+Y); //顯示地址
}
/********************************************
*函數(shù)名稱:LCD12864SetXY
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo)
*輸 出:無
*說 明:LCD12864 設(shè)置坐標(biāo)
為什么這樣寫不行呢?
********************************************
void LCD12864SetXY(unsigned char x,unsigned char y)
{
switch(y)
{
case 1:
{
LCD12864WriteCommand(0x80+x);
}
break;
case 2:
{
LCD12864WriteCommand(0x90+x);
}
break;
case 3:
{
LCD12864WriteCommand(0x88+x);
}
break;
case 4:
{
LCD12864WriteCommand(0x98+x);
}
break;
default:break;
}
// LCD12864WriteCommand(x+y); //顯示地址
}
/********************************************
*函數(shù)名稱:LCD12864PrintfString
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo) s字符串
*輸 出:無
*說 明:LCD12864 打印字符串
********************************************/
void LCD12864PrintfString(unsigned char x,unsigned char y,unsigned char *s)
{
LCD12864SetXY(x,y); //設(shè)置顯示坐標(biāo)
while(s && *s)
{
LCD12864WriteByte(*s); //顯示逐個(gè)字符
s++;
}
}
/****************************************************************************/
/* */
/* Copyright (c) 2012, pcwebmaster */
/* All rights reserved. */
/* */
/* Email:pcwebmaste@163.com */
/* */
/****************************************************************************/
/****************************************************************************/
/* 文件名:LCD12864.c */
/* 版 本:Version 1.0 */
/* 描 述:實(shí)現(xiàn)液晶和單片機(jī)的通訊協(xié)議,根據(jù)計(jì)算機(jī)發(fā)給的命令進(jìn)行人機(jī)交互 */
/* 作 者:pcwebmaste */
/* 函 數(shù): */
/* LCD12864_init */
/* LCD12864WriteCommand */
/* LCD12864WriteByte */
/* LCD12864_init */
/* LCD12864SetXY */
/* LCD12864PrintfString */
/* 歷史記錄: */
/* pcwebmaste 2008-07-10 Creat Inital version. (Version 1.0) */
/* 模塊化 2012-06-02 Creat Inital version. (Version 2.0) */
/****************************************************************************/
#ifndef __12864_H__
#define __12864_H__
#include 《reg52.h》
#include 《intrins.h》
#define LCD12864_PORT P0 //數(shù)據(jù)口
#define LCD12864_RS_PIN 5
#define LCD12864_RW_PIN 6
#define LCD12864_EN_PIN 4
#define LCD12864_MD_PIN 7
unsigned char code dis1[] = {“中國昌樂是寶石”};
unsigned char code dis2[] = {“之都,西瓜之鄉(xiāng)!”};
unsigned char code dis3[] = {“中國昌樂寶石城”};
unsigned char code dis4[] = {“人民歡迎您!”};
/********************************************
*函數(shù)名稱:LCD12864_init
*輸 入:無
*輸 出:lcd_busy 為1時(shí),忙,等待。
lcd-busy 為0時(shí),閑,可寫指令與數(shù)據(jù)
*說 明:LCD12864LCD檢查忙狀態(tài)
/*******************************************/
bit LCD1286_busy();
/********************************************
*函數(shù)名稱:LCD12864WriteCommand
*輸 入:ucCmd 要寫入的命令
*輸 出:無
*說 明:LCD12864 寫命令
RS=L,RW=L,E=高脈沖,D0-D7=指令碼。
********************************************/
void LCD12864WriteCommand(unsigned char ucCmd);
/********************************************
*函數(shù)名稱:LCD12864WriteByte
*輸 入:ucByte 要寫入的字節(jié)
*輸 出:無
*說 明:LCD12864 寫字節(jié)
RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。
********************************************/
void LCD12864WriteByte(unsigned char ucByte);
/********************************************
*函數(shù)名稱:LCD12864_init
*輸 入:無
*輸 出:無
*說 明:LCD12864LCD初始化設(shè)定
/*******************************************/
void LCD12864_init();
/********************************************
*函數(shù)名稱:LCD12864SetXY
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo)
*輸 出:無
*說 明:LCD12864 設(shè)置坐標(biāo)
********************************************/
void LCD12864SetXY(unsigned char X,unsigned char Y);
/********************************************
*函數(shù)名稱:LCD12864PrintfString
*輸 入:x 橫坐標(biāo) y 縱坐標(biāo) s字符串
*輸 出:無
*說 明:LCD12864 打印字符串
********************************************/
void LCD12864PrintfString(unsigned char x,unsigned char y,unsigned char *s);
void LCD12864PrintfData(unsigned char x,unsigned char y,unsigned char DData);
/********************************************
*函數(shù)名稱:LCD12864PrintfNum
*輸 入:add ge shi bai
*輸 出:無
*說 明:此函數(shù)不好寫成通用函數(shù),在連續(xù)地址里
連續(xù)寫數(shù)字半角顯示。根據(jù)情況修改
********************************************/
void LCD12864PrintfNum(unsigned char add,unsigned char ge,unsigned char shi,unsigned char bai)
{
LCD12864WriteCommand(add);
LCD12864WriteByte(bai+0x30);
LCD12864WriteByte(shi+0x30);
LCD12864WriteByte(ge+0x30);
}
#endif
評論
查看更多