液晶顯示器型號多種多樣,我們這里僅以1602這種最簡單的16*2字符點陣液晶模塊為例,結合DHT11來制作一個簡單的電子溫濕度計:這個溫濕度計分兩行顯示,第一行顯示當前溫度,第二行顯示當前的濕度,溫濕度每隔1秒鐘刷新一次。
1602模塊共16個腳,具體功能見表格:
由于STM32是3.3V供電,所以我們需要選用3.3V電壓的1602模塊,同時我們為了節約口線,采用了四位數據模式,D0-D3未使用。1602與Rainbow之間的接線關系如下:
VSS => GND
VDD => 3.3V
VL => 從電位器接出,電位器接在GND和3.3V之間
RS => PC0
R/W => GND
E => PC2
D0-D3 懸空
D4 => PA0
D5 => PA2
D6 => PA4
D7 => PA6
BLA => 3.3V
BLK => 與GND之間接一個100-200歐姆的電阻
由于Rainbow對1602使用了C++進行封裝,使用起來很簡單,步驟如下:
1、定義lcd對象,并指定相應的管腳:LiquidCrystal lcd(PC0, PC2, PA0, PA2, PA4, PA6),這里我們采用四位數據方式,R/W接地,對應的接線如前所述
2、調用lcd.begin(16, 2),將lcd的模式設置成兩行顯示,每行16個字符
3、調用lcd.setCursor()設置當前光標位置,lcd.print()在光標處輸出字符串
在軟件包的“Projects\E-Thermometer”文件夾包含了本文所述的電子溫濕度計的程序,可以直接編譯、燒寫和調試。我們來看看代碼:
#include "WProgram.h"
#include "Dht11.h"
#include "LiquidCrystal.h"
//定義Dth11對象,需要指定DHT11數據管腳對應的GPIO管腳
Dht11 dht11(DHT11_DATA_PIN);
//定義LCD對象,使用d4-d7四條數據線進行驅動,將rw接地
//我們共用到了6個IO:RS、E、D4-D7,RW接低電平
//本程序接法:
// RS => PC0
// E => PC2
// D4-D7 => PA0、PA2、PA4、PA6
LiquidCrystal lcd(PC0, PC2, PA0, PA2, PA4, PA6);
void setup()
{
//初始化開發板
boardInit();
//兩行顯示,每行16個字符
lcd.begin(16, 2);
lcd.print("Waiting...");
}
void loop()
{
while(1)
{
//判斷數據采集是否成功
if(dht11.read() == Dht11::OK)
{
//定位到第一行,第一列顯示溫度
lcd.setCursor(0, 0);
lcd.print("Temperature:");
lcd.print(dht11.getTemperature());
lcd.write(0xDF);
lcd.print("C");
//第二行顯示濕度
lcd.setCursor(0, 1);
lcd.print("Humidity:");
lcd.print(dht11.getHumidity());
lcd.print("%");
}
delay(1000);
}
}
int main(void)
{
setup();
while(1) loop();
}
程序編譯無誤后,通過ST-LINK寫入到Rainbow中,將DHT11溫濕度模塊插入到Rainbow中,就可以在液晶上直觀顯示出當前的溫濕度。