tft每日頭條

 > 圖文

 > stm32液晶屏7寸幾種驅動方式

stm32液晶屏7寸幾種驅動方式

圖文 更新时间:2024-12-19 14:27:15

大家好,我是老耿,高職青椒一枚,一直從事單片機、嵌入式、物聯網等課程的教學。對于高職的學生層次,同行應該都懂的,老師在課堂上教學幾乎是沒什麼成就感的。正是如此,才有了借助頭條平台尋求認同感和成就感的想法。在這裡,我準備陸續把自己花了很多心思設計的教學課件分享出來,如果您正是一名單片機愛好者或是一名同行,歡迎點贊 關注,各位的支持是本人持續輸出的動力,多謝多謝!#30天學會STM32##單片機#

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)1

前邊我們講解了LED、按鍵和蜂鳴器的應用,這三類器件本身工作原理十分簡單,因此我們的重點是放在STM32的GPIO上面。這一章我們來學習一下開發闆配套的那塊厚厚的液晶屏——LCD1602,聚焦的是這個器件本身的特點和工作時序。因此,我們需要熟讀它的數據手冊,因為手冊裡告訴了編程的要點、參數、時序等。閱讀器件手冊是做單片機和嵌入式開發必備的基本能力,我們就從這一章開始鍛煉起來吧。為了不讓篇幅太長,本章打算分四個部分來講解,本文是第二部分。

【學習目标】

  1. 了解LCD1602的工作原理
  2. 掌握LCD1602的工作時序
  3. 領悟軟件模拟時序的思路和方法
二、深入内部理解LCD16022.1 顯示地址與字符

LCD1602内部帶了80個字節的顯示RAM,用來存儲我們發送的數據,它的結構如圖7所示。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)2

圖7 LCD1602内部RAM結構

第一行的地址是0x00到0x27,第二行的地址從0x40到0x67,其中第一行0x00到0x0F是與液晶上第一行16個字符顯示位置相對應的,第二行0x40到 0x4F是與第二行16個字符顯示位置相對應的。而每行都多出來一部分,是為了顯示移動字幕設置的。1602字符液晶是顯示字符的,因此它跟ASCII字符表是對應的。比如我們給0x00這個地址寫一個‘a’,也就是十進制的97,液晶的最左上方的那個小塊就會顯示一個字母a。此外,液晶内部有個數據指針,它指向哪裡,我們寫的那個數據就會送到相應的那個地址裡。

2.2 狀态字節

LCD1602有一個狀态字節,我們通過讀取這個狀态字的内容,就可以知道一些内部情況,這個狀态字節含義如表3所示。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)3

表3 LCD1602狀态字節

這個狀态字節最高位表示了當前液晶是不是“忙”,如果這個位是1表示正“忙”,禁止我們讀寫數據或者命令;如果是0,則可以進行讀寫。而低7位就表示了當前數據地址指針的位置。

2.3 讀寫時序

LCD1602的基本操作時序,一共有4個,這些大家都不需要記住,但是都需要理解,因為我們現在不是為了應付考試,所以不需要你把手冊背熟,但是你寫程序的時候,打開手冊要能看懂如何操作。

2.3.1 讀狀态

RS = L,R/W = H,E = H,讀狀态。這是個很簡單的邏輯,我們對照手冊上的讀狀态時序(如圖8所示),編寫的程序結構如代碼清單2所示。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)4

圖8 讀狀态時序圖

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)5

代碼清單2 讀液晶狀态程序的基本結構

這樣就讀到了當前液晶的狀态位,我們可以通過該位的值來了解當前液晶是否處于“忙”狀态。這裡面有兩個問題:第一,如果讀到的狀态是“不忙(0)”,那麼程序可以進行讀寫操作;如果當前狀态是“忙(1)”,那麼還得繼續等待重新判斷液晶的狀态;第二,讀完了液晶狀态繼續保持使能E是高電平的話,LCD1602會繼續輸出它的狀态值,輸出的這個值會占據了數據總線,所以讀完了狀态,通常需要把這個引腳拉低(第7行)來釋放總線。

為了解決以上兩個問題,我們把讀液晶狀态的函數放在while循環中,直到循環退出(即不忙),再執行後續的寫液晶操作,程序結構如代碼清單3所示。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)6

代碼清單3 寫液晶之前反複讀取是否“忙”

2.3.2 讀數據

如圖9所示,這個時序跟讀狀态很像,把第一步改成拉高RS即可。但是,讀數據不常用,大家了解一下就可以了,這裡就不詳細解釋了。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)7

圖9 讀數據時序圖

2.3.3 寫指令

RS = L,R/W = L,D7~D0 = 指令碼,E = 高脈沖,時序如圖10所示。這個在邏輯上沒什麼難的,隻是“E = 高脈沖”這個問題要解釋一下。這個指令一共有4條語句,其中前三條語句順序無所謂,但是“E = 高脈沖”這一句很關鍵。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)8

圖10 寫指令時序

實際上流程是這樣的:因為我們現在是寫指令,所以我們首先要保證E引腳是低電平狀态,而前三句不管我們怎麼寫,LCD1602隻要沒有接收到E引腳的使能控制,它都不會來讀總線上的信号的。當通過前三句準備好數據之後,E使能引腳從低電平到高電平變化,然後E使能引腳再從高電平到低電平出現一個下降沿,LCD1602内部一旦檢測到這個下降沿後,并且檢測到“RS = L,R/W = L”就馬上來讀取D7~D0 的數據,完成寫指令過程。

綜上所述,我們寫了個“E = 高脈沖”,意思就是:使能E先從低拉高,再從高拉低,形成一個高脈沖。

2.3.4 寫數據

RS = H,R/W = L,D7~D0 = 數據,E = 高脈沖,時序如圖11所示。這個時序跟寫指令很像,把第一步改成拉高RS即可。此時,寫入的就是需要顯示的字符編碼了。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)9

圖11 寫數據時序

2.4 指令介紹

與單片機寄存器的用法類似,LCD1602在使用的時候,我們首先要進行初始的功能配置,有以下幾個指令需要了解。

2.4.1 顯示模式設置

如表4所示,寫指令0x38,設置16x2顯示,5x7點陣,8位數據接口。這條指令對我們這個液晶來說是固定的,必須寫0x38,大家仔細看會發現我們的液晶實際上内部點陣是5x8的,還有一些1602液晶還兼容串行通信,用2個IO口即可,但是速度慢,我們這個液晶就是固定的0x38模式。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)10

表4 固定的顯示模式設置指令

2.4.2 顯示開/關與光标設置

這裡有兩類指令,我們把數據手冊裡對它們的描述貼過來,如表5所示。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)11

表5 顯示開/關與光标設置指令

2.4.3 清屏顯示

固定的,寫入0x01表示顯示清屏,包含了數據指針清零,所有的顯示清零。寫入0x02則僅僅是數據指針清零,顯示不清零。

2.4.4 RAM地址設置

該指令碼的最高位為1,低7位為RAM的地址,RAM地址與液晶上字符的關系已在圖7中呈現。通常,我們在讀寫數據之前都要先設置好地址,然後再進行數據的讀寫操作。

2.4.5 光标、畫面位移設置

如表6所示,通過這個指令碼我們可以實現屏幕上内容的整體左移(或右移)顯示,就像生活中常見的那種滾動屏顯。具體控制效果為:

  • S/C =0,R/L =0:光标左移 ,地址計數器減1(即顯示内容和光标一起左移)
  • S/C =0,R/L =1:光标右移 ,地址計數器加1(即顯示内容和光标一起右移)
  • S/C =1,R/L =0:顯示内容左移 ,光标不移動
  • S/C =1,R/L =1:顯示内容右移 ,光标不移動

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)12

表6 光标和畫面移動指令

這個指令效果也解釋了圖7中屏幕之外那些地址的意義,我們再把它複制過來并添加了一些标注(如圖12所示),兩排地址就像可以寫兩行字的紙帶,寫在前16個格子裡字迹就會顯示,而寫在其他格子裡字迹就隐身了(并沒有消失)。因此,當屏幕内容移動時,紙帶是不動的,動的是字迹,也就是手冊上所說的“移動時不影響DDRAM”。

stm32液晶屏7寸幾種驅動方式(我在高職教STM32LCD液晶顯示)13

圖12 用紙帶比喻RAM地址

(第二部分完,共四部分)

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved