第二十四章 LCD顯示實驗
1)實驗平臺:正點原子DNK210開發板
2)章節摘自【正點原子】DNK210使用指南 - CanMV版 V1.0
3)購買連結:https://detail.tmall.com/item.htm?&id=782801398750
4)全套實驗原始碼+手冊+影片下載地址:http://www.openedv.com/docs/boards/k210/ATK-DNK210.html
5)正點原子官方B站:https://space.bilibili.com/394620890
6)正點原子K210技術交流企鵝群:605557868
本章將介紹初步介紹CanMV下LCD的使用。透過本章的學習,讀者將學習到板載LCD的簡單使用。
本章分為如下幾個小節:
24.1 lcd模組介紹
24.2 硬體設計
24.3 程式設計
24.4 執行驗證
24.1 lcd模組介紹
lcd模組是CanMV內建的模組,lcd模組用於驅動LCD進行一些簡單的顯示或獲取LCD的相關資訊。
lcd模組提供了init()函式,用於初始化LCD,init()函式如下所示:
lcd.init(type=1, freq=15000000, color=lcd.BLACK)
init()用於對LCD進行初始化,初始化時可以傳入部分初始化引數。
type指的是裝置型別,該引數是CanMV的保留引數,不用理會也不可傳入其他非預設值。
freq指的是與LCD通訊的SPI的通訊速率,通常情況下保持預設即可。
color指的是LCD初始化後的全屏顯示的顏色,預設為黑色。
init()函式的使用示例如下所示:
import lcd
lcd.init()
lcd模組提供了width()和height()函式,分別用於獲取LCD的寬度(水平解析度)和高度(垂直解析度),width()和height()函式如下所示:
lcd.width()
lcd.height()
width()和height()函式的使用示例如下所示:
import lcd
width = lcd.width()
height = lcd.height()
lcd模組提供了fill_rectangle()函式,用於繪製一個填充矩形,fill_rectangle函式如下所示:
lcd.fill_rectangle(x, y, w, h, color)
x、y、w和h分別指的是矩形的左上角X和Y座標以及矩形的寬度和高度。
color指的是矩形的填充顏色,該引數可以值元組指定的RGB三個通道的值,如(255,255, 255)或RGB565的整數值,如0x00F8(高低位元組需進行對調),也可以是lcd模組中定義好的顏色常量,如下表所示:
表24.1.1 lcd模組提供的顏色常量
fill_rectangle()函式的使用示例如下所示:
import lcd
lcd.init()
lcd.fill_rectangle(0, 0, 10, 10, lcd.RED)
lcd模組提供了clear()函式,用於清屏LCD顯示,clear()函式如下所示:
lcd.clear(color=lcd.BLACK)
clear()函式用於清屏LCD顯示,即用預設的黑色或指定顏色填充整個LCD螢幕。
color指的是用於填充整個LCD螢幕的顏色,可選引數請見上文中fill_rectangle()函式的color引數描述,若color引數為空,則使用預設的黑色填充整個LCD螢幕。
clear()函式的使用示例如下所示:
import lcd
lcd.init()
lcd.clear(color=lcd.RED)
lcd模組提供了draw_string()函式,用於在LCD上簡單地顯示字串,draw_string()函式如下所示:
lcd.draw_string(x, y, string, fontc=lcd.RED, bgc=lcd.BLACK)
draw_string()函式用於在LCD的指定位置顯示指定的字串,可以指定字串的顏色和背景顏色,但無法指定字串的字型和字號。
x和y分別指的是字串左上角的X和Y座標。
string指的是指定的字串。
fontc和bgc分別指的是字串的字型顏色和背景顏色,可選引數請見上文中fill_rectangle()函式的color引數描述,若fontc或bgc引數為空,則分別使用對應預設的紅色和黑色作為字串的字型顏色和背景顏色。
draw_string()函式的使用示例如下所示:
import lcd
lcd.init()
lcd.draw_string(0, 0, "Hello, DNK210!")
lcd模組提供了display()函式,用於在LCD上顯示一個Image物件,display()函式如下所示:
lcd.display(image, roi, oft)
display()函式用於在LCD的指定位置以指定的大小顯示一個指定的Image物件。
image指的是Image物件,有關image的介紹會在後續的章節中提到,讀者可以暫且認為Image物件就是一張影像。
roi指的是對Image物件感興趣的區域,若未指定,即為影像矩形。
oft指的是偏移座標。
display()函式的使用示例如下所示:
import lcd
import image
img = image.Image(size=(320, 240))
img.draw_rectangle(0, 0, 320, 240, color=(255, 255, 255), fill=True)
img.draw_string(0, 0, "Hello, DNK210!", (255, 0, 0), 2.5)
lcd.init()
lcd.display(img)
lcd模組提供了mirror()函式,用於水平映象LCD的顯示,mirror()函式如下所示:
lcd.mirror(invert)
mirror()函式用於水平映象LCD的顯示,水平映象後,不論是已經顯示再LCD上的畫面或是後續繪製的影像都將以水平映象的方式進行顯示。
invert指的是是否使能LCD的水平映象顯示,當為True時,使能LCD的水平映象顯示,當為False時,禁止LCD的水平映象顯示。
mirror()函式的使用示例如下所示:
import lcd
lcd.init()
lcd.mirror(True)
lcd模組提供了rotation()函式,用於旋轉LCD的顯示,rotation()函式如下所示:
lcd.rotation(dir)
rotation()函式用於旋轉LCD的顯示,旋轉後,不論是已經顯示再LCD上的畫面或是後續繪製的影像都將以設定的旋轉方向進行顯示。
dir指的是LCD旋轉的方向,可選的引數為0~3這四個數,分別對應依次再預設旋轉方向上順時針旋轉90°的方向。
rotation()函式的使用示例如下所示:
import lcd
lcd.init()
lcd.rotation(0)
24.2 硬體設計
24.2.1 例程功能
使用lcd模組初始化LCD,在LCD上顯示一段字串,並不斷更換背景顏色
24.2.2 硬體資源
- LCD
LCD_RD- IO34
LCD_BL- IO35
LCD_CS- IO36
LCD_RST- IO37
LCD_RS- IO38
LCD_WR- IO39
LCD_D0~LCD_D7- SPI0_D0~SPI0_D7
24.2.3 原理圖
本章實驗內容,需要使用到板載的LCD螢幕,正點原子DNK210開發板上的LCD螢幕連線原理圖,如下圖所示:
圖24.2.3.1 LCD螢幕連線原理圖
24.3 程式設計
24.3.1 lcd模組
有關lcd模組的介紹,請見第24.1小節《lcd模組介紹》。
24.3.2 程式流程圖
圖24.3.2.1 LCD顯示實驗流程圖
24.3.3 main.py程式碼
main.py中的指令碼程式碼如下所示:
import lcd
import time
# 初始化LCD
lcd.init()
while True:
for bg_color in [lcd.WHITE, lcd.BLACK, lcd.BLUE, lcd.MAGENTA, lcd.GREEN, lcd.CYAN, lcd.YELLOW]:
# 清屏LCD顯示
lcd.clear(bg_color)
# 顯示字串
lcd.draw_string(10, 10, "DNK210", lcd.RED, bg_color)
lcd.draw_string(10, 20, "LCD", lcd.RED, bg_color)
lcd.draw_string(10, 30, "ATOM@ALIENTEK", lcd.RED, bg_color)
time.sleep_ms(1000)
可以看到首先是使用lcd模組對LCD進行初始化,接著在一個迴圈中不斷改變LCD的背景顏色,並在LCD上顯示一段字串。
24.4 執行驗證
將DNK210開發板連線CanMV IDE後,點選CanMV IDE上的“開始(執行指令碼)”按鈕後,可以看到LCD上顯示了一段字串,並不斷地更換背景顏色,如下圖所示:
圖24.4.1 LCD顯示(白色背景)
圖24.4.2 LCD顯示(藍色背景)