|
LCD1602還有一種使用高4位數(shù)據(jù)線的接法,可以減少單片機的負擔(dān)。
另外,RW的控制也并非是必用的,如果僅僅是用于讀取LCD1602“忙”的狀態(tài),就可以用稍事等待來代替。這樣一來,RW就可以直接接地,使LCD1602永遠處于寫入的狀態(tài)。
那么,LCD1602和單片機之間就僅僅需要6條線了,這就是LCD1602最簡潔的連接方法。
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define LCD1602_DATAPINS P1
- sbit lcdrs = P2^1; //LCD寄存器選擇
- sbit lcdrw = P2^2; //LCD讀寫控制
- sbit lcden = P2^3; //LCD使能控制
- void delay(uint m) //延時函數(shù)
- {while(--m);}
- //使用的是4位數(shù)據(jù)傳輸
- void write(uchar com, uchar lcddata) //LCD1602寫入8位命令/數(shù)據(jù)子函數(shù)
- {
- lcdrs=com; //寫入命令 0 選擇發(fā)送命令 1 選擇發(fā)送數(shù)據(jù)
-
- //LCD1602_DATAPINS=(lcddata); //由于4位的接線是接到P1口的高四位,所以傳送高四位不用改
- LCD1602_DATAPINS=(lcddata&0xf0)>>4; //由于4位的接線是接到P1口的低四位,接到LCD高四位
- //delay(200);
- lcden=1; //寫入時序
- delay(30); //保持時間
- lcden=0; //使能清零
- //LCD1602_DATAPINS=(lcddata & 0x0f)<< 4; //發(fā)送低四位
- LCD1602_DATAPINS=(lcddata&0x0f); //發(fā)送高四位
- //delay(200);
- lcden=1; //寫入時序
- delay(30); //保持時間
- lcden=0; //使能清零
- //delay(20);
- }
- void init() //LCD初始化子函數(shù)
- {
- lcdrw=0; //選擇寫入
- lcden=0; //使能
- delay(5);
- write(0,0x32); //將8位總線轉(zhuǎn)為4位總線
- write(0,0x28); //在四位線下的初始化
- write(0,0x0c); //開顯示 不顯示光標
- write(0,0x06); // 讀入后AC(指針)加1,向右寫
- write(0,0x01); //清屏
- write(0,0x80); //設(shè)置數(shù)據(jù)指針起點
- delay(255);
- }
- void main()
- {
-
- init(); //LCD初始化
- while(1)
- {
- write(1,'a');write(1,'b');delay(65255);delay(65255);
- }
- }
復(fù)制代碼
|
|