由於 SSD1306 0.96吋 OLED 屏模塊是可以使用介面為串列外設介面(SPI:Serial Peripheral Interface)和積體電路匯流排(I²C / I2C:Inter-Integrated Circuit),OLED 屏模塊默認是串列外設介面(SPI)介面,所以理所當然是使用串列介面(SPI)連接,但也可以使用一般的 I/O 介面控制。筆者在設計電路時,也考慮到 SSD1306 0.96吋 OLED 屏模塊連接,可以使用串列外設介面(SPI)或一般的 I/O 介面編程是最好,所以 D1(Serial Data Input) 和 D0(Serial Clock Input) 會連接到 SDO1/RF8 和 SCLK1/RF6,而 RES(Reset) 和 DC(Data/Command Selection) 便連接到一般的 RE1/RE2 I/O 接口。
PIC24FJ64GA008 SSD1306 0.96吋 OLED 屏模塊 I/O 電路圖 |
Microchip
PIC24FJ64GA008 和 SSD1306 0.96吋 OLED 屏連接:
LCD
|
Signal
|
Description
|
I/O Bus
|
MCU
|
Signal
|
1
|
DC
|
Data/Command Selection
Low – Write Commnad
High – Write Data
|
13
|
78
|
RE2
|
2
|
RES
|
Reset
(Active Low)
|
11
|
76
|
RE0
|
3
|
D1
|
Serial Data Input
|
19
|
43
|
SDO1/RF8
|
4
|
D0
|
Serial Clock Input
|
23
|
45
|
SCK1/RF6
|
5
|
VCC
|
2.7
~ 3.3V
|
1
|
+3.3V
|
|
6
|
GND
|
Ground
|
6
|
GND
|
工作原理:
Solomon Systech (晶門)SSD1306 驅動晶片與 Microchip PIC24FJ64GA008 是採用串列外設介面(SPI:Serial Peripheral Interface Bus)連接,而 SSD1306 的 I/O 控制已經連接到 6腳的連接器,D1(Data Input Line - Pin 3)接至 MCU 的 SDO1/RF8(SPI Data Input 1 / RF8 - Pin 43),D0(SPI Clock Input Line - Pin 4)接至 MCU 的 SCK1/RF6(SPI Clock Output 1 /RF6 - Pin 45),RES(Reset - Pin 2)接至 MCU 的 PMD0/RE0(RE0 - Pin 76)和D/C(Data / Command - Pin 1)接至 MCU 的 PMD2/RE2(RE2 - Pin 78)。由於 SPI 是引腳是可以作 SPI 和一般 I/O 使用,所以可試驗簡單的 I/O 操作。
Microchip PIC24FJ64GA008 SSD1306 OLED 屏接腳 I/O 程式定義:
// Definitions for Reset pin
#define RST_TRIS_BIT TRISEbits.TRISE0
#define RST_LAT_BIT LATEbits.LATE0
// Definitions for RS pin
#define RS_TRIS_BIT TRISEbits.TRISE2
#define RS_LAT_BIT LATEbits.LATE2
// Definitions for CLK pin
#define CLK_TRIS_BIT TRISFbits.TRISF6
#define CLK_LAT_BIT LATFbits.LATF6
//Definition for data BUS
#define
DAT_TRIS_BIT TRISFbits.TRISF8
#define
DAT_LAT_BIT LATFbits.LATF8
#define
DAT_PORT_BIT PORTFbits.RF8
|
Microchip PIC24FJ64GA008 SSD1306
OLED 屏初始化程式:
void ResetDevice(void)
{
AD1PCFG = 0xFFFF;
_PMPEN = 0;
// Start Reset
Device
// Set I/O as
Input=1/Output=0
RST_TRIS_BIT =
0; // Reset = Output = 0
RS_TRIS_BIT = 0;
// Command/Data = Output = 0
DAT_TRIS_BIT =
0; // Data D0~D7 = Output = 0
CLK_TRIS_BIT =
0; // SCLK = Output = 0
// Hardward Reset
LCD Device
RST_LAT_BIT =
0; // Reset LCD On = 0 >100ms
delayms(250);
CS_LAT_BIT =
1; // Chip Select Off = 1
RST_LAT_BIT =
1; // Reset LCD Off = 1
delayms(200);
SSD1306_WR_REG(0xAE);
SSD1306_WR_REG(0xAE);//--turn off
oled panel
SSD1306_WR_REG(0x00);//---set low
column address
SSD1306_WR_REG(0x10);//---set high
column address
SSD1306_WR_REG(0x40);//--set start
line address Set Mapping RAM Display
Start Line (0x00~0x3F)
SSD1306_WR_REG(0x81);//--set
contrast control register
SSD1306_WR_REG(0xCF); // Set SEG
Output Current Brightness
SSD1306_WR_REG(0xA1);//--Set
SEG/Column Mapping 0xa0,0xa1
SSD1306_WR_REG(0xC8);//Set COM/Row
Scan Direction 0xc0,0xc8
SSD1306_WR_REG(0xA6);//--set normal
display
SSD1306_WR_REG(0xA8);//--set
multiplex ratio(1 to 64)
SSD1306_WR_REG(0x3F);//--1/64 duty
SSD1306_WR_REG(0xD3);//-set display
offset Shift Mapping RAM Counter
(0x00~0x3F)
SSD1306_WR_REG(0x00);//-not offset
SSD1306_WR_REG(0xD5);//--set
display clock divide ratio/oscillator frequency
SSD1306_WR_REG(0x80);//--set divide
ratio, Set Clock as 100 Frames/Sec
SSD1306_WR_REG(0xD9);//--set
pre-charge period
SSD1306_WR_REG(0xF1);//Set
Pre-Charge as 15 Clocks & Discharge as 1 Clock
SSD1306_WR_REG(0xDA);//--set com
pins hardware configuration
SSD1306_WR_REG(0x12);
SSD1306_WR_REG(0xDB);//--set vcomh
SSD1306_WR_REG(0x40);//Set VCOM
Deselect Level
SSD1306_WR_REG(0x20);//-Set Page
Addressing Mode (0x00/0x01/0x02)
SSD1306_WR_REG(0x02);//
SSD1306_WR_REG(0x8D);//--set Charge
Pump enable/disable
SSD1306_WR_REG(0x14);//--set(0x10)
disable
SSD1306_WR_REG(0xA4);// Disable
Entire Display On (0xa4/0xa5)
SSD1306_WR_REG(0xA6);// Disable
Inverse Display On (0xa6/a7)
SSD1306_WR_REG(0xAF);//--turn on oled
panel
delayms(50);
CS_LAT_BIT =
1; // Chip Select Off = 1
} // ResetDevice
|
PIC24FJ64GA008 SSD1306 0.96吋 OLED 屏模塊 I/O 電路試驗 |
PIC24FJ64GA008 SSD1306 0.96吋 OLED 屏模塊 I/O 電路顯示試驗 |
2017年 1月 4日 天氣報告
氣溫:18.8度 @ 20:40
相對濕度:百分之 81%
天氣:天色大致良好
沒有留言:
張貼留言