Je viens de recevoir 2 afficheurs OLED bien adaptés quand on n'a pas beaucoup de place mais beaucoup de choses à afficher...
afficheur-oled-96x96-grove
J'ai pris un peu peur au vu de la notice, mais finalement c'est faisable avec un Picaxe.
Je publie en l'état au cas où d'autres seraient intéressés, en particulier pour la séquence d'initialisation et pour le générateur de caractères.
afficheur-oled-96x96-grove
J'ai pris un peu peur au vu de la notice, mais finalement c'est faisable avec un Picaxe.
Je publie en l'état au cas où d'autres seraient intéressés, en particulier pour la séquence d'initialisation et pour le générateur de caractères.
Code:
'PROGRAM: OLED003_lisible.BAS
' 1036 bytes
' 12 s
#picaxe 40X2
symbol OLED_Address=120
symbol OCM=0x80 ' OLED_CommandMode
symbol ODM=0x40 ' OLED_DataMode
symbol __=0x00
symbol o_=0x0F
symbol oo=0xFF
symbol _o=0xF0
Symbol Lettre=b3
Symbol Nombre=b4
symbol XX=b10
symbol YY=b11
'setfreq m16
pause 1000
gosub OLED_INIT
do
gosub ClearDisplay
pause 1000
for b1=1 to 6
hi2cout (ODM,255,255,255,255,255,255,255,255)
next b1
for b2=2 to 95
hi2cout (ODM,15,0,0,0,0,0,0,0)
for b1=2 to 5
hi2cout (ODM,0,0,0,0,0,0,0,0)
next b1
hi2cout (ODM,0,0,0,0,0,0,0,240)
next b2
for b1=1 to 6
hi2cout (ODM,255,255,255,255,255,255,255,255)
next b1
xx=10
yy=8
for Nombre=0 to 255
gosub EcrireN
next Nombre
for yy=20 to 80 step 12
xx=10
for Lettre=48 to 57
gosub Ecrire
next Lettre
next yy
pause 10000
loop
end
OLED_INIT:
hI2Csetup i2cmaster,OLED_Address,i2cfast,I2cbyte
hi2cout (OCM,0xFD,OCM,0x12) ' Accept commands
hi2cout (OCM,0xAE) ' Display Off
hi2cout (OCM,0xA8,OCM,0x5F) ' set multiplex ratio 96
hi2cout (OCM,0xA1,OCM,0) ' ' set display start line
hi2cout (OCM,0xA2,OCm,0x60) ' set display offset
hi2cout (OCM,0xA0,OCM,0x40) ' set remap
'hi2cout (OCM,0xA0,OCM,0x46) ' set remap
hi2cout (OCM,0xAB,OCM,0x01) ' set VDD internal
hi2cout (OCM,0x81,OCM,0x53) ' set contrast
hi2cout (OCM,0xB1,OCM,0x51) ' set Phase Length
hi2cout (OCM,0xB3,OCM,0x01,OCM,0xB9) ' set Display Clock Divide Ratio
hi2cout (OCM,0xBC,OCM,0x08) ' Set pre-charge voltage
hi2cout (OCM,0xBE,OCM,0x07) ' set VCOMH
hi2cout (OCM,0xB6,OCM,0x01) ' Set second pre-charge period
hi2cout (OCM,0xD5,OCM,0x62) ' enable second precharge and internal vs1
hi2cout (OCM,0xA4) ' set normal display mode
hi2cout (OCM,0x2E) ' Deactivate scroll
hi2cout (OCM,0xAF) ' Switch on Display
pause 100
RAZ:
hI2Csetup i2cmaster,OLED_Address,i2cfast,I2cbyte
hi2cout (OCM,0x75,OCM,0,OCM,95) ' Set row Address
hi2cout (OCM,0x15,OCM,8,OCM,55) ' Set column Address
return
ClearDisplay:
gosub RAZ
for b2=1 to 48
for b1=1 to 6
hi2cout (ODM,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)
next b1
next b2
return
Ecrire:
gosub SetXY
Ecr:
b1=b3-48
on b1 gosub Ecr0,Ecr1,Ecr2,Ecr3,Ecr4,Ecr5,Ecr6,Ecr7,Ecr8,Ecr9
return
SetXY:
b1=xx+2
hi2cout (OCM,0x15,OCM,xx,OCM,b1) ' Set column Address(8/55)
b1=yy+7
hi2cout (OCM,0x75,OCM,yy,OCM,b1) ' Set row Address (0/95)
xx=xx+4
return
EcrireG:
gosub setxy
hi2cout (ODM,48,55,0)
for b1=2 to 7
hi2cout (ODM,7,0,7)
next b1
hi2cout (ODM,48,55,0)
return
Ecr0:
hi2cout (ODM,_o,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,__)
return
Ecr1:
hi2cout (ODM,__,_o,__)
hi2cout (ODM,__,oo,__)
hi2cout (ODM,_o,_o,__)
hi2cout (ODM,__,_o,__)
hi2cout (ODM,__,_o,__)
hi2cout (ODM,__,_o,__)
hi2cout (ODM,__,_o,__)
hi2cout (ODM,_o,oo,o_)
return
Ecr2:
hi2cout (ODM,_o,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,__,_o,__)
hi2cout (ODM,__,o_,__)
hi2cout (ODM,_o,__,__)
hi2cout (ODM,o_,__,__)
hi2cout (ODM,oo,oo,o_)
return
Ecr3:
hi2cout (ODM,_o,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,__,oo,__)
hi2cout (ODM,__,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,__)
return
Ecr4:
hi2cout (ODM,__,__,o_)
hi2cout (ODM,__,_o,o_)
hi2cout (ODM,__,o_,o_)
hi2cout (ODM,_o,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,oo,oo,o_)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,__,__,o_)
return
Ecr5:
hi2cout (ODM,oo,oo,o_)
hi2cout (ODM,o_,__,__)
hi2cout (ODM,o_,__,__)
hi2cout (ODM,oo,oo,__)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,__)
return
Ecr6:
hi2cout (ODM,_o,oo,o_)
hi2cout (ODM,o_,__,__)
hi2cout (ODM,o_,__,__)
hi2cout (ODM,oo,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,__)
return
Ecr7:
hi2cout (ODM,oo,oo,o_)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,__,_o,__)
hi2cout (ODM,__,o_,__)
hi2cout (ODM,_o,__,__)
hi2cout (ODM,_o,__,__)
hi2cout (ODM,_o,__,__)
hi2cout (ODM,_o,__,__)
return
Ecr8:
hi2cout (ODM,_o,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,__)
return
Ecr9:
hi2cout (ODM,_o,oo,__)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,o_,__,o_)
hi2cout (ODM,_o,oo,o_)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,__,__,o_)
hi2cout (ODM,_o,oo,__)
return
EcrireN:
BinToASCII Nombre,b5,b6,b7
b1=yy+7
hi2cout (OCM,0x75,OCM,yy,OCM,b1) ' Set row Address (0/95)
if b5>48 then
b1=xx+4
b2=xx+6
hi2cout (OCM,0x15,OCM,b1,OCM,b2) ' Set column Address(8/55)
Lettre=b5 : gosub Ecr
endif
if b5>48 or b6>48 then
b1=xx+8
b2=xx+10
hi2cout (OCM,0x15,OCM,b1,OCM,b2) ' Set column Address(8/55)
Lettre=b6 : gosub Ecr
endif
b1=xx+12
b2=xx+14
hi2cout (OCM,0x15,OCM,b1,OCM,b2) ' Set column Address(8/55)
Lettre=b7 : gosub Ecr
return