對于任何微控制器項目,將顯示單元與它連接將使項目更容易,并吸引用戶與之交互。微控制器最常用的顯示單元是 16×2 字母數字顯示器。這些類型的顯示器不僅可用于向用戶顯示重要信息,還可以在項目的初始開發階段充當調試工具。因此,在本教程中,我們將學習如何將16×2 LCD顯示器與STM32F103C8T6STM32開發板連接,并使用Arduino IDE對其進行編程。
所需材料
STM32藍丸開發板
16×2 液晶顯示屏
FTDI 程序員
連接線
液晶顯示器
16×2 點陣 LCD 顯示屏簡介
如前所述,Energia IDE提供了一個漂亮的庫,使接口變得輕而易舉,因此不一定要了解顯示模塊的任何信息。但是,展示我們正在使用的東西不是很有趣嗎!!
名稱 16×2 意味著顯示器有 16 列和 2 行,它們一起 (16*2) 形成 32 個框。一個盒子在下圖中看起來像這樣
單個框有 40 個像素(點),矩陣順序為 5 行 8 列,這 40 個像素共同構成一個字符。同樣,可以使用所有框顯示 32 個字符。現在讓我們看一下引腳排列。
LCD共有16個引腳,如上圖所示,它們可以分為四組,如下所示
源引腳(1、2 和 3):這些引腳為顯示器提供功率和對比度水平
控制引腳(4、5 和 6):這些引腳設置/控制LCD接口IC中的寄存器(更多信息可在下面的鏈接中找到)
數據/命令引腳(7 至 14):這些引腳提供LCD上應顯示哪些信息的數據。
LED 引腳(15 和 16):如果需要,這些引腳用于照亮LCD的背光(可選)。
電路圖和連接
16*2點陣LCD與STM32F103C8T6 STM32藍色藥丸板接口的電路圖如下所示。它是使用弗里辛軟件制作的。
如您所見,完整的連接是通過面包板進行的。我們需要一個FTDI板來對STM32微控制器進行編程。因此,與我們之前的教程類似,我們將FTDI板連接到STM32,FDTI編程器的Vcc和接地引腳分別連接到STM32的5V引腳和接地引腳。這用于為STM32板和LCD供電,因為兩者都可以接受+5V。FTDI 板的 Rx 和 Tx 引腳連接到 STM9 的 A10 和 A32 引腳,因此我們可以直接對電路板進行編程,而無需引導加載程序。
接下來,液晶屏必須連接到STM32板。我們將在4位模式下使用LCD,因此我們必須將4個數據位引腳(DB4至DB7)和兩個控制引腳(RS和EN)連接到STM32板,如上面的STM32F103C8T6 LCD接口電路圖所示。此外,下表將幫助您建立連接。
液晶屏引腳編號 | 液晶屏引腳名稱 | STM32 引腳名稱 |
1 | 地面(錠) | 地面 (G) |
2 | 可變資本公司 | 5V |
3 | 維伊 | 地面 (G) |
4 | 寄存器選擇 (RS) | PB11 |
5 | 讀/寫 (RW) | 地面 (G) |
6 | 啟用 (英文) | PB10 |
7 | 數據位 0 (DB0) | 無連接(常閉) |
8 | 數據位 1 (DB1) | 無連接(常閉) |
9 | 數據位 2 (DB2) | 無連接(常閉) |
10 | 數據位 3 (DB3) | 無連接(常閉) |
11 | 數據位 4 (DB4) | PB0 |
12 | 數據位 5 (DB5) | PB1 |
13 | 數據位 6 (DB6) | 電腦13 |
14 | 數據位 7 (DB7) | 電腦14 |
15 | 正極指示燈 | 5V |
16 | 負極指示燈 | 地面 (G) |
連接完成后,我們可以打開Arduino IDE并開始編程。
使用 Arduino 對 LCD 的 STM32 進行編程
如本教程所述,我們將使用Arduino IDE對STM32微控制器進行編程。但是,默認情況下,Arduino IDE不會安裝STM32板,因此我們必須下載一個軟件包并為此準備Arduino IDE。
一旦STM32板卡安裝在Arduino IDE中,我們就可以開始編程了。該程序與Arduino板非常相似,唯一會改變的是引腳名稱,因為STM32和Arduino的符號不同。完整的程序在本頁末尾給出,但為了解釋該程序,我將其拆分為有意義的小片段,如下所示。
使用Arduino對我們的微控制器進行編程的一個顯著優勢是Arduino為幾乎所有著名的傳感器和執行器提供了現成的庫。因此,在這里,我們通過包含LCD庫來啟動我們的程序,這使編程變得更加容易。
#include // include the LCD library
在下一行中,我們必須指定已將LCD顯示控件和數據線連接到STM32的GPIO引腳。為此,我們必須檢查我們的硬件,為方便起見,您還可以參考頂部給出的表格,其中列出了 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
接下來,我們進入設置功能。在這里,我們首先提到我們使用的LCD類型。由于它是 16*2 LCD,我們使用 lcd.begin(16,2) 行。void 設置函數中的代碼只執行一次。因此,我們使用它來顯示一個介紹文本,該文本在屏幕上顯示 2 秒鐘,然后被清除。要提及文本必須出現的位置,我們使用函數lcd.setcursor,并使用lcd.print函數打印文本。例如,lcd.setCursor(0,0) 會將光標設置在我們打印“接口 LCD”的第一行和第一列,函數 lcd.setCursor (0,1) 將光標移動到第二行第一列,我們在其中打印“CircuitDigest”行。
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 }
顯示介紹文本后,我們通過創建延遲來保持程序 2 秒,以便用戶可以閱讀介紹消息。此延遲由行延遲 (2000) 創建,其中 2000 是以磨機秒為單位的延遲值。延遲后,我們使用lcd.clear()函數清除LCD,該函數通過刪除LCD上的所有文本來清除LCD。
最后在空循環中,我們在第一行顯示“STM32 – Blue Pill”,在第二行顯示秒值。秒的值可以從 millis() 函數中獲得。millis() 是一個計時器,從 MCU 通電時開始遞增。該值以毫秒的形式出現,因此我們在將其顯示在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板
按照電路圖中所示進行連接,并在Arduino IDE上使用下面給出的代碼。轉到工具并確保在入門教程中選擇了正確的板。此外,在上傳程序之前,請確保將啟動 0 跳線設置為 1,如下圖所示,然后按重置按鈕。按下上傳按鈕時,應上傳代碼,消息將顯示在LCD上,如下圖所示。
在工作模式下驗證輸出
如上一段所述,您應該能夠在上傳代碼后立即注意到輸出。但是下次上電時,該程序將不起作用,因為電路板仍處于編程模式。因此,一旦程序上傳,啟動 0 上的跳線應更改回 0 位置,如下所示。此外,由于程序已經上傳到STM32板,我們不需要FTDI板,整個設置可以通過STM32板的micro-USB端口供電,如下所示。
這只是一個簡單的接口項目,以幫助將LCD顯示器與STM32板一起使用,但您可以進一步使用它來構建很酷的項目。希望您理解本教程并從中學到一些有用的東西。
/*
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
+關注
關注
34文章
4426瀏覽量
167628 -
STM32
+關注
關注
2270文章
10904瀏覽量
356307 -
STM32F103C8T6
+關注
關注
108文章
160瀏覽量
83631
發布評論請先 登錄
相關推薦
評論