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接线说明
- 🌿在PA1、PA2与GND之间并联了1uf的电容,旋转EC11的时候不会那么跳。
🌼0.96/1.3″ I2C OLED接线说明
默认使用的是1.3寸的屏幕
// GND 电源地
// VCC 接5V或3.3v电源
// SCL 接PA5
// SDA 接PA7
- ⚡修改成0.96寸屏幕。(代码中都有注释,照着修改即可)
- 修改初始化函数
//初始化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
- 清屏函数
//清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
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);
} //更新显示
}
- 显示函数
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
- 🐛版本更新(2023-10-2):去除杂乱注释代码,调整命名规则,完善功能,添加菜单可调参数设置。目前仅实现了对所有二级菜单下的单一参数的修改,还没想到如何实现多子级菜单的定位方法以及参数修改。
链接:https://pan.baidu.com/s/1PSeqWZ-rBuHtaMpqEkLp5Q
提取码:hbdd
- 🌿利用枚举类型检索
链接:https://pan.baidu.com/s/1N1fLHlzzsEox3UC0KjPxPw
提取码:z2sv
今天的文章stc单片机旋转编码器程序_STM32F103C6T6最小系统板「建议收藏」分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/89495.html