智能车学习(八)——菜单的实现
一、代码分享
1、头文件
#ifndef __MENU_H #define __MENU_H/***********宏定义************///页面声明 typedef enum Menu_Page_Enum {MainMenu = 0,SubMenu1 = 1,SubMenu2 = 2,SubMenu3 = 3,SubMenu4 = 4,SubMenu5 = 5,SubMenu6 = 6 } Menu_Page_Enum;//页面位置声明 #define OLED_TOP 0 #define OLED_BUTTOM 7 #define OLED_LEFT 0 #define OLED_RIGHT 127 #define OLED_Line_MIDDLE 63 //行中间/*****************************//***********函数声明***********///刷新 void Menu_Refresh(void); void MainMenu_Refresh(void); void SubMenu1_Refresh(void); void SubMenu2_Refresh(void); void SubMenu3_Refresh(void); void SubMenu4_Refresh(void); void SubMenu5_Refresh(void); void SubMenu6_Refresh(void); void MenuPointer_Refresh(int Menu_pointer);//按键功能 void Menu_Key_Detect(void); void Keynum2_function(void); void Keynum10_function(void); void Keynum5_function(void); void Keynum7_function(void);/*****************************/#endif
2、源文件
#include "include.h" #include "common.h" #include "OLED.h" #include "gpio.h" #include "Menu.h" #include "lptmr.h" #include "KeySquare.h"/***********全局变量定义************/ //当前页面 int Menu_Page = MainMenu;//页面光标 int MainMenuPointer = 1; int SubMenuPointer1 = 1; int SubMenuPointer2 = 1; int SubMenuPointer3 = 1; int SubMenuPointer4 = 1; int SubMenuPointer5 = 1; int SubMenuPointer6 = 1;/**********************************///============================================================================ //函数名称:void Menu_Key_Detect(void) //函数返回:无 //参数说明: 五 //功能概要:按键检测 //============================================================================ void Menu_Key_Detect(void) {switch(keyBoard_get()){case Keynum1: break;case Keynum2: Keynum2_function(); break;case Keynum3: break;case Keynum4: break;case Keynum5: Keynum5_function(); break;case Keynum6: break;case Keynum7: Keynum7_function(); break;case Keynum8: break;case Keynum9: break;case Keynum10: Keynum10_function(); break;case Keynum11: break;case Keynum12: break;default: break;}}//============================================================================ //函数名称:void Keynum5_function(void) //函数返回:无 //参数说明:无 //功能概要:按键5对应的功能 //============================================================================ void Keynum5_function(void) {Menu_Page = MainMenu;Menu_Refresh();lptmr_delay_ms(200); }//============================================================================ //函数名称:void Keynum7_function(void) //函数返回:无 //参数说明:无 //功能概要:按键7对应的功能 //============================================================================ void Keynum7_function(void) {switch(MainMenuPointer){case 1: Menu_Page = SubMenu1; break;case 2: Menu_Page = SubMenu2; break;case 3: Menu_Page = SubMenu3; break;case 4: Menu_Page = SubMenu4; break;case 5: Menu_Page = SubMenu5; break;case 6: Menu_Page = SubMenu6; break;default: break;}Menu_Refresh();lptmr_delay_ms(200); }//============================================================================ //函数名称:void Keynum10_function(void) //函数返回:无 //参数说明:无 //功能概要:按键10对应的功能 //============================================================================ void Keynum10_function(void) {switch(Menu_Page){case MainMenu: {MainMenuPointer++; if(MainMenuPointer > 6) MainMenuPointer = 1;break;}case SubMenu1: {SubMenuPointer1 ++; if(SubMenuPointer1 > 3) SubMenuPointer1 = 1;break;}case SubMenu2: {SubMenuPointer2 ++; if(SubMenuPointer2 > 3) SubMenuPointer2 = 1;break;}case SubMenu3: {SubMenuPointer3 ++; if(SubMenuPointer3 > 3) SubMenuPointer3 = 1;break;}case SubMenu4: {SubMenuPointer4 ++; if(SubMenuPointer4 > 3) SubMenuPointer4 = 1;break;}case SubMenu5: {SubMenuPointer5 ++; if(SubMenuPointer5 > 3) SubMenuPointer5 = 1;break;}case SubMenu6: {SubMenuPointer6 ++; if(SubMenuPointer6 > 3) SubMenuPointer6 = 1;break;}default: break;}Menu_Refresh();lptmr_delay_ms(200); }//============================================================================ //函数名称:void Keynum2_function(void) //函数返回:无 //参数说明:无 //功能概要:按键2对应的功能 //============================================================================ void Keynum2_function(void) {switch(Menu_Page){case MainMenu: {MainMenuPointer--; if(MainMenuPointer < 1) MainMenuPointer = 6;break;}case SubMenu1: {SubMenuPointer1--; if(SubMenuPointer1 < 1) SubMenuPointer1 = 3;break;}case SubMenu2: {SubMenuPointer2 --; if(SubMenuPointer2 < 1) SubMenuPointer2 = 3;break;}case SubMenu3: {SubMenuPointer3 --; if(SubMenuPointer3 < 1) SubMenuPointer3 = 3;break;}case SubMenu4: {SubMenuPointer4 --; if(SubMenuPointer4 < 1) SubMenuPointer4 = 3;break;}case SubMenu5: {SubMenuPointer5 --; if(SubMenuPointer5 < 1) SubMenuPointer5 = 3;break;}case SubMenu6: {SubMenuPointer6 --; if(SubMenuPointer6 < 1) SubMenuPointer6 = 3;break;}default: break;}Menu_Refresh();lptmr_delay_ms(200); }//============================================================================ //函数名称:void MenuPointer_Refresh(int Menu_pointer) //函数返回:无 //参数说明:MPage 刷新对应页面 //功能概要:光标刷新函数 //============================================================================ void MenuPointer_Refresh(int Menu_pointer) {switch(Menu_pointer){case 1: OLED_Write_String(2,OLED_LEFT,"@"); break;case 2: OLED_Write_String(4,OLED_LEFT,"@"); break;case 3: OLED_Write_String(6,OLED_LEFT,"@"); break;case 4: OLED_Write_String(2,OLED_Line_MIDDLE,"@"); break;case 5: OLED_Write_String(4,OLED_Line_MIDDLE,"@"); break;case 6: OLED_Write_String(6,OLED_Line_MIDDLE,"@"); break;default: break;} }//============================================================================ //函数名称:void Menu_Refresh(void) //函数返回:无 //参数说明:MPage 刷新对应页面 //功能概要:页面刷新函数 //============================================================================ void Menu_Refresh(void) {OLED_Clear();switch(Menu_Page){case MainMenu: MainMenu_Refresh(); break;case SubMenu1: SubMenu1_Refresh(); break;case SubMenu2: SubMenu2_Refresh(); break;case SubMenu3: SubMenu3_Refresh(); break;case SubMenu4: SubMenu4_Refresh(); break;case SubMenu5: SubMenu5_Refresh(); break;case SubMenu6: SubMenu6_Refresh(); break;default: break;}}//============================================================================ //函数名称:void MainMenu_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:主页面刷新函数 //============================================================================ void MainMenu_Refresh(void) {OLED_Write_String(0,OLED_Line_MIDDLE-35,"MainMenu");OLED_Write_String(2,10,"Menu1");OLED_Write_String(4,10,"Menu2");OLED_Write_String(6,10,"Menu3");OLED_Write_String(2,OLED_Line_MIDDLE + 8,"Menu4");OLED_Write_String(4,OLED_Line_MIDDLE + 8,"Menu5");OLED_Write_String(6,OLED_Line_MIDDLE + 8,"Menu6");MenuPointer_Refresh(MainMenuPointer);}//============================================================================ //函数名称:void SubMenu1_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:子页面1刷新函数 //============================================================================ void SubMenu1_Refresh(void) {OLED_Write_String(2,10,"Menu1");OLED_Write_String(4,10,"Menu1");OLED_Write_String(6,10,"Menu1");MenuPointer_Refresh(SubMenuPointer1); }//============================================================================ //函数名称:void SubMenu2_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:子页面2刷新函数 //============================================================================ void SubMenu2_Refresh(void) {OLED_Write_String(2,10,"Menu2");OLED_Write_String(4,10,"Menu2");OLED_Write_String(6,10,"Menu2");MenuPointer_Refresh(SubMenuPointer2); }//============================================================================ //函数名称:void SubMenu3_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:子页面3刷新函数 //============================================================================ void SubMenu3_Refresh(void) {OLED_Write_String(2,10,"Menu3");OLED_Write_String(4,10,"Menu3");OLED_Write_String(6,10,"Menu3");MenuPointer_Refresh(SubMenuPointer3); }//============================================================================ //函数名称:void SubMenu4_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:子页面4刷新函数 //============================================================================ void SubMenu4_Refresh(void) {OLED_Write_String(2,10,"Menu4");OLED_Write_String(4,10,"Menu4");OLED_Write_String(6,10,"Menu4");MenuPointer_Refresh(SubMenuPointer4); }//============================================================================ //函数名称:void SubMenu5_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:子页面5刷新函数 //============================================================================ void SubMenu5_Refresh(void) {OLED_Write_String(2,10,"Menu5");OLED_Write_String(4,10,"Menu5");OLED_Write_String(6,10,"Menu5");MenuPointer_Refresh(SubMenuPointer5); }//============================================================================ //函数名称:void SubMenu6_Refresh(void) //函数返回:无 //参数说明:无 //功能概要:子页面6刷新函数 //============================================================================ void SubMenu6_Refresh(void) {OLED_Write_String(2,10,"Menu6");OLED_Write_String(4,10,"Menu6");OLED_Write_String(6,10,"Menu6");MenuPointer_Refresh(SubMenuPointer6); }
二、使用方法:
直接调用即可。
void main() {DISABLE_INTERRUPTS; //MPU上电,各模块功能初始化前需要关中断system_init(); //各模块功能初始化ENABLE_INTERRUPTS; //开中断使能 OLED_Init(); Menu_Refresh();while(1){Menu_Key_Detect();} }
转载于:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4912565.html
智能车学习(八)——菜单的实现相关推荐
- 智能车学习日记【一】——让小车跑正方形赛道(摄像头图像处理赛道)
智能车学习日记[一]--让小车跑正方形赛道 目录 开篇 舵机 赛道图像处理 图像处理 代码![在这里插入图片描述](https://img-blog.csdnimg.cn/9ec0eb76bd8941 ...
- 智能车学习日记【四】————环岛
智能车学习日记[四]----环岛 文章目录 智能车学习日记[四]----环岛 前言 一.环岛分状态(以左环岛为例) 二.每个状态思路 状态1和状态2: 状态3: 状态4: 状态5: 状态6: 状态7: ...
- 智能车学习日记【五】——————坡道和弯接坡道
文章目录 前言 一.坡道的判别 二.直道接坡道 1.上坡 2.位于坡道上 3.下坡 三.弯接坡道 总结 前言 这里记录一下坡道的写法和思路.博主的坡道处理是纯图像处理,没有使用陀螺仪等其他硬件设备进行 ...
- 智能车学习日记【二】————十字和斜入十字
智能车学习日记[二]----十字和斜入十字 文章目录 智能车学习日记[二]----十字和斜入十字 前言 一.普通十字补线 二.斜入十字 1.判断是否为斜入十字和斜入十字类型 2.找斜入十字拐点 总结 ...
- 基于ROS+镭神激光雷达+amcl定位、导航的智能车学习记录
目录 一.背景 二. 难点之避障学习 三.比赛实参 一.背景 背景 目前大火的智能车.机器人.无人驾驶技术,现基于嵌入式系统.人工智能.机器人定位与导航基础 开展了第十四届全国大学生智能汽车竞赛-室外 ...
- 智能车学习(十五)——K60野火2013版例程
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,5);//定时中断初始化 set_vector_handler(PIT0 ...
- 智能车学习笔记(摄像头组)——基础扫线
今年第一次搞智能车,刚刚上大一,一切都是摸索着来,趁着放假了就把自己学会的东西梳理一下.第一次写的比较乱,欢迎各位一起学习(我亲爱的队友要加倍努力哈,这几天嗓子疼,不能腾讯会议给你讲了,专门给你写的) ...
- 【智能车学习】电磁车算法优化总结
目录 前言 电感排布方案 舵机算法修正 分段式PD算法 使用函数曲线整定PD参数 电机控制 目标速度的确定 差速控制算法 特殊元素处理 环岛处理 防坡道误判 其他辅助结构 屏幕显示 按键控制与拨码开关 ...
- 【智能车学习】电磁循迹中的基本控制算法
文章目录 前言 采样信号滤波 什么是滤波 常见的软件滤波办法 限幅法 算术平均值滤波 归一化 什么是归一化 归一化的代码实现 PID控制 什么是PID控制 PID算法的代码实现 舵机控制 电机控制 目 ...
最新文章
- linux操作系统教学,Linux操作系统教学视频
- JS中 window.location.search的作用
- ufs2.0测试软件,【玩机组教程】让你的一加3/3T的ufs2.0闪存速度焕发新生
- javascript :得到上星期的这一天日期
- [转] 深入理解React 组件状态(State)
- 计算机应用管理试题,学习管理系统中计算机应用试卷试题及答案.docx
- 使用eclipse以及Juint进行测试
- C语言字符串、字符数组
- 正则表达式学习笔记004--连字符和范围描述符的认识与应用
- 电力电容器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 2D转换中心点transform-origin(CSS3)
- Layui官网文档备份, Layui文档站点,LayuiAdmin
- 最全Pycharm教程(5)——Python快捷键相关设置
- Bp算法公式推导推导-详解
- LintCode Copy Books
- 【网络架构理论系列】简述分布式的定义、分类、技术发展历史进程
- 51单片机60秒倒计时 数码管显示
- 修复XP图片和传真查看器!
- 精度和分辨率的区别与理解
- 手把手学会 VS Code 快捷任务神技,成为项目组最靓的崽!
热门文章
- el-tooltip位置不灵活_要提高步伐移动的灵活性,注意这5点,加以改正,步伐不再沉重...
- Python中*args和**kwargs的解释
- 破旧立新 “云”称霸
- eclipse使用不需要配置jdk的环境变量
- Apache james 2.3.2.1启动失败换成2.3.2版本就好
- Windows 7 / Windows 10 安装 IPX/SPX
- 2014 Red Hat Summit(红帽峰会)PPT合集
- [转] 计算机视觉领域稍微容易中的期刊
- Oracle性能调优
- 实现APP-V服务全程跟踪(二)