<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é)習筆記_3---控制12864液晶顯示曲線(xiàn)

我的12864學(xué)習筆記_3---控制12864液晶顯示曲線(xiàn)

作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò ) 收藏
三,液晶顯示曲線(xiàn)

要想使用12864實(shí)現曲線(xiàn)的顯示,必須先實(shí)現能夠自由控制12864中的任意一個(gè)像素點(diǎn)的亮滅,而不能影響到相鄰其他點(diǎn)的狀態(tài)。

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

因為對12874液晶進(jìn)行寫(xiě)操作的話(huà),寫(xiě)入數據的最小單位也是一個(gè)16進(jìn)制數,是8位的,能夠控制8個(gè)像素點(diǎn),所以,對液晶進(jìn)行操作時(shí),能夠一次控制液晶的最少像素點(diǎn)數為8個(gè)。

所以要想控制液晶中的某一個(gè)點(diǎn)的亮滅,必須找到一種辦法,使這一個(gè)點(diǎn)的數據的寫(xiě)入由寫(xiě)入這個(gè)16進(jìn)制數來(lái)實(shí)現,而基本原則是不能影響其他7位數據的狀態(tài)。所以要想實(shí)現控制某一個(gè)像素點(diǎn),必須先知道目前液晶中在這個(gè)像素點(diǎn)左右其他7位的目前數據,然后把該點(diǎn)的數據按位加到這個(gè)數據上,而不能影響其他7位數據的狀態(tài)。

實(shí)現知道目前顯示的數據的方法有兩種:1,實(shí)現液晶的讀操作,把GDRAM中的對應的數據讀出來(lái),就可以了;2,人工構建一個(gè)虛擬的緩存寄存器(其實(shí)也就是一個(gè)二維數組),保存液晶GDRAM最后一次寫(xiě)入的數據,即是目前液晶顯示的數據,因為保存的是8位的16進(jìn)制數,所以128*64個(gè)像素點(diǎn)只需要16*64的數組就可以存儲完了。在寫(xiě)12864的同時(shí)寫(xiě)虛擬寄存器,寫(xiě)之前讀出虛擬寄存器的值與點(diǎn)位置相或,這樣才不會(huì )覆蓋之前的點(diǎn)。

因為msp430g2553的IO管腳有限,所以我的12864是串行連接的。而并行連接的話(huà),液晶的讀操作并不難實(shí)現?,F在串行的,雖然比較復雜一些,但很類(lèi)似于串行的讀操作,主要是看懂時(shí)序,然后嚴格按照時(shí)序就可以寫(xiě)出。我已經(jīng)可以實(shí)現了液晶的讀,寫(xiě)操作。讀寫(xiě)操作的函數如下,其中注釋的也比較詳細:

//12864串行連接寫(xiě)數據,寫(xiě)命令函數按照手冊上的時(shí)序進(jìn)行編程

voidwr_lcd(uchardat_comm,ucharcontent)//

{//要寫(xiě)的數據

uchara,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++)//

{

uchari,j;

uchara=0;//a存放讀取的數據

delay_us(50);

LCD_SCLK0;//en=0;

LCD_SID1;//wr=1

for(i=0;i<5;i++)//數據時(shí)序*****************8前5個(gè)高電平的同步碼

{

LCD_SCLK1;

LCD_SCLK0;

}

LCD_SID1;//wr=1讀操作

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

LCD_SCLK0;//en=0

LCD_SID1;//RS=1讀數據

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++)/

voidDraw_Point(unsignedcharx,unsignedchary0,unsignedcharcolor)

{

unsignedcharrow,collum,cbite;

unsignedchartempH,tempL;

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

wr_lcd(comm,0x36);//打開(kāi)繪圖顯示

//uchary_Byte,y_bit,x_Byte,x_bit;

//y_Byte=y/32;//0:上半屏幕1:下半屏幕

//y_bit=y2;//y的行號

//x_Byte=x/16;//x的列號

//x_bit=x;//x的位

//Write_Cmd(0x34);//打開(kāi)擴展指令集

//Write_Cmd(0x36);//打開(kāi)繪圖顯示

//Write_Cmd(0x80+31-y_bit);

//Write_Cmd(0x80+x_Byte+(1-y_Byte)*8);

collum=x>>4;//右移4位相當于除以16取整,得到的是x的所在大列的列號

cbite=x&0x0f;

if(y0<32)

row=y0;

else

{

row=y0-32;

collum+=8;

}

wr_lcd(comm,0x80+row);//先設定垂直位置

wr_lcd(comm,0x80+collum);//再設定水平位置

//上面兩句指定了地址,下面先讀出目前的數據,然后再寫(xiě)入新的數據

rd_lcd();//讀操作要先執行一次空讀指令

tempH=rd_lcd();//兩次讀操作

tempL=rd_lcd();

//因為沒(méi)進(jìn)行一次讀或寫(xiě)操作,地址指針AC都會(huì )自加1,所以下面要重新輸入地址同樣還是先輸入垂直地址,然后再輸入水平地址

wr_lcd(comm,0x80+row);

wr_lcd(comm,0x80+collum);

if(color)//color=1,點(diǎn)亮;color=0,擦除

{

if(cbite<8)

{

tempH|=(1<<(7-cbite));

//tempL=(1<<(7-cbite));

}

else

{

//tempH=(1<<(15-cbite));

tempL|=(1<<(15-cbite));

}

}

else

{

if(cbite<8)

{

tempH&=~(1<<(7-cbite));

//tempL=(1<<(7-cbite));

}

else

{

//tempH=(1<<(15-cbite));

tempL&=~(1<<(15-cbite));

}

}

wr_lcd(dat,tempH);//寫(xiě)入數據

wr_lcd(dat,tempL);

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

}

使用上面的函數,就可以實(shí)現對任意一個(gè)像素點(diǎn)的亮滅控制了。有了上面的函數,然后就可以實(shí)現控制液晶顯示任意曲線(xiàn)或任意形狀的圖像了。下面就貼一個(gè)顯示坐標軸的函數吧,函數實(shí)現的功能是在液晶屏上顯示X,Y坐標軸,并且把坐標軸按每10個(gè)點(diǎn)進(jìn)行分段,函數如下:

未完待續。。。



評論


技術(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>