您的位置:首頁>正文

1602精簡的四線控制方法,值得一看

一般情況下, LCD1602與單片機連接的線路共有11條, 其中有8條資料線, 3條控制線(其餘的5條為電源和地)。 如果把它們都連接上, 將佔用較多的單片機的介面。 那麼如何減少介面呢? LCD1602還有一種使用高4位元資料線的接法, 可以減少單片機的負擔。 另外, RW的控制也並非是必用的, 如果僅僅是用於讀取LCD1602“忙”的狀態, 就可以用稍事等待來代替。 這樣一來, RW就可以直接接地, 使LCD1602永遠處於寫入的狀態。 那麼, LCD1602和單片機之間就僅僅需要6條線了, 這算是一種比較簡潔的接法了。

下面的一個例子是使用P1口的高4位連接到LCD1602的高4位元資料線。

功能說明:讓1602顯示“51Start:” “the best one!”

程式:

#include

#define uchar unsigned char

#define uint unsigned int

sbit lcdrs=P3^2; //資料/命令選擇端, 低電平為指令, 高電平為資料

sbit lcdrw=P3^3; //讀寫控制端, 低電平為寫

sbit lcden=P3^4; //使能端

uchar code table1[]=" 51Start: ";

uchar code table2[]=" the best one! ";

void delay(uint x) //延時 x 毫秒

{

uint i,j;

for(i=x;i>0;i--)

for(j=110;j>0;j--);

}

/*==========================================================

*函數名稱:Lcd_1602_write(uchar com,date)

*功 能:向1602寫資料/指令

*入口參數:com(com=0 寫命令 com=1 寫資料)

*出口參數:

*說 明:四線用的是1602的高四位DB4-DB7, 單片機的數據口為P1口的高四位P1.4-P1.7

*==========================================================*/

void Lcd_1602_write(uchar com,date)

{

uchar i;

lcdrw=0; //設置為寫

lcdrs=com; //將形參傳給lcdrs

for(i=0;i

{

lcden=1;

P1=(P1&0x0f)|(date&0xf0); //將date的高四位送入P1, 同時保持P1的低四位不變

//如果使用P1的低四位的話, 則該處應該改為:P1=(P1&0xf0)|((date>>4)&0x0f);

delay(3); //適當延時, 資料穩定

lcden=0; //送入資料

date

}

}

/*==========================================================

*函數名稱:void Lcd_1602_init()

*功 能:對1602進行初始化

*入口參數:

*出口參數:

*說 明:用四線時, 1602的初始化只需要高四位元資料就可以完成, 在初始化完成之後必須再傳入四位元資料, 需注意。

* 執行完write_1602(0,0x28);之後液晶已經初始化, 其實在執行了一半的時候就已經初始化完成, 此時又傳入了

四位元資料(一個寫語句會傳入8位元資料), 這時候如果直接寫資料的話, 就會形成亂碼

*==========================================================*/

void Lcd_1602_init()

{

Lcd_1602_write(0,0x28);//0x28=0010 1000, 將液晶設置為16*2顯示, 5*7點陣, 4位元資料口

delay(5);//

lcden=1; //

lcden=0;

Lcd_1602_write(0,0x28); //顯示方式設置

Lcd_1602_write(0,0x0e); //設置開顯示, 不顯示游標

Lcd_1602_write(0,0x06); //預設(0x06)寫入新資料後游標右移 螢幕不移動

Lcd_1602_write(0,0x01); //顯示清0, 資料指標清0

}

//主函數

void main()

{

uchar num;

Lcd_1602_init();

Lcd_1602_write(0,0x80); //第一行

for(num=0;num

{

Lcd_1602_write(1,table1[num]);//寫數據

delay(3);

}

Lcd_1602_write(0,0xc0); //第二行

for(num=0;num

{

Lcd_1602_write(1,table2[num]);

delay(3);

}

while(1);

}

本文素材來自網路。 以上資訊僅供參考, 希望對大家有幫助。

同類文章
Next Article
喜欢就按个赞吧!!!
点击关闭提示