STM32F103 + 0.96/1.3“ I2C OLED + EC11旋转编码器多级菜单demo

Posted perseverance52

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32F103 + 0.96/1.3“ I2C OLED + EC11旋转编码器多级菜单demo相关的知识,希望对你有一定的参考价值。

STM32F103 + 0.96/1.3" I2C OLED + EC11旋转编码器多级菜单demo


  • 操作演示:

项目基于STM32F103VE,标准库,支持极海APM同型号。可以改小容量型号以及其他型号的支持,需要自行修改移植。

  • EC11操控代码参考:https ://www.jianshu.com/p/41fa67ecb248
  • EC11旋转编码器

EC11接线说明

  • 在PA3、PA2与GND之间并联了1uf的电容,旋转EC11的时候不会那么跳。

0.96/1.3" I2C OLED接线说明

默认使用的是1.3寸的屏幕

//              GND    电源地
//              VCC  接5V或3.3v电源
//              SCL   接PA5
//              SDA   接PA7 
  • 修改成0.96寸屏幕。(代码中都有注释,照着修改即可)
    1. 修改初始化函数

//初始化SSD1306					    
void OLED_Init(void)
 	
 	 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //使能A端口时钟
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5|GPIO_Pin_7;	 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		 //推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//速度50MHz
 	GPIO_Init(GPIOA, &GPIO_InitStructure);	  //初始化GPIOD3,6
 	GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_7);	


	delay_ms(800);
	OLED_WR_Byte(0xAE,OLED_CMD);//--display off
	OLED_WR_Byte(0x02,OLED_CMD);//---set low column address,0.96屏幕:0x00,1.3屏幕:0x02
    1. 清屏函数
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!	  
void OLED_Clear(void)  
  
	u8 i,n;		    
	for(i=0;i<8;i++)  
	  
		OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
		OLED_WR_Byte (0x02,OLED_CMD);      //设置显示位置—列低地址,0.96屏幕:0x00,1.3寸屏幕:0x02
		OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
		for(n=0;n<132;n++)OLED_WR_Byte(0,OLED_DATA); 
	 //更新显示

    1. 显示函数
void OLED_On(void)  
  
	u8 i,n;		    
	for(i=0;i<8;i++)  
	  
		OLED_WR_Byte (0xb0+i,OLED_CMD);    //设置页地址(0~7)
		OLED_WR_Byte (0x02,OLED_CMD);      //设置显示位置—列低地址,0.96屏幕:0x00,1.3寸屏幕:0x02
		OLED_WR_Byte (0x10,OLED_CMD);      //设置显示位置—列高地址   
		for(n=0;n<128;n++)OLED_WR_Byte(1,OLED_DATA); 
	 //更新显示

  • mian.c程序代码
//							STM32F103 + 0.96/1.3"I2C OLED12864 + EC11旋转编码器
//              ----------------------------------------------------------------
//							OLED    STM32F103C8 
//              GND    电源地
//              VCC  接5V或3.3v电源
//              SCL   接PA5
//              SDA   接PA7           
//              ----------------------------------------------------------------
//							EC11旋转编码器 -----STM32F103
//							A --- PA1
//							B --- PA2
//							C --- PA3
//							      PA4未启用
//							逆时针,往下移动菜单,顺时针,往上移动
#include "delay.h"
#include "sys.h"
#include "oled.h"
#include "menu.h"
#include "EX_KEIL_0718.h"

int Level=0,Menu_Page=1;
int sum=0;

int main(void)


	delay_init();
  EX_Init();
	//LED_Init();
	OLED_Init();
	Menu_Display(Menu_Page, Level);
	while (1)
	
		Encoder_EC11_Analyze(Encoder_EC11_Scan( ));
	

程序源码

链接:https://pan.baidu.com/s/1Y4pEv62A51CPO18FHdDpBQ 
提取码:94i5

以上是关于STM32F103 + 0.96/1.3“ I2C OLED + EC11旋转编码器多级菜单demo的主要内容,如果未能解决你的问题,请参考以下文章

STM32F103 + 0.96/1.3“ I2C OLED + EC11旋转编码器多级菜单demo

STM32F103VET6基于STM32CubeMX 配置硬件I2C驱动ssd1306 OLED屏幕

STM32F103VET6基于STM32CubeMX 配置硬件I2C驱动SH1106 OLED屏幕

STM32F103VC+DS18B20温度+hc-sr04超声波测距+I2C OLED显示

i2c 传输,stm32f103 作为 Master,STOP 条件生成问题

Arduino STM32F103C8T6 驱动ssd1306 I2C oled