<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 12864液晶深入學(xué)習筆記_1

12864液晶深入學(xué)習筆記_1

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
Createdon:2012-8-30

Author:zhangbin

本文引用地址:http://dyxdggzs.com/article/201611/322839.htm

學(xué)習筆記

for12864

redesignedbyzhangbin

2012-08-30

versions:12_08_01

這是我對12864的學(xué)習筆記,12864液晶功能很全面,使用起來(lái)也很方便,能夠滿(mǎn)足一般的研究和工程應用的需求。

下面我就對幾個(gè)方面講述一下我對它學(xué)習過(guò)程中的一些體會(huì )。我會(huì )盡量全面的介紹,并且會(huì )主要針對一些特殊的應用和一些我認為要特別注意的地方進(jìn)行較為詳細的說(shuō)明。而對于那些較為固定的,常用的方面會(huì )簡(jiǎn)略一些。

其中的不管串行模式還是并行模式,對液晶的寫(xiě)指令,寫(xiě)數據,讀操作等這些基本的操作都是一些比較固定的,基礎的東西。我認為只要能夠看懂,并且能夠在不同的處理器上移植就夠了,沒(méi)有必要非要自己對著(zhù)手冊時(shí)序圖寫(xiě)出來(lái)。因為有人已經(jīng)寫(xiě)好了,而且工作穩定,我們只要在它的基礎上學(xué)會(huì )應用就可以了?,F在是知識爆炸時(shí)期,知識,信息迅速膨脹,我們要學(xué)會(huì )使用已有的成果,然后在這個(gè)基礎上自己再進(jìn)行開(kāi)發(fā)應用的研究。我們不必一定要從底層開(kāi)始把別人已經(jīng)做的很成熟的東西再做一遍,這樣不但效率不高,而且我們一般人的精力也不允許。

好了,不說(shuō)廢話(huà)了,下面就開(kāi)始介紹,當然,那些基礎層面的東西我也會(huì )介紹的。

下面所涉及到的程序,是針對msp430g2553的,都是我已經(jīng)調通的,可以直接應用。

一,12864的介紹

1,液晶顯示模塊是128×64點(diǎn)陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內置國標GB2312碼簡(jiǎn)體中文字庫(16X16點(diǎn)陣)、128個(gè)字符(8X16點(diǎn)陣)及64X256點(diǎn)陣顯示RAM(GDRAM)??膳cCPU直接接口,提供兩種界面來(lái)連接微處理機:8-位并行及串行兩種連接方式。具有多種功能:光標顯示、畫(huà)面移位、睡眠模式等。

2,常用的12864液晶內部都是使用ST7920控制器。

1),ST7920提供8位元,4位元及串行三種微處理器控制方式,大陸常用的是8位元和串行控制方式。

2),ST7920可以控制顯示字母,數字符號,中文字型和自定義的圖畫(huà)??梢杂脕?lái)顯示圖形,演示動(dòng)畫(huà),繪制曲線(xiàn)等。

3),字符顯示RAM(DDRAM)

ST7920的字符顯示RAM(DDRAM)最多可以控制16字元*4行,LCD的顯示范圍為16字元*2行。

這里要注意,其實(shí)ST7920的DDRAM每一行可以控制16個(gè)漢字的,共有4行。但是LCD的每行只能顯示8個(gè)字符,為了顯示觀(guān)察的方便,在lcd制作的過(guò)程中,是將DDRAM的其中兩行拆分開(kāi)成四行,然后在lcd上顯示,也即是DDRAM只用到了一半。

lcd的顯示字符的坐標地址如下表:

漢字顯示坐標

Line180H81H82H83H84H85H86H87H

Line290H91H92H93H94H95H96H97H

Line388H89H8AH8BH8CH8DH8EH8FH

Line498H99H9AH9BH9CH9DH9EH9FH

從上表不難看出,其中第一行和第三行是DDRAM中的同一行拆分來(lái)的,同理24行也是DDRAM中的同一行拆分而來(lái)的。

了解了這一點(diǎn)就不難理解下面程序中在換行顯示時(shí),要認為手動(dòng)地指定下一行的地址。例如:如果第一行顯示完了,下面的數據我要接著(zhù)顯示在第二行,這樣才符合人觀(guān)察的習慣,那么我就要在換第二行顯示之前要手動(dòng)地把顯示地址切換到第二行。要不然的話(huà),第一行顯示完了,地址會(huì )自動(dòng)增加,就會(huì )顯示到第三行上去,這樣的話(huà)我們觀(guān)察起來(lái)就不自然了。程序實(shí)例會(huì )在下面涉及到的。

4),中文字庫ROM(CGROM)

內置的是GB2312碼簡(jiǎn)體中文字庫,共提供了8192個(gè)16*16點(diǎn)的中文字型。

5),半寬字型ROM(HCGROM)

提供126個(gè)16*8點(diǎn)半字寬的字母符號字型。

6),圖畫(huà)顯示RAM(GDRAM)

提供64*256位元的GDRAM

其中我們常用的RAM就是上面所提到的,還有一些CGRAM,IRAM這些我們不經(jīng)常使用,就不再介紹了。

上面介紹的DDRAM控制顯示漢字,字符。GDRAM控制顯示圖畫(huà),上電后,默認DDRAM是打開(kāi)的,控制液晶顯示。GDRAM默認不打開(kāi),它里面的數據是隨機的,如果此時(shí)打開(kāi)了GDRAM的話(huà),lcd會(huì )同時(shí)受到DDRAM和GDRAM的控制,由于GDRAM中的數據是隨機的,所以會(huì )顯示亂碼。所以在使用GDRAM之前要先清除里面的隨機數據。

清除GDRAM的函數如下:

voidClear_GDRAM(void)//清除GDRAM中的的隨機數據。因為上電后GDRAM中的數據是隨機的,如果不清除而直接打開(kāi)GDRAM顯示時(shí),會(huì )顯示亂碼

//所以在局部使用GDRAM顯示圖形時(shí),要先清除隨機數據。如果是全局使用GDRAM,即整個(gè)lcd屏全部設置顯示數據,則可以

//不必清除,因為新數據會(huì )把隨機數據給覆蓋掉

{

uchari,j,k;

wr_lcd(comm,0x34);//打開(kāi)擴展指令集操作GDRAM是擴展指令集

i=0x80;

for(j=0;j<32;j++)

{

wr_lcd(comm,i++);

wr_lcd(comm,0x80);

for(k=0;k<16;k++)

{

wr_lcd(dat,0x00);//寫(xiě)入空字符,就相當于清零

}

}

i=0x80;

for(j=0;j<32;j++)

{

wr_lcd(comm,i++);

wr_lcd(dat,0x88);

for(k=0;k<16;k++)

{

wr_lcd(dat,0x00);

}

}

wr_lcd(comm,0x30);//回到基本指令集

}

3,12864有兩種工作模式

1),并行模式和串行模式。并行模式就是常用的8位數據線(xiàn),4為控制線(xiàn)。這種方式雖然占用的IO口較多,但是向液晶收發(fā)數據較容易實(shí)現,數據傳輸速度較快。所以在一些連續顯示多幅圖畫(huà),演示動(dòng)畫(huà)或對顯示的實(shí)時(shí)性要求較高的場(chǎng)合應該考慮這種方式。其中在并行模式中,在向液晶寫(xiě)數據或命令前,要進(jìn)行液晶忙標志判斷BF,要確定液晶顯示不忙了,才能進(jìn)行操作。

其中并行模式的液晶的讀寫(xiě)數據,命令函數如下:

voidWrite_Cmd(ucharcmd)

{

ucharlcdtemp=0;

LCD_RS_L;

LCD_RW_H;

LCD_DataIn;//數據輸入單片機

do//判忙

{

LCD_EN_H;

_NOP();

lcdtemp=LCD2MCU_Data;

LCD_EN_L;

}

while(lcdtemp&0x80);//判斷忙標志等待忙

LCD_DataOut;//數據輸出到lcd

LCD_RW_L;

MCU2LCD_Data=cmd;//單片機向lcd輸入命令

LCD_EN_H;

_NOP();

LCD_EN_L;

}

voidWrite_Data(uchardat)

{

ucharlcdtemp=0;

LCD_RS_L;

LCD_RW_H;

LCD_DataIn;

do//判忙

{

LCD_EN_H;

_NOP();

lcdtemp=LCD2MCU_Data;

LCD_EN_L;

}

while(lcdtemp&0x80);//等待忙

LCD_DataOut;

LCD_RS_H;

LCD_RW_L;

MCU2LCD_Data=dat;//單片機向lcd中輸入數據

LCD_EN_H;

_NOP();

LCD_EN_L;

}

2),串行模式只用到了兩根線(xiàn)WREN于單片機進(jìn)行通信。這種方式可以大大減少單片機IO口的開(kāi)銷(xiāo),適用于IO口資源有限的單片機(如msp430g2553)。但是這種方式實(shí)現起來(lái)較麻煩,數據的傳輸效率不高。對于一般的文字,簡(jiǎn)單圖形的顯示還是可以的。(有可能是因為msp430g2553的處理能力較強,我現在用串行連接方式,顯示下面的幾幅圖畫(huà),顯示效果很好,看不出有什么數據傳輸速度慢的問(wèn)題)。

由于我用的是msp430g2553,所以我一直都是使用串行的控制模式。

//下面重點(diǎn)講一下串行的時(shí)序

//SCLK:串行同步時(shí)鐘線(xiàn),每操作一位數據都要有一個(gè)SCLK跳變沿,而且在這里是上升沿有效。也即是說(shuō),每次SCLK由低電平變?yōu)楦唠娖降乃查g,液晶控

//制器將SID上的數據讀入或輸出。

//SID:串行數據,每一次操作都由三個(gè)字節數據組成,第一個(gè)字節向控制器發(fā)送命令控制字,告訴控制器接下來(lái)是什么操作,若為寫(xiě)指令則發(fā)送11111000

//(0xf8),若為若為寫(xiě)數據則發(fā)送11111010(0xfa),若為讀狀態(tài)則發(fā)送11111100(0xfc),若為讀數據則發(fā)送11111110(0xfe)。

//第二個(gè)字節的高4位為發(fā)送指令或數據的高4位,第二個(gè)字節的低4位補0.

//第三個(gè)字節的高4位為發(fā)送指令或數據的低4位,第三個(gè)字節的低4位補0

//具體的可以觀(guān)察時(shí)序進(jìn)行理解

其中數據的傳輸的函數如下:

//12864串行連接寫(xiě)數據,寫(xiě)命令函數按照手冊上的時(shí)序進(jìn)行編程
void wr_lcd(uchar dat_comm,uchar content)//
{//要寫(xiě)的數據
uchar a,i,j;
delay_us(50);
a=content;
LCD_SCLK0; //en=0;
LCD_SID1;//wr=1
for(i=0;i<5;i++) //數據時(shí)序*****************8前5個(gè)高電平的同步碼
{
LCD_SCLK1;
LCD_SCLK0;
}
LCD_SID0;//wr=0寫(xiě)操作

LCD_SCLK1;//en=1來(lái)一個(gè)時(shí)鐘
LCD_SCLK0;//en=0
if(dat_comm)
LCD_SID1;//RS=1寫(xiě)數據
else
LCD_SID0;//RS=0寫(xiě)指令


LCD_SCLK1; //來(lái)一個(gè)時(shí)鐘
LCD_SCLK0;

LCD_SID0;//控制字的最后一位為0

LCD_SCLK1;//來(lái)一個(gè)時(shí)鐘
LCD_SCLK0;

for(j=0;j<2;j++)//************一共2*4次循環(huán)寫(xiě)寫(xiě)一字節數據,第一次大循環(huán)寫(xiě)高4位,第二次大循環(huán)寫(xiě)低4位
{
for(i=0;i<4;i++)
{
if(a&0x80)
LCD_SID1;
else
LCD_SID0;
a=a<<1;
LCD_SCLK1;
LCD_SCLK0;
}
LCD_SID0;
for(i=0;i<4;i++)//時(shí)鐘下面來(lái)4個(gè)時(shí)鐘脈沖
{
LCD_SCLK1;
LCD_SCLK0;
}
}
}


上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: 12864液晶學(xué)習筆

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>