stm32_12864液晶_菜单设计
时间:2025-04-19
时间:2025-04-19
stm32_12864液晶_菜单设计程序
/*************menu.h*******************/
#ifndef __MENU_H
#define __MENU_H
#include "stm32f10x.h"
#include "SysTick.h"
#include <stdlib.h>
#include "12864.h"
#include "AdcDisplay.h"
#include "key.h"
#include "spi_tm7705.h"
#include "eeprom.h"
typedefstruct menu//定义一个菜单
{
u8 range_from,range_to; //当前显示的项开始及结束序号
u8 itemCount;//项目总数
u8 selected;//当前选择项
u8 *menuItems[17];//菜单项目
struct menu **subMenus;//子菜单
struct menu *parent;//上级菜单 ,如果是顶级则为null
void (**func)();//选择相应项按确定键后执行的函数
}Menu;
void MainDisplay(void);
void DisplayMenu(u8 line);
void func(void);
void Unitch1(void);
void Unitch2(void);
void Unitch3(void);
void Unitch4(void);
void DiaChange(void);
void MlChange(void);
u16 NumLoop(u16 num,u8 pm);
u8 Change(u8 Sval,uint8_t* title);
void MenuInit(void);
#endif /* __MENU_H */
/*************menu.h*******************/
/************menu.c*******************/
/******************** ********************
stm32_12864液晶_菜单设计程序
* 文件名:menu.c
* 描述:液晶菜单函数库
* 实验平台:
* 硬件连接 ----------------------------
*
*
*
* ----------------------------
* 库版本:ST3.0.0
*
**********************************************************************************/
#include "menu.h"
//菜单与AD结果显示变量,0为AD,1为菜单
extern u8 MenuDis=0;
//typedefstruct menu//定义一个菜单
//{
// u8 range_from,range_to; //当前显示的项开始及结束序号
// u8 itemCount;//项目总数
// u8 selected;//当前选择项
// u8 *menuItems[17];//菜单项目
// struct menu **subMenus;//子菜单
// struct menu *parent;//上级菜单 ,如果是顶级则为null
// void (**func)();//选择相应项按确定键后执行的函数
//
//}Menu;
Menu MainMenu = { //定义主菜单
0,3,4,0,//默认显示0-3项,总共4项,当前选择第0项
{
"单位设置 \x10",
"直径设置 \x10",
"模量设置 \x10",
"关于 "
}
};
Menu UnitMenu = {//单位设置菜单
0,3,4,0,
{
"应变量ε ",
stm32_12864液晶_菜单设计程序
"锁模力KN ",
"锁模力Ton",
"取消"
}
};
u8 UnitCh;//单位选择,0为变形量ε,1为应变量σ,2为锁模力F
Menu DiaMenu = {//单位设置菜单
0,0,1,0,
{
"主999 mm"
}
};
Menu MlMenu = {//模量设置菜单
0,0,1,0,
{
"主999 KN/mm2"
}
};
u8 DiaVal;//直径数值
u8 MlVal;//模量数值
//菜单与AD结果显示变量,0为AD,1为菜单
u8 MenuDis;
//复位前指数
u16 BaseAD[4];
//横截面积
u16 mianji;
//横截直径
u16 zhijing;
//模量
u16 moliang;
//按键返回值
u8 keyval;
uint8_t* title1="单位:MM";
uint8_t* title2="单位:KN/MM2";
stm32_12864液晶_菜单设计程序
extern u16 ADResult[4];//存储AD结果的数组
extern uint16_t VirtAddVarTab[NumbOfVar];//eeprom
Menu *currentMenu;//当前的菜单
void MainDisplay(void)
{
if (MenuDis==0)
AdUi();
keyval=KeyScan();
switch(keyval)
{
case 0: //什么都不干 { Delay_ms(50); break; } case 1://向上 { if(MenuDis==1) { if(currentMenu->selected == 0)//到了第一项 break; else { currentMenu->selected--; DisplayMenu(currentMenu->selected); } } break; } case 2://向下 { if(MenuDis==1) { if(currentMenu->selected == currentMenu->itemCount-1) break; else { currentMenu->selected++; DisplayMenu(currentMenu->selected); }
stm32_12864液晶_菜单设计程序
break; } case 3://确认 { if(MenuDis==0) { MenuDis=1; LCD_Init(); DisplayMenu(currentMenu->selected); } else { if(currentMenu->subMenus[currentMenu->selected] !=NULL) { LCD_Init(); currentMenu = currentMenu->subMenus[currentMenu->selected]; DisplayMenu(currentMenu->selected); } else { if(currentMenu->func[currentMenu->selected] != NULL) { LCD_Init(); } currentMenu->func[currentMenu->selected]();//执行相应的函数 currentMenu->selected=0; DisplayMenu(currentMenu->selected);//返回后恢复原来的菜单状态 } } } break; case 4://取消 { if(MenuDis==1) { if(currentMenu->parent!=NULL)//父菜单不为空,将显示父菜单 { LCD_Init(); currentMenu = currentMenu->parent; currentMenu->selected=0; DisplayMenu(currentMenu->selected); } else
stm32_12864液晶_菜单设计程序
}
} MenuDis=0; //currentMenu = MainMenu; currentMenu->selected=0; LCD_Init(); AdUi(); Delay_ms(100); } } else { Clr_Scr(); Delay_ms(50); Write_Char(0,0x30);//关闭扩展指令 //复位归零 BaseAD[0]=ADResult[0]; BaseAD[1]=ADResult[1]; BaseAD[2]=ADResult[2]; BaseAD …… 此处隐藏:6574字,全部文档内容请下载后查看。喜欢就下载吧 ……