OLED屏有多種形式,在例程中提供了一種I2C接口的0.96寸單色屏程序。本人則有一款I(lǐng)2C接口的0.96寸雙色屏,在掌握GPIO口使用的基礎(chǔ)上,以模擬I2C的方式實(shí)現(xiàn)了它的驅(qū)動(dòng)顯示。
其引腳的連接關(guān)系如下:
VCC----3.3V
GND---GND
SDA----GPIO15
SCL----GPIO16
圖1引腳連接
將所用引腳設(shè)置為輸出模式的語句為:
sda=Pin(15,Pin.OUT) #15
sck=Pin(16,Pin.OUT) #16
實(shí)現(xiàn)數(shù)據(jù)數(shù)據(jù)發(fā)送的函數(shù)為:
def Write_IIC_Byte(IIC_Byte):
da=IIC_Byte
sck.off()
for i in range(8):
m=da
m=m&0x80
if(m==0x80):
sda.on()
else:
sda.off()
da=da<<1
sck.on()
sck.off()
實(shí)現(xiàn)清屏的函數(shù)為:
def OLED_Clear():
for i in range(8):
OLED_WR_Byte (0xb0+i,OLED_CMD)
OLED_WR_Byte (0x00,OLED_CMD)
OLED_WR_Byte (0x10,OLED_CMD)
for j in range(128):
OLED_WR_Byte(0x00,OLED_DATA)
OLED屏的初始化函數(shù)為:
def OLED_Init():
OLED_WR_Byte(0xAE,OLED_CMD)
OLED_WR_Byte(0x02,OLED_CMD)
OLED_WR_Byte(0x10,OLED_CMD)
OLED_WR_Byte(0x40,OLED_CMD)
OLED_WR_Byte(0x81,OLED_CMD)
OLED_WR_Byte(0xff,OLED_CMD)
OLED_WR_Byte(0xA1,OLED_CMD)
OLED_WR_Byte(0xC8,OLED_CMD)
OLED_WR_Byte(0xA6,OLED_CMD)
OLED_WR_Byte(0xA8,OLED_CMD)
OLED_WR_Byte(0x3f,OLED_CMD)
OLED_WR_Byte(0xD3,OLED_CMD)
OLED_WR_Byte(0x00,OLED_CMD)
OLED_WR_Byte(0xd5,OLED_CMD)
OLED_WR_Byte(0x80,OLED_CMD)
OLED_WR_Byte(0xD9,OLED_CMD)
OLED_WR_Byte(0xF1,OLED_CMD)
OLED_WR_Byte(0xDA,OLED_CMD)
OLED_WR_Byte(0x12,OLED_CMD)
OLED_WR_Byte(0xDB,OLED_CMD)
OLED_WR_Byte(0x40,OLED_CMD)
OLED_WR_Byte(0x20,OLED_CMD)
OLED_WR_Byte(0x02,OLED_CMD)
OLED_WR_Byte(0x8D,OLED_CMD)
OLED_WR_Byte(0x14,OLED_CMD)
OLED_WR_Byte(0xA4,OLED_CMD)
OLED_WR_Byte(0xA6,OLED_CMD)
OLED_WR_Byte(0xAF,OLED_CMD)
OLED_WR_Byte(0xAF,OLED_CMD)
OLED_Clear()
OLED_Set_Pos(0,0)
為了驗(yàn)證程序的可行性,特將清屏函數(shù)改造為彩條繪制函數(shù),其內(nèi)容為:
def OLED_Clear():
for i in range(8):
OLED_WR_Byte (0xb0+i,OLED_CMD)
OLED_WR_Byte (0x00,OLED_CMD)
OLED_WR_Byte (0x10,OLED_CMD)
for j in range(128):
OLED_WR_Byte(0xf0,OLED_DATA) #OLED_DATA
def OLED_text():
OLED_Init()
OLED_Clear()
OLED_text ()
經(jīng)上傳測(cè)試,其顯示效果如圖2所示,說明驅(qū)動(dòng)程序是有效的。
圖2繪制彩條
為了實(shí)現(xiàn)字符,需按如下形式來定義字庫(kù):
F8X16=[0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
** ... **
0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]
所設(shè)計(jì)的字符串顯示函數(shù)為:
def OLED_ShowString(x,y,chr,Char_Size):
for character in chr:
OLED_ShowChar(x,y,character,Char_Size)
x+=8
if(x>120):
x=0
y+=2
實(shí)現(xiàn)字符串輸出測(cè)試的程序如下:
def OLED_text():
OLED_Init()
OLED_Clear()
OLED_ShowString(0,0,'Banana PI ',16)
OLED_ShowString(0,2,'Leaf S3',16)
OLED_ShowString(0,4,'OLED TEST',16)
OLED_ShowString(0,6,'jinglixixi',16)
OLED_text()
經(jīng)上傳測(cè)試,其顯示效果如圖3所示,說明驅(qū)動(dòng)程序是有效的。
圖3顯示字符串
通過OLED屏驅(qū)動(dòng)程序的設(shè)計(jì),基本上掌握了Thonny的編程方法、函數(shù)的設(shè)計(jì)及數(shù)組元素的使用等,收獲還是很多的,后面就可以自主地進(jìn)行功能設(shè)計(jì)了。
本文由電子發(fā)燒友社區(qū)發(fā)布,轉(zhuǎn)載請(qǐng)注明以上來源。如需社區(qū)合作及入群交流,請(qǐng)?zhí)砑?/span>微信EEFans0806,或者發(fā)郵箱liuyong@huaqiu.com。
原文標(biāo)題:【經(jīng)驗(yàn)分享】Banana PI Leaf S3開發(fā)板之OLED屏顯示驅(qū)動(dòng)實(shí)現(xiàn)
文章出處:【微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
電子技術(shù)
+關(guān)注
關(guān)注
18文章
853瀏覽量
55510 -
電子發(fā)燒友論壇
+關(guān)注
關(guān)注
4文章
197瀏覽量
990
原文標(biāo)題:【經(jīng)驗(yàn)分享】Banana PI Leaf S3開發(fā)板之OLED屏顯示驅(qū)動(dòng)實(shí)現(xiàn)
文章出處:【微信號(hào):gh_9b9470648b3c,微信公眾號(hào):電子發(fā)燒友論壇】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論