当前位置:网站首页>OLED屏幕的使用

OLED屏幕的使用

2022-07-06 12:24:00 Kshine2017

1. 0.96寸7引脚OLED屏幕

  • 图中文字的缺失部分是因为手机拍照所致,实际是完整的文字。
  • 参考链接:
    https://wenku.baidu.com/view/eb67b928b91aa8114431b90d6c85ec3a87c28b86.html
    https://wenku.baidu.com/view/11e968518d9951e79b89680203d8ce2f00666590.html
  • 引脚解释:
GND  GND
VDD  VCC    3.3V~5V
PE5    D0     CLK时钟信息(SCL)      SPI_CLK
PE6    D1     数据端口(SDA)         SPI_MOSI
PE7    RES    复位                    普通IO
PE8    DC     数据/命令选择(D/C)      普通IO
PE9    CS     片选,低电平有效        SPI_CS

请添加图片描述

  • 电阻的接选方式如下图,对应4线SPI。
    在这里插入图片描述
  • IO模拟4线SPI,驱动OLED
void MX_GPIO_Init(void)
{
    

  GPIO_InitTypeDef GPIO_InitStruct = {
    0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOD_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
	
  GPIOA->BSRR = OLED_DC_Pin;
	GPIOA->BSRR = OLED_RES_Pin;
	GPIOA->BSRR = GPIO_PIN_5;//SCK拉高
	GPIOA->BSRR = GPIO_PIN_7;//拉高
	//CS引脚直接接了GND
	
	
	GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;

  GPIO_InitStruct.Pin = OLED_DC_Pin|OLED_RES_Pin;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

	GPIO_InitStruct.Pin = GPIO_PIN_5|GPIO_PIN_7;
	GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
	HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

#define MOSI_H GPIOA->BSRR = GPIO_PIN_7 //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_SET) //
#define MOSI_L GPIOA->BRR = GPIO_PIN_7 //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_7, GPIO_PIN_RESET) //
#define SCK_H GPIOA->BSRR = GPIO_PIN_5 //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET) //
#define SCK_L GPIOA->BRR = GPIO_PIN_5 //HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_RESET) //

//#define MISO 
#define NSS_H 
#define NSS_L 

void delayUS(uint32_t nus)
{
    		
  uint16_t i;
	for(i=0;i<nus;i++)
	{
    
	} 
}


//可以使用SPI的方式 HAL_SPI_Transmit(&hspi1,&data,1,1);
void My_SPI_Transmit(unsigned char data)
{
    

	unsigned char i;	        //定义变量
	for(i = 0; i < 8; i++)	        //循环8次
	{
    
		SCK_L;
        delayUS(1);			
	    if(data&0x80)
		    MOSI_H;
		else
			  MOSI_L;
		data<<=1;
		delayUS(1);	
		SCK_H;
		delayUS(1);	
		}
	
}


  • 实测,单片机工作在72MHz的情况下,上述My_SPI_Transmit函数耗费的时间大概是76.4微秒。
    在这里插入图片描述

  • 驱动文件
    https://download.csdn.net/download/Kshine2017/85519013

原网站

版权声明
本文为[Kshine2017]所创,转载请带上原文链接,感谢
https://blog.csdn.net/Kshine2017/article/details/125080246