UG096OLED 的驱动

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)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值