void OLedDriver()
{
OLED_Init_I();
Fill_RAM(0x00); // Clear Screen
// Set_Common_Remap(0x08); // Set COM/Row Scan Direction (0x00/0x08) 两种显示字需要的开始地址不同
Delay(5);
// Fill_RAM(0xff);
while(1)
{// send_UART(0x55);
Fill_RAM(0x00);
Delay(10);
Fill_RAM(0x01); // Clear Screen
Delay(10);
Fill_RAM(0x02); // Clear Screen
Delay(10);
Fill_RAM(0x04); // Clear Screen
Delay(10);
Fill_RAM(0x10); // Clear Screen
Delay(10);
Fill_RAM(0x20); // Clear Screen
Delay(10);
Fill_RAM(0x40); // Clear Screen
Delay(10);
Fill_RAM(0x80); // Clear Screen
Delay(10);
Fill_RAM(0xFF); // Clear Screen
Delay(10);
}
}
</pre><pre class="cpp" name="code">
void GPIO_LCD_Cfg(void){
/**********************************************************************************
2013年9月16日13:32:06
PA3--CS
PA5--RES
PE9--D1(SDIN)
PE10--D0(SCLK)
PA6--D/C#
*/
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
//推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
//50M时钟速度
GPIO_Init(GPIOE, &GPIO_InitStructure);
/**********************************************************************************/
}
/
/*
2013年9月16日13:32:06
PA3--CS
PA5--RES
PE9--D1(SDIN)
PE10--D0(SCLK)
PA6--D/C#
*/
#define CS_H GPIO_SetBits(GPIOA, GPIO_Pin_3) // Chip Select
#define CS_L GPIO_ResetBits(GPIOA, GPIO_Pin_3) // Chip Select
#define RES_H GPIO_SetBits(GPIOA, GPIO_Pin_5)// Reset
#define RES_L GPIO_ResetBits(GPIOA, GPIO_Pin_5)// Reset
#define SDIN_H GPIO_SetBits(GPIOE, GPIO_Pin_9)
#define SDIN_L GPIO_ResetBits(GPIOE, GPIO_Pin_9)
#define SDIN_Set(x) if((x)&(0x80)){SDIN_H;}else{SDIN_L;}
#define SCLK_H GPIO_SetBits(GPIOE, GPIO_Pin_10)
#define SCLK_L GPIO_ResetBits(GPIOE, GPIO_Pin_10)
//#define SDIN *((char *)0)
#define DC_H GPIO_SetBits(GPIOA, GPIO_Pin_6) // Data/Command Control
#define DC_L GPIO_ResetBits(GPIOA, GPIO_Pin_6) // Data/Command Control
void Write_Command(unsigned char Data)
{
unsigned char i;
// SCLK_H;
CS_L;
DC_L;
SCLK_H;
for (i=0; i<8; i++)
{
SCLK_L;
//SDIN=(Data&0x80)>>7;
SDIN_Set(Data);
Data = Data << 1;
uDelay(5);//内部晶振不能超过100
SCLK_H;
// uDelay(1);
}
SCLK_H;
DC_L;
CS_H;
}
void Write_Data(unsigned char Data)
{
unsigned char i;
// SCLK_H;
CS_L;
DC_H;
SCLK_H;
for (i=0; i<8; i++)
{
SCLK_L;
SDIN_Set(Data);
Data = Data << 1;
uDelay(5);//内部晶振不能超过100
SCLK_H;
// uDelay(1);
}
SCLK_H;
DC_H;
// SCLK_L;
CS_H;
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Instruction Setting
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void Set_Start_Column(unsigned char d)
{
Write_Command(0x00+d%16); // Set Lower Column Start Address for Page Addressing Mode
// Default => 0x00
Write_Command(0x10+d/16); // Set Higher Column Start Address for Page Addressing Mode
// Default => 0x10
}
void Set_Addressing_Mode(unsigned char d)
{
Write_Command(0x20); // Set Memory Addressing Mode
Write_Command(d); // Default => 0x02
// 0x00 => Horizontal Addressing Mode
// 0x01 => Vertical Addressing Mode
// 0x02 => Page Addressing Mode
}
void Set_Column_Address(unsigned char a, unsigned char b)
{
Write_Command(0x21); // Set Column Address
Write_Command(a); // Default => 0x00 (Column Start Address)
Write_Command(b); // Default => 0x7F (Column End Address)
}
void Set_Page_Address(unsigned char a, unsigned char b)
{
Write_Command(0x22); // Set Page Address
Write_Command(a); // Default => 0x00 (Page Start Address)
Write_Command(b); // Default => 0x07 (Page End Address)
}
void Set_Start_Line(unsigned char d)
{
Write_Command(0x40|d); // Set Display Start Line
// Default => 0x40 (0x00)
}
void Set_Contrast_Control(unsigned char d)
{
Write_Command(0x81); // Set Contrast Control
Write_Command(d); // Default => 0x7F
}
void Set_Charge_Pump(unsigned char d)
{
Write_Command(0x8D); // Set Charge Pump
Write_Command(0x10|d); // Default => 0x10
// 0x10 (0x00) => Disable Charge Pump
// 0x14 (0x04) => Enable Charge Pump
}
void Set_Segment_Remap(unsigned char d)
{
Write_Command(0xA0|d); // Set Segment Re-Map
// Default => 0xA0
// 0xA0 (0x00) => Column Address 0 Mapped to SEG0
// 0xA1 (0x01) => Column Address 0 Mapped to SEG127
}
void Set_Entire_Display(unsigned char d)
{
Write_Command(0xA4|d); // Set Entire Display On / Off
// Default => 0xA4
// 0xA4 (0x00) => Normal Display
// 0xA5 (0x01) => Entire Display On
}
void Set_Inverse_Display(unsigned char d)
{
Write_Command(0xA6|d); // Set Inverse Display On/Off
// Default => 0xA6
// 0xA6 (0x00) => Normal Display
// 0xA7 (0x01) => Inverse Display On
}
void Set_Multiplex_Ratio(unsigned char d)
{
Write_Command(0xA8); // Set Multiplex Ratio
Write_Command(d); // Default => 0x3F (1/64 Duty)
}
void Set_Display_On_Off(unsigned char d)
{
Write_Command(0xAE|d); // Set Display On/Off
// Default => 0xAE
// 0xAE (0x00) => Display Off
// 0xAF (0x01) => Display On
}
void Set_Start_Page(unsigned char d)
{
Write_Command(0xB0|d); // Set Page Start Address for Page Addressing Mode
// Default => 0xB0 (0x00)
}
void Set_Common_Remap(unsigned char d)
{
Write_Command(0xC0|d); // Set COM Output Scan Direction
// Default => 0xC0
// 0xC0 (0x00) => Scan from COM0 to 63
// 0xC8 (0x08) => Scan from COM63 to 0
}
void Set_Display_Offset(unsigned char d)
{
Write_Command(0xD3); // Set Display Offset
Write_Command(d); // Default => 0x00
}
void Set_Display_Clock(unsigned char d)
{
Write_Command(0xD5); // Set Display Clock Divide Ratio / Oscillator Frequency
Write_Command(d); // Default => 0x80
// D[3:0] => Display Clock Divider
// D[7:4] => Oscillator Frequency
}
void Set_Precharge_Period(unsigned char d)
{
Write_Command(0xD9); // Set Pre-Charge Period
Write_Command(d); // Default => 0x22 (2 Display Clocks [Phase 2] / 2 Display Clocks [Phase 1])
// D[3:0] => Phase 1 Period in 1~15 Display Clocks
// D[7:4] => Phase 2 Period in 1~15 Display Clocks
}
void Set_Common_Config(unsigned char d)
{
Write_Command(0xDA); // Set COM Pins Hardware Configuration
Write_Command(0x02|d); // Default => 0x12 (0x10)
// Alternative COM Pin Configuration
// Disable COM Left/Right Re-Map
}
void Set_VCOMH(unsigned char d)
{
Write_Command(0xDB); // Set VCOMH Deselect Level
Write_Command(d); // Default => 0x20 (0.77*VCC)
}
void Set_NOP()
{
Write_Command(0xE3); // Command for No Operation
}
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Initialization
//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
void OLED_Init_E() // VCC Supplied Externally
{
unsigned char i;
RES_L;
for(i=0;i<200;i++)
{
uDelay(200);
}
RES_H;
Set_Display_On_Off(0x00); // Display Off (0x00/0x01)
Set_Display_Clock(0x80); // Set Clock as 100 Frames/Sec
Set_Multiplex_Ratio(0x3F); // 1/64 Duty (0x0F~0x3F)
Set_Display_Offset(0x00); // Shift Mapping RAM Counter (0x00~0x3F)
Set_Start_Line(0x00); // Set Mapping RAM Display Start Line (0x00~0x3F)
Set_Charge_Pump(0x00); // Disable Embedded DC/DC Converter (0x00/0x04)
Set_Addressing_Mode(0x02); // Set Page Addressing Mode (0x00/0x01/0x02)
Set_Segment_Remap(0x01); // Set SEG/Column Mapping (0x00/0x01)
Set_Common_Remap(0x08); // Set COM/Row Scan Direction (0x00/0x08)
Set_Common_Config(0x10); // Set Sequential Configuration (0x00/0x10)
Set_Contrast_Control(Brightness); // Set SEG Output Current
Set_Precharge_Period(0x22); // Set Pre-Charge as 2 Clocks & Discharge as 2 Clock
Set_VCOMH(0x40); // Set VCOM Deselect Level
Set_Entire_Display(0x00); // Disable Entire Display On (0x00/0x01)
Set_Inverse_Display(0x00); // Disable Inverse Display On (0x00/0x01)
Fill_RAM(0x00); // Clear Screen
Set_Display_On_Off(0x01); // Display On (0x00/0x01)
}
void OLED_Init_I() // VCC Generated by Internal DC/DC Circuit
{
unsigned char i;
RES_L;
for(i=0;i<200;i++)
{
uDelay(500);
// uDelay(200);
}
RES_H;
Set_Display_On_Off(0x00); // Display Off (0x00/0x01)
Set_Display_Clock(0x80); // Set Clock as 100 Frames/Sec
Set_Multiplex_Ratio(0x3F); // 1/64 Duty (0x0F~0x3F)
Set_Display_Offset(0x00); // Shift Mapping RAM Counter (0x00~0x3F)
Set_Start_Line(0x00); // Set Mapping RAM Display Start Line (0x00~0x3F)
Set_Charge_Pump(0x04); // Enable Embedded DC/DC Converter (0x00/0x04)
Set_Addressing_Mode(0x02); // Set Page Addressing Mode (0x00/0x01/0x02)
Set_Segment_Remap(0x00); // Set SEG/Column Mapping (0x00/0x01)
Set_Common_Remap(0x00); // Set COM/Row Scan Direction (0x00/0x08)
Set_Common_Config(0x10); // Set Sequential Configuration (0x00/0x10)
Set_Contrast_Control(Brightness); // Set SEG Output Current
Set_Precharge_Period(0xF1); // Set Pre-Charge as 15 Clocks & Discharge as 1 Clock
Set_VCOMH(0x40); // Set VCOM Deselect Level
Set_Entire_Display(0x00); // Disable Entire Display On (0x00/0x01)
Set_Inverse_Display(0x00); // Disable Inverse Display On (0x00/0x01)
Fill_RAM(0x00); // Clear Screen
Set_Display_On_Off(0x01); // Display On (0x00/0x01)
}