對(duì)于任何微控制器項(xiàng)目,將顯示單元與它連接將使項(xiàng)目更容易,并吸引用戶與之交互。微控制器最常用的顯示單元是 16×2 字母數(shù)字顯示器。這些類型的顯示器不僅可用于向用戶顯示重要信息,還可以在項(xiàng)目的初始開(kāi)發(fā)階段充當(dāng)調(diào)試工具。因此,在本教程中,我們將學(xué)習(xí)如何將16×2 LCD顯示器與STM32F103C8T6STM32開(kāi)發(fā)板連接,并使用Arduino IDE對(duì)其進(jìn)行編程。
所需材料
STM32藍(lán)丸開(kāi)發(fā)板
16×2 液晶顯示屏
FTDI 程序員
連接線
液晶顯示器
16×2 點(diǎn)陣 LCD 顯示屏簡(jiǎn)介
如前所述,Energia IDE提供了一個(gè)漂亮的庫(kù),使接口變得輕而易舉,因此不一定要了解顯示模塊的任何信息。但是,展示我們正在使用的東西不是很有趣嗎!!
名稱 16×2 意味著顯示器有 16 列和 2 行,它們一起 (16*2) 形成 32 個(gè)框。一個(gè)盒子在下圖中看起來(lái)像這樣
單個(gè)框有 40 個(gè)像素(點(diǎn)),矩陣順序?yàn)?5 行 8 列,這 40 個(gè)像素共同構(gòu)成一個(gè)字符。同樣,可以使用所有框顯示 32 個(gè)字符。現(xiàn)在讓我們看一下引腳排列。
LCD共有16個(gè)引腳,如上圖所示,它們可以分為四組,如下所示
源引腳(1、2 和 3):這些引腳為顯示器提供功率和對(duì)比度水平
控制引腳(4、5 和 6):這些引腳設(shè)置/控制LCD接口IC中的寄存器(更多信息可在下面的鏈接中找到)
數(shù)據(jù)/命令引腳(7 至 14):這些引腳提供LCD上應(yīng)顯示哪些信息的數(shù)據(jù)。
LED 引腳(15 和 16):如果需要,這些引腳用于照亮LCD的背光(可選)。
電路圖和連接
16*2點(diǎn)陣LCD與STM32F103C8T6 STM32藍(lán)色藥丸板接口的電路圖如下所示。它是使用弗里辛軟件制作的。
如您所見(jiàn),完整的連接是通過(guò)面包板進(jìn)行的。我們需要一個(gè)FTDI板來(lái)對(duì)STM32微控制器進(jìn)行編程。因此,與我們之前的教程類似,我們將FTDI板連接到STM32,F(xiàn)DTI編程器的Vcc和接地引腳分別連接到STM32的5V引腳和接地引腳。這用于為STM32板和LCD供電,因?yàn)閮烧叨伎梢越邮?5V。FTDI 板的 Rx 和 Tx 引腳連接到 STM9 的 A10 和 A32 引腳,因此我們可以直接對(duì)電路板進(jìn)行編程,而無(wú)需引導(dǎo)加載程序。
接下來(lái),液晶屏必須連接到STM32板。我們將在4位模式下使用LCD,因此我們必須將4個(gè)數(shù)據(jù)位引腳(DB4至DB7)和兩個(gè)控制引腳(RS和EN)連接到STM32板,如上面的STM32F103C8T6 LCD接口電路圖所示。此外,下表將幫助您建立連接。
液晶屏引腳編號(hào) | 液晶屏引腳名稱 | STM32 引腳名稱 |
1 | 地面(錠) | 地面 (G) |
2 | 可變資本公司 | 5V |
3 | 維伊 | 地面 (G) |
4 | 寄存器選擇 (RS) | PB11 |
5 | 讀/寫(xiě) (RW) | 地面 (G) |
6 | 啟用 (英文) | PB10 |
7 | 數(shù)據(jù)位 0 (DB0) | 無(wú)連接(常閉) |
8 | 數(shù)據(jù)位 1 (DB1) | 無(wú)連接(常閉) |
9 | 數(shù)據(jù)位 2 (DB2) | 無(wú)連接(常閉) |
10 | 數(shù)據(jù)位 3 (DB3) | 無(wú)連接(常閉) |
11 | 數(shù)據(jù)位 4 (DB4) | PB0 |
12 | 數(shù)據(jù)位 5 (DB5) | PB1 |
13 | 數(shù)據(jù)位 6 (DB6) | 電腦13 |
14 | 數(shù)據(jù)位 7 (DB7) | 電腦14 |
15 | 正極指示燈 | 5V |
16 | 負(fù)極指示燈 | 地面 (G) |
連接完成后,我們可以打開(kāi)Arduino IDE并開(kāi)始編程。
使用 Arduino 對(duì) LCD 的 STM32 進(jìn)行編程
如本教程所述,我們將使用Arduino IDE對(duì)STM32微控制器進(jìn)行編程。但是,默認(rèn)情況下,Arduino IDE不會(huì)安裝STM32板,因此我們必須下載一個(gè)軟件包并為此準(zhǔn)備Arduino IDE。
一旦STM32板卡安裝在Arduino IDE中,我們就可以開(kāi)始編程了。該程序與Arduino板非常相似,唯一會(huì)改變的是引腳名稱,因?yàn)镾TM32和Arduino的符號(hào)不同。完整的程序在本頁(yè)末尾給出,但為了解釋該程序,我將其拆分為有意義的小片段,如下所示。
使用Arduino對(duì)我們的微控制器進(jìn)行編程的一個(gè)顯著優(yōu)勢(shì)是Arduino為幾乎所有著名的傳感器和執(zhí)行器提供了現(xiàn)成的庫(kù)。因此,在這里,我們通過(guò)包含LCD庫(kù)來(lái)啟動(dòng)我們的程序,這使編程變得更加容易。
#include // include the LCD library
在下一行中,我們必須指定已將LCD顯示控件和數(shù)據(jù)線連接到STM32的GPIO引腳。為此,我們必須檢查我們的硬件,為方便起見(jiàn),您還可以參考頂部給出的表格,其中列出了 LCD 與 STM32 的 GPIO 引腳的引腳名稱。提到引腳后,我們可以使用液晶功能初始化LCD。我們還將我們的LCD命名為“LCD”,如下所示。
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD
接下來(lái),我們進(jìn)入設(shè)置功能。在這里,我們首先提到我們使用的LCD類型。由于它是 16*2 LCD,我們使用 lcd.begin(16,2) 行。void 設(shè)置函數(shù)中的代碼只執(zhí)行一次。因此,我們使用它來(lái)顯示一個(gè)介紹文本,該文本在屏幕上顯示 2 秒鐘,然后被清除。要提及文本必須出現(xiàn)的位置,我們使用函數(shù)lcd.setcursor,并使用lcd.print函數(shù)打印文本。例如,lcd.setCursor(0,0) 會(huì)將光標(biāo)設(shè)置在我們打印“接口 LCD”的第一行和第一列,函數(shù) lcd.setCursor (0,1) 將光標(biāo)移動(dòng)到第二行第一列,我們?cè)谄渲写蛴 癈ircuitDigest”行。
void setup() { lcd.begin(16, 2);//We are using a 16*2 LCD lcd.setCursor(0, 0); //At first row first column lcd.print("Interfacing LCD"); //Print this lcd.setCursor(0, 1); //At secound row first column lcd.print("-CircuitDigest"); //Print this delay(2000); //wait for two secounds lcd.clear(); //Clear the screen }
顯示介紹文本后,我們通過(guò)創(chuàng)建延遲來(lái)保持程序 2 秒,以便用戶可以閱讀介紹消息。此延遲由行延遲 (2000) 創(chuàng)建,其中 2000 是以磨機(jī)秒為單位的延遲值。延遲后,我們使用lcd.clear()函數(shù)清除LCD,該函數(shù)通過(guò)刪除LCD上的所有文本來(lái)清除LCD。
最后在空循環(huán)中,我們?cè)诘谝恍酗@示“STM32 – Blue Pill”,在第二行顯示秒值。秒的值可以從 millis() 函數(shù)中獲得。millis() 是一個(gè)計(jì)時(shí)器,從 MCU 通電時(shí)開(kāi)始遞增。該值以毫秒的形式出現(xiàn),因此我們?cè)趯⑵滹@示在LCD上之前將其除以1000。
void loop() {
lcd.setCursor(0, 0); //At first row first column
lcd.print("STM32 -Blue Pill"); //Print this
lcd.setCursor(0, 1); //At secound row first column
lcd.print(millis() / 1000); //Print the value of secounds
}
將程序上傳到STM32F103C8T6板
按照電路圖中所示進(jìn)行連接,并在Arduino IDE上使用下面給出的代碼。轉(zhuǎn)到工具并確保在入門教程中選擇了正確的板。此外,在上傳程序之前,請(qǐng)確保將啟動(dòng) 0 跳線設(shè)置為 1,如下圖所示,然后按重置按鈕。按下上傳按鈕時(shí),應(yīng)上傳代碼,消息將顯示在LCD上,如下圖所示。
在工作模式下驗(yàn)證輸出
如上一段所述,您應(yīng)該能夠在上傳代碼后立即注意到輸出。但是下次上電時(shí),該程序?qū)⒉黄鹱饔茫驗(yàn)殡娐钒迦蕴幱诰幊棠J健R虼耍坏┏绦蛏蟼鳎瑔?dòng) 0 上的跳線應(yīng)更改回 0 位置,如下所示。此外,由于程序已經(jīng)上傳到STM32板,我們不需要FTDI板,整個(gè)設(shè)置可以通過(guò)STM32板的micro-USB端口供電,如下所示。
這只是一個(gè)簡(jiǎn)單的接口項(xiàng)目,以幫助將LCD顯示器與STM32板一起使用,但您可以進(jìn)一步使用它來(lái)構(gòu)建很酷的項(xiàng)目。希望您理解本教程并從中學(xué)到一些有用的東西。
/*
Program to test 16*2 Alaphanumeric LCD with STM32 (Blue Pill)
The circuit:
* LCD RS pin to digital pin PB11
* LCD Enable pin to digital pin PB10
* LCD D4 pin to digital pin PB0
* LCD D5 pin to digital pin PB1
* LCD D6 pin to digital pin PC13
* LCD D7 pin to digital pin PC14
* LCD R/W pin to ground
* LCD VSS pin to ground
* LCD VCC pin to 5V
*/
#include // include the LCD library
const int rs = PB11, en = PB10, d4 = PB0, d5 = PB1, d6 = PC13, d7 = PC14; //mention the pin names to with LCD is connected to
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); //Initialize the LCD
void setup() {
lcd.begin(16, 2);//We are using a 16*2 LCD
lcd.setCursor(0, 0); //At first row first column
lcd.print("Interfacing LCD"); //Print this
lcd.setCursor(0, 1); //At secound row first column
lcd.print("-CircuitDigest"); //Print this
delay(2000); //wait for two secounds
lcd.clear(); //Clear the screen
}
void loop() {
lcd.setCursor(0, 0); //At first row first column
lcd.print("STM32 -Blue Pill"); //Print this
lcd.setCursor(0, 1); //At secound row first column
lcd.print(millis() / 1000); //Print the value of secounds
}
-
lcd
+關(guān)注
關(guān)注
34文章
4411瀏覽量
167101 -
STM32
+關(guān)注
關(guān)注
2266文章
10872瀏覽量
354826 -
STM32F103C8T6
+關(guān)注
關(guān)注
107文章
160瀏覽量
83233
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論