当前位置:文档之家› Arduino入门到精通例程20

Arduino入门到精通例程20

1602液晶實驗本次試驗使用arduino直接驅動1602液晶顯示文字1602液晶在應用中非常廣泛,最初的1602液晶使用的是HD44780控制器,現在各個廠家的1602模塊基本上都是採用了與之兼容的IC,所以特性上基本都是一致的。

1602LCD主要技術參數顯示容量為16×2個字符;晶片工作電壓為4.5~5.5V;工作電流為2.0mA(5.0V);模組最佳工作電壓為5.0V;字符尺寸為2.95×4.35(W×H)mm。

1602液晶接腳定義接腳說明:1、兩組電源一組是模塊的電源一組是背光板的電源一般均使用5V供電。

本次試驗背光使用3.3V供電也可以工作。

2、VL是調節對比度的引腳,串聯不大於5KΩ的電位器進行調節。

本次實驗使用1KΩ的電阻來設定對比度。

其連接分高電位與低電位接法,本次使用低電位接法,串聯1KΩ電阻後接GND。

3、RS 是很多液晶上都有的引腳是命令/數據選擇引腳該腳電平為高時表示將進行數據操作;為低時表示進行命令操作。

4、RW 也是很多液晶上都有的引腳是讀寫選擇端該腳電平為高是表示要對液晶進行讀操作;為低時表示要進行寫操作。

5、E 同樣很多液晶模塊有此引腳通常在總線上信號穩定後給一正脈衝通知把數據讀走,在此腳為高電平的時候總線不允許變化。

6、D0—D7 8 位雙向並行總線,用來傳送命令和數據。

7、BLA是背光源正極,BLK是背光源負極。

1602液晶的基本操作分以下四種:下圖就是1602液晶實物圖1602直接與arduino通信,根據產品手冊描述,分8位連接法與4位連接法,咱們先使用8位連接法進行實驗。

硬件連接方式如下圖代碼如下int DI = 12;int RW = 11;int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用數組來定義總線需要的管腳int Enable = 2;void LcdCommandWrite(int value) {// 定義所有引腳int i = 0;for (i=DB[0]; i <= DI; i++) //總線賦值{digitalWrite(i,value & 01);//因為1602液晶信號識別是D7-D0(不是D0-D7),這裡是用來反轉信號。

value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1); // 延時1msdigitalWrite(Enable,LOW);delayMicroseconds(1); // 延時1ms}void LcdDataWrite(int value) {// 定義所有引腳int i = 0;digitalWrite(DI, HIGH);digitalWrite(RW, LOW);for (i=DB[0]; i <= DB[7]; i++) {digitalWrite(i,value & 01);value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1);digitalWrite(Enable,LOW);delayMicroseconds(1); // 延時1ms}void setup (void) {for (i=Enable; i <= DI; i++) {pinMode(i,OUTPUT);}delay(100);// 短暫的停頓後初始化LCD// 用於LCD控制需要LcdCommandWrite(0x38); // 設置為8-bit接口,2行顯示,5x7文字大小delay(64);LcdCommandWrite(0x38); // 設置為8-bit接口,2行顯示,5x7文字大小delay(50);LcdCommandWrite(0x38); // 設置為8-bit接口,2行顯示,5x7文字大小delay(20);LcdCommandWrite(0x06); // 輸入方式設定// 自動增量,沒有顯示移位delay(20);LcdCommandWrite(0x0E); // 顯示設置// 開啟顯示屏,光標顯示,無閃爍delay(20);LcdCommandWrite(0x01); // 屏幕清空,光標位置歸零delay(100);LcdCommandWrite(0x80); // 顯示設置// 開啟顯示屏,光標顯示,無閃爍delay(20);}void loop (void) {LcdCommandWrite(0x01); // 屏幕清空,光標位置歸零delay(10);LcdCommandWrite(0x80+3);delay(10);// 寫入歡迎信息LcdDataWrite('W');LcdDataWrite('e');LcdDataWrite('l');LcdDataWrite('c');LcdDataWrite('o');LcdDataWrite('m');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('t');LcdDataWrite('o');delay(10);LcdCommandWrite(0xc0+1); // 定義光標位置為第二行第二個位置LcdDataWrite('g');LcdDataWrite('e');LcdDataWrite('e');LcdDataWrite('k');LcdDataWrite('-');LcdDataWrite('w');LcdDataWrite('o');LcdDataWrite('r');LcdDataWrite('k');LcdDataWrite('s');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('p');delay(5000);LcdCommandWrite(0x01); // 屏幕清空,光標位置歸零delay(10);LcdDataWrite('I');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('m');LcdDataWrite(' ');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('n');LcdDataWrite('g');LcdDataWrite('y');LcdDataWrite('i');delay(3000);LcdCommandWrite(0x02); //設置模式為新文字替換老文字,無新文字的地方顯示不變。

delay(10);LcdCommandWrite(0x80+5); //定義光標位置為第一行第六個位置delay(10);LcdDataWrite('t');LcdDataWrite('h');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('d');LcdDataWrite('m');LcdDataWrite('i');LcdDataWrite('n');delay(5000);}////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////////int DI = 12;int RW = 11;int DB[] = {3, 4, 5, 6, 7, 8, 9, 10};//使用數組來定義總線需要的管腳int Enable = 2;void LcdCommandWrite(int value) {// 定義所有引腳int i = 0;for (i=DB[0]; i <= DI; i++) //總線賦值{digitalWrite(i,value & 01);//因為1602液晶信號識別是D7-D0(不是D0-D7),這裡是用來反轉信號。

value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1); // 延時1msdigitalWrite(Enable,LOW);delayMicroseconds(1); // 延時1ms}void LcdDataWrite(int value) {// 定義所有引腳int i = 0;digitalWrite(DI, HIGH);digitalWrite(RW, LOW);for (i=DB[0]; i <= DB[7]; i++) {digitalWrite(i,value & 01);value >>= 1;}digitalWrite(Enable,LOW);delayMicroseconds(1);digitalWrite(Enable,HIGH);delayMicroseconds(1);digitalWrite(Enable,LOW);delayMicroseconds(1); // 延時1ms}void setup (void) {int i = 0;for (i=Enable; i <= DI; i++) {pinMode(i,OUTPUT);}delay(100);// 短暫的停頓後初始化LCD// 用於LCD控制需要LcdCommandWrite(0x38); // 設置為8-bit接口,2行顯示,5x7文字大小 delay(64);LcdCommandWrite(0x38); // 設置為8-bit接口,2行顯示,5x7文字大小 delay(50);LcdCommandWrite(0x38); // 設置為8-bit接口,2行顯示,5x7文字大小 delay(20);LcdCommandWrite(0x06); // 輸入方式設定// 自動增量,沒有顯示移位delay(20);LcdCommandWrite(0x0E); // 顯示設置// 開啟顯示屏,光標顯示,無閃爍delay(20);LcdCommandWrite(0x01); // 屏幕清空,光標位置歸零delay(100);LcdCommandWrite(0x80); // 顯示設置// 開啟顯示屏,光標顯示,無閃爍delay(20);}void loop (void) {LcdCommandWrite(0x01); // 屏幕清空,光標位置歸零delay(10);LcdCommandWrite(0x80+3);delay(10);// 寫入歡迎信息LcdDataWrite('W');LcdDataWrite('e');LcdDataWrite('l');LcdDataWrite('c');LcdDataWrite('o');LcdDataWrite('m');LcdDataWrite('e');LcdDataWrite(' ');LcdDataWrite('t');LcdDataWrite('o');delay(10);LcdCommandWrite(0xc0+1); // 定義光標位置為第二行第二個位置delay(10);LcdDataWrite('g');LcdDataWrite('e');LcdDataWrite('e');LcdDataWrite('k');LcdDataWrite('-');LcdDataWrite('w');LcdDataWrite('o');LcdDataWrite('r');LcdDataWrite('k');LcdDataWrite('s');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('p');delay(5000);LcdCommandWrite(0x01); // 屏幕清空,光標位置歸零delay(10);LcdDataWrite('I');LcdDataWrite(' ');LcdDataWrite('a');LcdDataWrite('m');LcdDataWrite(' ');LcdDataWrite('h');LcdDataWrite('o');LcdDataWrite('n');LcdDataWrite('g');LcdDataWrite('y');LcdDataWrite('i');delay(3000);LcdCommandWrite(0x02); //設置模式為新文字替換老文字,無新文字的地方顯示不變。

相关主题