7款傳感器與執(zhí)行器的提法,在網(wǎng)絡(luò)上廣泛流傳,其實(shí)Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒于本人手頭積累了一些傳感器和執(zhí)行器模塊,依照實(shí)踐出真知(一定要動手做)的理念,以學(xué)習(xí)和交流為目的,這里準(zhǔn)備逐一動手嘗試系列實(shí)驗(yàn),不管成功(程序走通)與否,都會記錄下來—小小的進(jìn)步或是搞不掂的問題,希望能夠拋磚引玉。
【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料代碼+仿真編程+圖形編程)
實(shí)驗(yàn)一百三十三:LCD1602 字符液晶屏 輸入輸出擴(kuò)展板 LCD Keypad Shield
LCD
LCD 即 Liquid Crystal Display 的首字母縮寫,意為“液態(tài)晶體顯示器”,即液晶顯示器。而 LED 顯示器是指液晶顯示器(LCD)中的一種,即以 LED(發(fā)光二極管)為背光光源的液晶顯示器(LCD)??梢?,LCD 是包括 LED的。與 LED 顯示器相對應(yīng)的實(shí)際上是 CCFL顯示器。
工作原理
液晶從形狀和外觀看上去都是一種液體,但它的水晶式分子結(jié)構(gòu)又表現(xiàn)出固體的形態(tài)。像磁場中的金屬一樣,當(dāng)受到外界電場影響時(shí),其分子會產(chǎn)生精確的有序排列;如對分子的排列加以適當(dāng)?shù)目刂?,液晶分子將會允許光線穿透;光線穿透液晶的路徑可由構(gòu)成它的分子排列來決定,這又是固體的一種特征。液晶是一種有機(jī)復(fù)合物,由長棒狀的分子構(gòu)成。在自然狀態(tài)下,這些棒狀分子的長軸大致平行。液晶屏(Liquid Crystal Display,以下簡稱LCD)第一個(gè)特點(diǎn)是必須將液晶灌入兩個(gè)列有細(xì)槽的平面之間才能正常工作。這兩個(gè)平面上的槽互相垂直(90度相交),也就是說,若一個(gè)平面上的分子南北向排列,則另一平面上的分子?xùn)|西向排列,而位于兩個(gè)平面之間的分子被強(qiáng)迫進(jìn)入一種90度扭轉(zhuǎn)的狀態(tài)。由于光線順著分子的排列方向傳播,所以光線經(jīng)過液晶時(shí)也被扭轉(zhuǎn)90度。但當(dāng)液晶上加一個(gè)電壓時(shí),分子便會重新垂直排列,使光線能直射出去,而不發(fā)生任何扭轉(zhuǎn)。LCD的第二個(gè)特點(diǎn)是它依賴極化濾光片和光線本身,自然光線是朝四面八方隨機(jī)發(fā)散的,極化濾光片實(shí)際是一系列越來越細(xì)的平行線。這些線形成一張網(wǎng),阻斷不與這些線平行的所有光線,極化濾光片的線正好與第一個(gè)垂直,所以能完全阻斷那些已經(jīng)極化的光線。 只有兩個(gè)濾光片的線完全平行,或者光線本身已扭轉(zhuǎn)到與第二個(gè)極化濾光片相匹配,光線才得以穿透。LCD正是由這樣兩個(gè)相互垂直的極化濾光片構(gòu)成,所以在正常情況下應(yīng)該阻斷所有試圖穿透的光線。但是,由于兩個(gè)濾光片之間充滿了扭曲液晶,所以在光線穿出第一個(gè)濾光片后,會被液晶分子扭轉(zhuǎn)90度,最后從第二個(gè)濾光片中穿出。另一方面,若為液晶加一個(gè)電壓,分子又會重新排列并完全平行,使光線不再扭轉(zhuǎn),所以正好被第二個(gè)濾光片擋住。以Synaptics TDDI技術(shù)為例,是將觸摸控制器和顯示驅(qū)動器整合到了單一芯片中,這減少了組件數(shù)量,簡化了設(shè)計(jì)。ClearPad 4291支持混合多點(diǎn)內(nèi)嵌式設(shè)計(jì),因利用了液晶顯示器(LCD)中的已有層,因而無需分立式觸控傳感器。ClearPad 4191又前進(jìn)了一步,利用了LCD中已有的電極,因此實(shí)現(xiàn)了更加簡潔的系統(tǒng)架構(gòu)。這兩款解決方案都使觸控屏更薄、顯示器更明亮,有助于改進(jìn)智能手機(jī)和平板電腦設(shè)計(jì)的整體美學(xué)效果。對于反射式的TN(扭轉(zhuǎn)向列型 Twisted Nematic)液晶顯示器其構(gòu)造由如下幾層組成:極化濾光片、玻璃、相互絕緣又透明的縱橫兩組電極、液晶體、電極、玻璃、極化濾光片、反射片。
LCD1602
也叫1602字符型液晶,它能顯示2行字符信息,每行又能顯示16個(gè)字符,所以簡稱1602。它是一種專門用來顯示字母、數(shù)字、符號的點(diǎn)陣型液晶模塊。它是由字符型液晶顯示屏(LCD)、控制驅(qū)動主電路HD44780及其擴(kuò)展驅(qū)動電路HD44100,以及少量電阻、電容元件和結(jié)構(gòu)件等裝配在PCB板上而組成。由若干個(gè)5x7或者5x10的點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以用顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱?,所以它不能很好的顯示圖片。不同廠家生產(chǎn)的LCD1602芯片可能有所不同,但使用方法都是一樣的。為了降低成本,絕大多數(shù)制造商都直接將裸片做到板子上。采用單+5V 電源供電,外圍電路配置簡單,價(jià)格便宜,具有很高的性價(jià)比。
LCD1602管腳功能
1602采用標(biāo)準(zhǔn)的16腳接口,其中:
第1引腳:GND為電源地
第2引腳:VCC接5V電源正極
第3引腳:V0為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地電源時(shí)對比度最高(對比度過高時(shí)會 產(chǎn)生“鬼影”,使用時(shí)可以通過一個(gè)10K的電位器調(diào)整對比度)。
第4引腳:RS為寄存器選擇,高電平1時(shí)選擇數(shù)據(jù)寄存器、低電平0時(shí)選擇指令寄存器。
第5引腳:RW為讀寫信號線,高電平(1)時(shí)進(jìn)行讀操作,低電平(0)時(shí)進(jìn)行寫操作。
第6引腳:E(或EN)端為使能(enable)端,高電平(1)時(shí)讀取信息,負(fù)跳
變時(shí)執(zhí)行指令。
第7~14引腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電
源。
第15引腳背光正極,
第16引腳背光負(fù)極。
LCD1602 電原理圖
LCD1602的指令說明
LCD Keypad Shield擴(kuò)展板
是一款提供2行16字符液晶顯示的Arduino擴(kuò)展板。擴(kuò)展了多個(gè)按鍵輸入,可供用戶作為LCD顯示屏的菜單選擇按鍵或者操控按鍵使用。一個(gè)擴(kuò)展板就能讓你與Arduino設(shè)備進(jìn)行互動。我們還擴(kuò)展Arduino Reset按鍵,方便用戶進(jìn)行軟件調(diào)試。用戶通過調(diào)節(jié)擴(kuò)展板上的藍(lán)色電位器,能夠幫助您調(diào)節(jié)LCD屏的對比度。
對于Arduino初學(xué)者來說,不必為繁瑣復(fù)雜液晶驅(qū)動電路連線而頭疼了,這款LCD擴(kuò)展板將電路簡化,直接將此板插到Arduino Duemilanove 或 Uno控制器上即可使用,調(diào)用Arduino自帶的LCD庫,簡單的幾行代碼便可以完成數(shù)據(jù)和字符的顯示功能,有興趣的朋友還能學(xué)習(xí)自定義顯示內(nèi)容。
LCD Keypad Shield擴(kuò)展板技術(shù)規(guī)格
1602藍(lán)色背景液晶(2行16字節(jié))
具有LCD對比度調(diào)節(jié)功能
5個(gè)按鍵輸入
擴(kuò)展模擬信號傳感器接口和數(shù)字口
ICSP編程接口
具有APC220,藍(lán)牙V3接口
尺寸:58x80mm
模塊應(yīng)用
鍋爐控制面板
機(jī)器人控制面板
環(huán)境監(jiān)控設(shè)備
機(jī)械運(yùn)行狀態(tài)監(jiān)控
LCD Keypad Shield擴(kuò)展板模塊電原理圖
LCD Keypad Shield輸入輸出擴(kuò)展板使用2行16個(gè)字符液晶,具有對比度調(diào)節(jié)和背光燈,使用1個(gè)模擬口便完成5個(gè)按鍵的輸入,1個(gè)復(fù)位按鍵,未使用的IO口都擴(kuò)展出來備用,充分利用IO口。占用數(shù)字端口:PIN4(DB4),5(DB5),6(DB6),7(DB7),8(RS),9(E),10(背光控制),模擬按鍵端口A0。
引腳定義
模擬A0 按鈕(選擇、向上、向右、向下和向左)
數(shù)字4 DB4
數(shù)字5 DB5
數(shù)字6 DB6
數(shù)字7 DB7
數(shù)字8 RS(數(shù)據(jù)或信號顯示選擇)
數(shù)字9 復(fù)位
數(shù)字10 背光控制
Arduino實(shí)驗(yàn)開源代碼
/*
【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料代碼+仿真編程+圖形編程)
實(shí)驗(yàn)一百三十三:LCD1602 字符液晶屏 輸入輸出擴(kuò)展板 LCD Keypad Shield
實(shí)驗(yàn)之一:這個(gè)程序用來測試LCD液晶顯示模塊和5個(gè)按鍵。
LiquidCrystal庫:IDE—工具—管理庫—搜索LiquidCrystal—安裝
*/
#include <LiquidCrystal.h>
// 選擇LCD上使用到的引腳
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// 定義各按鍵
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
//讀取按鍵值
int read_LCD_buttons()
{
adc_key_in = analogRead(0); // 從模擬口0讀值
// 直接讀到的5個(gè)按鍵值在以下值附近:0,144,329,504,741
// 通過設(shè)定不同的閥值,就可以對應(yīng)讀到相應(yīng)的按鍵
if (adc_key_in > 1000) return btnNONE;
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 250) return btnUP;
if (adc_key_in < 450) return btnDOWN;
if (adc_key_in < 650) return btnLEFT;
if (adc_key_in < 850) return btnSELECT;
// V1.0的版本使用以下的閥值:
/*
if (adc_key_in < 50) return btnRIGHT;
if (adc_key_in < 195) return btnUP;
if (adc_key_in < 380) return btnDOWN;
if (adc_key_in < 555) return btnLEFT;
if (adc_key_in < 790) return btnSELECT;
*/
return btnNONE;
}
void setup()
{
lcd.begin(16, 2); // 開始
lcd.setCursor(0,0);
lcd.print("Push the buttons"); // 輸出“Push the buttons”
}
void loop()
{
lcd.setCursor(9,1); // 光標(biāo)定在第二行,空開9格
lcd.print(millis()/1000); // 輸出等待時(shí)間
lcd.setCursor(0,1); // 光標(biāo)移動到第二行開頭
lcd_key = read_LCD_buttons(); // 讀取按鍵
switch (lcd_key) // 選擇按鍵
{
case btnRIGHT:
{
lcd.print("RIGHT ");
break;
}
case btnLEFT:
{
lcd.print("LEFT ");
break;
}
case btnUP:
{
lcd.print("UP ");
break;
}
case btnDOWN:
{
lcd.print("DOWN ");
break;
}
case btnSELECT:
{
lcd.print("SELECT");
break;
}
case btnNONE:
{
lcd.print("NONE ");
break;
}
}
}
Arduino實(shí)驗(yàn)場景圖
按下不同按鍵的輸出顯示
Arduino實(shí)驗(yàn)開源代碼
/*
【Arduino】168種傳感器模塊系列實(shí)驗(yàn)(資料代碼+仿真編程+圖形編程)
實(shí)驗(yàn)一百三十三:LCD1602 字符液晶屏 輸入輸出擴(kuò)展板 LCD Keypad Shield
實(shí)驗(yàn)之二:ADC密鑰測試
LiquidCrystal庫:IDE—工具—管理庫—搜索LiquidCrystal—安裝
*/
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
char msgs[5][16] = {"Right Key OK ",
"Up Key OK ",
"Down Key OK ",
"Left Key OK ",
"Select Key OK"
};
int adc_key_val[5] = {50, 200, 400, 600, 800 };
int NUM_KEYS = 5;
int adc_key_in;
int key = -1;
int oldkey = -1;
void setup()
{
lcd.clear();
lcd.begin(16, 2);
lcd.setCursor(0, 0);
lcd.print("ADC key testing");
}
void loop()
{
adc_key_in = analogRead(0); // 從A0傳感器端讀取值
key = get_key(adc_key_in); // 轉(zhuǎn)換為按鍵
if (key != oldkey) // 如果檢測到按鍵
{
delay(50); // 等待解除緩沖時(shí)間
adc_key_in = analogRead(0); // 從A0傳感器端讀取值
key = get_key(adc_key_in); // 轉(zhuǎn)換為按鍵
if (key != oldkey)
{
lcd.setCursor(0, 1);
oldkey = key;
if (key >= 0) {
lcd.print(msgs[key]);
}
}
}
delay(100);
}
// 將ADC值轉(zhuǎn)換為密鑰號
int get_key(unsigned int input)
{
int k;
for (k = 0; k < NUM_KEYS; k++)
{
if (input < adc_key_val[k])
{
return k;
}
}
if (k >= NUM_KEYS)k = -1; // 未按下有效鍵
return k;
}
Arduino實(shí)驗(yàn)場景圖
實(shí)驗(yàn)開源仿真編程(Linkboy V4.62)文章來源:http://www.zghlxwxcb.cn/news/detail-507107.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-507107.html
到了這里,關(guān)于【雕爺學(xué)編程】Arduino動手做(133)---LCD1602擴(kuò)展板模塊的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!