<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > EDA/PCB > 設計應用 > 單片機模塊——OLED模塊

單片機模塊——OLED模塊

作者:不吃早飯 時(shí)間:2024-05-27 來(lái)源:網(wǎng)絡(luò ) 收藏

在這里插入圖片描述

本文引用地址:http://dyxdggzs.com/article/202405/459209.htm

在這里插入代碼片

一、顯示原理
了解屏幕,首先要了解屏幕可以控制的最小單元,他是一個(gè)有8個(gè)像素點(diǎn)組成的小豎棍,像素點(diǎn)的順序從上向下依次是第0位到第7位,是不是很像學(xué)習入門(mén)的時(shí)候學(xué)習的8位LED,
沒(méi)錯,小豎棍上的8個(gè)像素點(diǎn),同樣也是位0時(shí)熄滅,為1時(shí)點(diǎn)亮,給他不同的數值,就可以點(diǎn)亮相應的像素點(diǎn),知道了這一點(diǎn),就可以更進(jìn)一步的了解屏幕的結構了

在這里插入圖片描述


如果我把被賦予不同數值的小豎棍,一條一條并列起來(lái),就得到了一個(gè)簡(jiǎn)單的圖案,給小豎棍賦予不同的數值,就會(huì )排列出截然不同的圖案

在這里插入圖片描述


再回到12964屏幕,由128條小豎棍橫向并排起來(lái),就組成了屏幕的一行

在這里插入圖片描述


然后,又由8行同樣的小豎棍豎向排列起來(lái),就組成了一個(gè)完整的屏幕

在這里插入圖片描述


將圖片按照一定的排列順序,轉換成數值的操作,叫做取模

在這里插入圖片描述

將取模得到的數值賦給每一條小豎棍,就又得到了一幅完整的圖片

在這里插入圖片描述


這就是屏幕顯示圖像的原理

二、OLED屏幕的指令
要點(diǎn)亮OLED屏幕,首先要做的是告訴屏幕,要開(kāi)始工作了,以及需要做好那些準備,這個(gè)過(guò)程叫做屏幕的“初始化”,使用其他類(lèi)型的屏幕,也要從這個(gè)步驟開(kāi)始。
這些指令按照功能劃分大致可以分為兩大類(lèi):
第一類(lèi)是對屏幕硬件的工作模式進(jìn)行配置

在這里插入圖片描述


第二類(lèi)是對于屏幕顯示進(jìn)行控制的指令
比如讓圖像反色顯示

在這里插入圖片描述


或者讓畫(huà)面在屏幕上的上下和左右鏡像反轉

在這里插入圖片描述


以及畫(huà)面在水平方向和垂直方向的滾動(dòng)、還有淡出、閃爍效果等等

在這里插入圖片描述


三、顯存與屏幕
前面提到,OLED12864顯示屏是由8行、每行128根小豎棍組成
在OLED屏幕的控制芯片里,有一個(gè)用于圖形數據顯示的存儲區域(GDDRAM),叫做顯存

在這里插入圖片描述


顯存的每一位數據,可以跟屏幕上的像素點(diǎn)一一對應,我們給顯存發(fā)送數值,屏幕上就會(huì )立即顯示出對應的圖像

在這里插入圖片描述


因為顯存和屏幕的關(guān)系是實(shí)時(shí)的

在這里插入圖片描述


也就是顯存里對應屏幕上的某個(gè)像素點(diǎn)的數值是1或0,則屏幕上對應的像素點(diǎn)就是點(diǎn)亮或熄滅的,所以我們通過(guò)使用編程語(yǔ)言的一些邏輯算法,對顯存中的數據進(jìn)行編輯,就實(shí)現了點(diǎn)亮屏幕,并且在屏幕上畫(huà)畫(huà)的目的

在這里插入圖片描述

四、IIC協(xié)議

在這里插入圖片描述


在這里插入圖片描述


在這里插入圖片描述


image.png


在這里插入圖片描述


在這里插入圖片描述

不同協(xié)議的屏幕,以上初始化內容可能不同,但最終都會(huì )作用在這兩個(gè)向屏幕寫(xiě)入數據或指令的函數上,這個(gè)函數十分重要,之后所有對屏幕的控制指令,以及發(fā)送的圖像數據,都離不開(kāi)這個(gè)函數

五、OLED屏幕的控制函數
如果說(shuō)以上兩個(gè)函數是讓跟屏幕對話(huà)的,那么接下來(lái)的這些控制函數,就是可以讓我們通過(guò)跟屏幕交流的部分

首先介紹一個(gè)重磅的函數

在這里插入圖片描述

要了解這個(gè)函數,先要回到屏幕和顯存的結構上,前面提到過(guò),顯存里的數據,都是跟屏幕上的像素點(diǎn)是一一對應的,即數據的排列,也是128位為一行,共8行

在這里插入圖片描述


為了便于查找定位顯存里的數據,控制芯片里為這一千多個(gè)數據的地址,制定了幾種排列規則,即幾種地址排列的模式

在這里插入圖片描述


首先說(shuō)第一種模式,水平地址模式,設置指令為20、00,在這個(gè)模式下,數據是之字形排列,當數據地址超出屏幕有邊界的時(shí)候,會(huì )自動(dòng)下移一行,并在最左邊顯示出來(lái),當排到最后一行的最后一列之后,會(huì )重新回到第一行的第一列

在這里插入圖片描述

然后說(shuō)一下第三種,頁(yè)地址模式,設置指令為20、02,跟水平地址模式類(lèi)似,這個(gè)模式下,數據水平排列,區別在于,當數據地址超出屏幕右邊界的時(shí)候,會(huì )在同一行的最左邊顯示出來(lái)

在這里插入圖片描述


最后說(shuō)第二種模式,垂直地址模式,設置指令為20、01,這種模式下的數據,是以列為單位排列的,當數據排滿(mǎn)某一行的8行之后,會(huì )右移一行,從第一行開(kāi)始
當排到最后一列的最后一行之后,會(huì )重新回到第一列的第一行

在這里插入圖片描述


因為屏幕在大多數使用中,都是橫向使用,所以在這三種模式中,水平地址模式和頁(yè)地址模式比較符合思考習慣,所以比較常用

知道了顯存的結構和地址模式,再回到定位函數

在這里插入圖片描述

這個(gè)函數是通過(guò)這三條控制指令來(lái)實(shí)現的,第一行是用來(lái)設置顯示行的啟始位置的,在顯存地址中,第0行到第7行,是通過(guò)指令B0到B7來(lái)表示的,這里的B0就是指向第0行,通過(guò)加上參數y的數值0到7,就實(shí)現了對某一行的指定

在這里插入圖片描述


接下來(lái)的指令,是用來(lái)指定起始列的地址的,通過(guò)加上參數x的數值0到127,來(lái)實(shí)現對0到127列的指定

在這里插入圖片描述


指定高位的指令必須要有,否則就會(huì )在顯示時(shí)依次發(fā)生錯位

說(shuō)完定位函數,接下來(lái)的這個(gè)OLED_Clear();函數也是使用頻率非常高的一條函數

在這里插入圖片描述

六、圖案與字庫

在這里插入圖片描述


我們可以將類(lèi)型和結構大小都相同的幾組數據,放在同一個(gè)數組里面,起名為Xin[],然后通過(guò)數據排列的規律,找到每組數據的起點(diǎn),然后提取需要的數量的數據,這個(gè)大數組,就是我們在控制顯示屏時(shí)最常用到的,也是顯示屏的驅動(dòng)程序中非常重要的一個(gè)組成部分“字庫”,通常建立一個(gè)字庫文件來(lái)專(zhuān)門(mén)定義這些字庫數組

下面再來(lái)介紹幾個(gè)函數

七、點(diǎn)亮OLED屏幕的像素點(diǎn)
OLED12864顯示屏是由8行每行128根小豎棍組成,之前嘗試用直接賦值的方式,點(diǎn)亮一根小豎棍上的一個(gè)或幾個(gè)像素點(diǎn),這些像素點(diǎn)的亮滅,就組成了我們看到的文字和圖片,我們要在屏幕上畫(huà)畫(huà),其實(shí)也是對這些像素點(diǎn)的亮滅狀態(tài)進(jìn)行操作,然而依照畫(huà)畫(huà)的習慣,我們更希望通過(guò),直接指定每個(gè)像素點(diǎn)的xy坐標,來(lái)實(shí)現圖案的繪制,而不是一次操作8個(gè)像素點(diǎn),于是就需要使用C語(yǔ)言中運算符來(lái)幫忙實(shí)現這個(gè)愿望

1、第一個(gè)是位操作運算符里的左移運算符

在這里插入圖片描述


前面提到過(guò),在小豎棍上的8個(gè)像素點(diǎn),對應了顯存中的8個(gè)位
點(diǎn)亮8個(gè)點(diǎn)從上至下依次是0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80

在這里插入圖片描述


通過(guò)以為運算符可以不去記憶這些數值,只需要將第一個(gè)點(diǎn)的數值(0x01),向左移動(dòng)需要的位數,空出來(lái)的位會(huì )自動(dòng)被0補全,就可以得到需要的數值

列如指定第2位的點(diǎn)

在這里插入圖片描述


指定第5位的點(diǎn)

在這里插入圖片描述


示例:

在這里插入圖片描述


2、新的問(wèn)題來(lái)了,如果小豎棍上已經(jīng)有被點(diǎn)亮的像素點(diǎn),卻需要再點(diǎn)亮另外一個(gè),并且不會(huì )影響到已經(jīng)點(diǎn)亮的像素點(diǎn),要怎么辦呢?
這就需要請另外一個(gè)運算符來(lái)幫忙了,他就是邏輯運算符的或運算

在這里插入圖片描述


假設以點(diǎn)亮的點(diǎn)A為0000 0001(第0位),新點(diǎn)亮的點(diǎn)為0001 0000(第4位),那么將A和B進(jìn)行或運算,得到0001 0001,第0位和第4位同時(shí)點(diǎn)亮

在這里插入圖片描述

示例:

在這里插入圖片描述


3、現在我們可以自由畫(huà)一個(gè)點(diǎn)了,但是想要熄滅一個(gè)點(diǎn),又該怎么辦呢,接下來(lái)的邏輯運算符與運算就可以幫我們完成這個(gè)任務(wù)

在這里插入圖片描述

在這里插入圖片描述


4、不過(guò)新的疑問(wèn)又出現了,移位運算智能做到對1進(jìn)行移位,假如使用移位的方式來(lái)熄滅某一位上的點(diǎn),就需要指定位為0,其余為為1的數值,于是最后一個(gè)幫手就有用武之地了
,他就是位運算符之一的按位取反運算符

在這里插入圖片描述


將其與移位運算符配合

在這里插入圖片描述


然后就可以將這個(gè)數值,使用到與運算中,從而實(shí)現將指定位置0的操作

在這里插入圖片描述

示例:

在這里插入圖片描述


八、刷新OLED屏幕上的顯存
因為顯存中的數據只能被寫(xiě)入,卻不能讀取出來(lái)進(jìn)行二次修改,所以就需要我們在單片機的內存中,創(chuàng )建一個(gè)跟顯存一樣大的數組,先對數組中的數據進(jìn)行操作,然后再將數組中編輯好的數據,一次性發(fā)送給顯存,從而實(shí)現在屏幕上畫(huà)畫(huà)

在這里插入圖片描述


創(chuàng )建的這個(gè)數組,作用相當于我們和顯存之間的緩沖區

在這里插入圖片描述


前者是依據顯存的結構,按照8組,每組128個(gè)數據的形式,將數據存放在一個(gè)二維數組里,后者則是將整個(gè)屏幕顯存中的1024個(gè)數據,存放進(jìn)一個(gè)一維數組里面

在這里插入圖片描述


只要每次執行完對緩沖數組的編輯,緊跟著(zhù)執行一下刷新函數,就可以將編輯結果顯示在屏幕上了,于是有了緩沖數組GRAM還有這個(gè)屏幕刷新函數OLED_Refresh(); 就為接下來(lái)在屏幕上畫(huà)畫(huà)做好了十分重要的準備工作,因為之后介紹的所有畫(huà)畫(huà)功能,都要通過(guò)這兩個(gè)基礎功能來(lái)讓屏幕反饋給我們

在這里插入圖片描述


(注意將圖中j的變量類(lèi)型改成unsigned int)

九、在OLED屏幕上畫(huà)點(diǎn)
OLED12864顯示屏,是由8行,每行128根小豎棍構成的,假如我們從屏幕上,單獨取出第0列的小豎棍來(lái)看,每一根小豎棍都可以拆成第0位到第7位這八個(gè)點(diǎn),如果將行號設成變量n,那么n的范圍是0到7,于是每一行小豎棍的第0列上,第0位的點(diǎn)的序號,恰好都是8的n倍,定義一個(gè)變量m用來(lái)表示每根小豎棍上的八個(gè)點(diǎn)的位置。
可以看出像素點(diǎn)的y坐標0到63都可以表示成8*n+(0x01<<m)

在這里插入圖片描述


得到在屏幕任意位置點(diǎn)亮一個(gè)像素點(diǎn)的函數

在這里插入圖片描述


熄滅任意一點(diǎn)的函數

在這里插入圖片描述


示例:

在這里插入圖片描述




關(guān)鍵詞: 單片機 OLED PCB

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>