|
OLED的驱动分析一下:8 X I# ?$ W$ V2 B4 K6 ?% T1 O void OLED_Init(void), ]; T( A9 k/ D4 I' m" g { OLED_RST=0;; v! W: Z1 y: W/ u3 A$ S% i DelayMs(50); OLED_RST=1; //从上电到下面开始初始化要有足够的时间,即等待RC复位完毕 OLED_WrCmd(0xae);//--turn off oled panel OLED_WrCmd(0x00);//---set low column address' @' h1 a V" Q/ }5 g OLED_WrCmd(0x10);//---set high column address OLED_WrCmd(0x40);//--set start line address Set Mapping RAM Display Start Line (0x00~0x3F) OLED_WrCmd(0x81);//--set contrast control register# N8 x) o5 y$ E0 ]& X* F* P OLED_WrCmd(Brightness); // Set SEG Output Current Brightness OLED_WrCmd(0xa1);//--Set SEG/Column Mapping 0xa0左右反置 0xa1正常 OLED_WrCmd(0xc8);//Set COM/Row Scan Direction 0xc0上下反置 0xc8正常; L: C# E* }. F& H% m OLED_WrCmd(0xa6);//--set normal display, q- X2 m \8 d, [7 ~" T6 |: H t OLED_WrCmd(0xa8);//--set multiplex ratio(1 to 64) OLED_WrCmd(0x3f);//--1/64 duty& v6 r7 O, R* C( y5 v. P8 m( N OLED_WrCmd(0xd3);//-set display offset Shift Mapping RAM Counter (0x00~0x3F) OLED_WrCmd(0x00);//-not offset+ V2 h. v# m7 c; r6 x OLED_WrCmd(0xd5);//--set display clock divide ratio/oscillator frequency1 Q6 U( `. o8 q6 E X- v ] OLED_WrCmd(0x80);//--set divide ratio, Set Clock as 100 Frames/Sec `. p1 K# f* L$ }7 | R OLED_WrCmd(0xd9);//--set pre-charge period OLED_WrCmd(0xf1);//Set Pre-Charge as 15 Clocks & Discharge as 1 Clock OLED_WrCmd(0xda);//--set com pins hardware configuration4 N9 [, U1 ?6 A! ?+ ] OLED_WrCmd(0x12);1 h% Q, L( [% G8 i, N OLED_WrCmd(0xdb);//--set vcomh OLED_WrCmd(0x40);//Set VCOM Deselect Level OLED_WrCmd(0x20);//-Set Page Addressing Mode (0x00/0x01/0x02) J( {1 V1 d+ s, T OLED_WrCmd(0x02);//7 J$ C' M) G) u OLED_WrCmd(0x8d);//--set Charge Pump enable/disable" c. G8 r7 h0 x+ E9 m+ U! \ OLED_WrCmd(0x14);//--set(0x10) disable% u* {2 l1 S6 H+ V" D8 @* H1 z t OLED_WrCmd(0xa4);// Disable Entire Display On (0xa4/0xa5) OLED_WrCmd(0xa6);// Disable Inverse Display On (0xa6/a7) OLED_WrCmd(0xaf);//--turn on oled panel OLED_Fill(0x00); //初始清屏 OLED_SetPos(0,0); 7 a Z2 G; C/ A; i) Z/ T( _7 X( D } 1 v% ?9 M V7 H* ~6 _ & J- r" O; @+ v* p* c' T8 i /*********************OLED写数据************************************/ void OLED_WrDat(unsigned char dat)" {: d7 J6 n( y- m; O2 ~ {. B' Z9 e$ M7 \" X; C3 X unsigned char i;- |8 K+ {. g6 m/ l5 J OLED_DC=1; for(i=0;i<8;i++) //发送一个八位数据 { if((dat << i) & 0x80)+ Q+ x/ w1 ?# { {8 Y1 h! m2 P% h9 T, I OLED_SDA = 1; } else OLED_SDA = 0;/ B$ X0 V# y5 X+ m! f( B9 Q OLED_SCL = 0;- ?3 x k0 `3 D0 m- I' j OLED_SCL = 1; }' l9 R( @, n6 l( F4 o } * p% B/ B" R( G* G /*********************OLED写命令************************************/ void OLED_WrCmd(unsigned char cmd)2 Y0 P7 L# Y& s( E { unsigned char i;+ }# N ]+ p5 ` OLED_DC=0; for(i=0;i<8;i++) //发送一个八位数据, v. ^# i/ T! \: r( v: { {8 h! N0 P3 {2 P5 e if((cmd << i) & 0x80)$ I, y; U8 P3 m' S/ ^8 Q! B/ d {5 I8 M7 s+ z3 r3 K OLED_SDA = 1; }6 ?$ t( a5 M" P, s& F- k0 d else ; k) v& G- p) {7 h, Q0 c { OLED_SDA = 0;. q% h7 T: C" ~ } OLED_SCL = 0; OLED_SCL = 1;- [! i4 D9 y" o* s* U } } 打印了我们社区网站的网址的图片
|
微信公众号
手机版
F# u- ?: _- l' o1 i3 j- G
好文章,值得学习,有原理图就好了