当前位置: 首页 > news >正文

标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程

标准库 STM32+EC11编码器+I2C ssd1306多级菜单例程


  • 📌原创项目来源于:https://github.com/AdamLoong/Embedded_Menu_Simple
  • 📍相关功能演示观看:https://space.bilibili.com/74495335

单片机多级菜单v1.2


  • 👉本次采用的是原作者(Adam)《单片机多级菜单框架v1.8》基础上修改适配包含中键按键的EC11编码器。
  • 📍原作者网盘项目共享资料:
https://pan.baidu.com/s/1bZPWCKaiNbb-l1gpAv6QNg?pwd=KYWS
  • ✨原作者分享了多个版本的多级菜单例程。可以根据个人需求进行学习了解。

🛠修改内容

  • 🔨将芯片型号切换为stm32f103vc型号,并将对应的.s 文件进行了替换。
  • 🔨 将原中断引脚GPIOB上的GPIO14 和GPIO12 修改到了GPIOE端口上的GPIO8 和GPIO7上,上和下键切换到了GPIOE端口对应的GPIO13、GPIO15。
  • 🔨 新增中断引脚GPIOA端口上的GPIO10引脚,作为EC11编码器中键,单击作用等同于确认按键,长按等同于返回按键。
  • 🔧新增启用定时器3,用来配合EC11按键长按计时作用。
  • 🔧同时开启了系统滴答定时器中断,创建了同HAL库下的HAL_GetTick()函数。
  • 🔧新增2路led输出引脚:PE5和PB5,一路在系统滴答定时器中断中调用,一路在定时器3更新中断中调用。
  • 🔧 新增引用正点原子资料中的sys.c/h ,方便GPIO引脚的原子操作。
    在这里插入图片描述

📑引脚定义接线说明:

  • 🍁编码器接线图参考:
    在这里插入图片描述
EC11-M --- PA10(中键)
EC11-A --- PA8(如果方向相反,对调EC11-B接线)
EC11-B --- PA9
  • 🌿 I2C ssd1306 oled
I2C SCL ---- PB8
I2C SDA ---- PB9
  • 🌿按键
PE8 --- 确认键
PE7 --- 	返回键
PE13 --- 下键
PE15 --- 上键

📘功能说明

👉原作者(By:Adam)《单片机多级菜单框架v1.8》项目,基于STM32F1标准库开发,硬件上,应该使用的是360度编码器不带中键的,当然没有编码器也可以使用; 前提是接了对应的按键。在原项目功能基础上增加了EC11编码器的功能。(原项目也可以使用EC11编码器但是没有按键功能)新增的EC11编码按键功能确认键(单击)和返回键(长按)。内部演示功能未做任何修改,只是新增了按键控制功能扩展。
  • 🔑 EC11编码器控制菜单相对丝滑,包含多种显示模式,内包涵2个体验游戏(贪吃蛇和康威生命游戏)。详情可以查看上面的原作者发布的视频,进行了解。

⛳功能实现说明

  • 🌿360度编码器功能实现是利用定时器1的编码器功能,来读取编码器旋转信息的。
  • 🌿按键读取,通过外部中断实现。
  • 🌿I2C ssd1306 OLED显示,使用软件I2C通讯。

📚程序源码

  • 🔖代码内容较多这里不做展示。
链接:https://pan.baidu.com/s/14ikoJMTAj6qxNFu4xZn51w?pwd=vyq7 
提取码:vyq7

相关文章:

  • 【JAVA WEB】盒模型
  • OpenEuler20.03LTS SP2 上安装 OpenGauss3.0.0 单机部署过程(二)
  • Webpack插件浅析
  • 4.0 Zookeeper Java 客户端搭建
  • 高仿原神官网UI 纯html源码
  • SpringBoot日志插件log4J和slf4J的使用和比较含完整示例
  • LeetCode Python - 7. 整数反转
  • 在Visual Studio中引用和链接OpenSceneGraph (OSG) 库
  • Oracle篇—logminer日志挖掘恢复误操作数据
  • 学习Android的第八天
  • Flink面试准备
  • 第1节、电路连接【51单片机+L298N步进电机系列】
  • 查看系统进程信息的Tasklist命令
  • MySQL-SQL优化
  • Linux运用fork函数创建进程
  • 【node学习】协程
  • 【翻译】babel对TC39装饰器草案的实现
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • DOM的那些事
  • eclipse的离线汉化
  • ECMAScript6(0):ES6简明参考手册
  • EOS是什么
  • ES10 特性的完整指南
  • Git学习与使用心得(1)—— 初始化
  • leetcode-27. Remove Element
  • Mac转Windows的拯救指南
  • PaddlePaddle-GitHub的正确打开姿势
  • Puppeteer:浏览器控制器
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • webpack4 一点通
  • 从重复到重用
  • 关于List、List?、ListObject的区别
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 坑!为什么View.startAnimation不起作用?
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何实现 font-size 的响应式
  • 什么是Javascript函数节流?
  • 使用SAX解析XML
  • 世界上最简单的无等待算法(getAndIncrement)
  • 王永庆:技术创新改变教育未来
  • 小程序开发之路(一)
  • 写给高年级小学生看的《Bash 指南》
  • 以太坊客户端Geth命令参数详解
  • mysql面试题分组并合并列
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ${factoryList }后面有空格不影响
  • (3)nginx 配置(nginx.conf)
  • (javascript)再说document.body.scrollTop的使用问题
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (windows2012共享文件夹和防火墙设置
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (十五)devops持续集成开发——jenkins流水线构建策略配置及触发器的使用