在對12864進(jìn)行控制的操作中,對液晶的讀寫(xiě)操作是最基本、最底層的操作,是一切其他操作的基礎。而12864液晶串行連接只需要兩根線(xiàn)就可以實(shí)現對液晶的完全控制,可以大大節省IO口。
本文引用地址:http://dyxdggzs.com/article/201611/322843.htm而對液晶的讀操作,又是對液晶單個(gè)像素點(diǎn)進(jìn)行控制的基礎,也是用液晶繪制曲線(xiàn)的基礎。
下面是我實(shí)現的串行對液晶進(jìn)行讀寫(xiě)操作的函數,是針對msp430g2553單片機寫(xiě)的,按照時(shí)序不難實(shí)現。
程序如下,注釋的也較詳細:
因為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++)//************一共2*4次循環(huán)讀一個(gè)字節數據第一次循環(huán)讀高4位,第二次循環(huán)讀低4位
{
for(i=0;i<4;i++)
{
P2DIR&=~BIT5;//把LCD_SID設為輸入,讀數據
if(P2IN&BIT5)//如果為高的話(huà)
a|=0x01;
//else
//a|=0x00;
a=a<<1;//a向高位移一位
LCD_SCLK1;
LCD_SCLK0;
}
P2DIR|=BIT5;//把LCD_SID設為輸出
LCD_SID0;
for(i=0;i<4;i++)//時(shí)鐘下面來(lái)4個(gè)時(shí)鐘脈沖
{
LCD_SCLK1;
LCD_SCLK0;
}
}
returna;
}
評論