stm3212864液晶菜单设计.docx
- 文档编号:3099985
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:18
- 大小:18.39KB
stm3212864液晶菜单设计.docx
《stm3212864液晶菜单设计.docx》由会员分享,可在线阅读,更多相关《stm3212864液晶菜单设计.docx(18页珍藏版)》请在冰豆网上搜索。
stm3212864液晶菜单设计
/*************menu.h*******************/
#ifndef__MENU_H
#define__MENU_H
#include"stm32f10x.h"
#include"SysTick.h"
#include
#include"12864.h"
#include"AdcDisplay.h"
#include"key.h"
#include"spi_tm7705.h"
#include"eeprom.h"
typedefstructmenu//定义一个菜单
{
u8range_from,range_to;//当前显示的项开始及结束序号
u8itemCount;//项目总数
u8selected;//当前选择项
u8*menuItems[17];//菜单项目
structmenu**subMenus;//子菜单
structmenu*parent;//上级菜单,如果是顶级则为null
void(**func)();//选择相应项按确定键后执行的函数
}Menu;
voidMainDisplay(void);
voidDisplayMenu(u8line);
voidfunc(void);
voidUnitch1(void);
voidUnitch2(void);
voidUnitch3(void);
voidUnitch4(void);
voidDiaChange(void);
voidMlChange(void);
u16NumLoop(u16num,u8pm);
u8Change(u8Sval,uint8_t*title);
voidMenuInit(void);
#endif/*__MENU_H*/
/*************menu.h*******************/
/************menu.c*******************/
/****************************************
*文件名:
menu.c
*描述:
液晶菜单函数库
*实验平台:
*硬件连接----------------------------
*
*
*
*----------------------------
*库版本:
ST3.0.0
*
**********************************************************************************/
#include"menu.h"
//菜单与AD结果显示变量,0为AD,1为菜单
externu8MenuDis=0;
//typedefstructmenu//定义一个菜单
//{
//u8range_from,range_to;//当前显示的项开始及结束序号
//u8itemCount;//项目总数
//u8selected;//当前选择项
//u8*menuItems[17];//菜单项目
//structmenu**subMenus;//子菜单
//structmenu*parent;//上级菜单,如果是顶级则为null
//void(**func)();//选择相应项按确定键后执行的函数
//
//}Menu;
MenuMainMenu={//定义主菜单
0,3,4,0,//默认显示0-3项,总共4项,当前选择第0项
{
"单位设置\x10",
"直径设置\x10",
"模量设置\x10",
"关于"
}
};
MenuUnitMenu={//单位设置菜单
0,3,4,0,
{
"应变量ε",
"锁模力KN",
"锁模力Ton",
"取消"
}
};
u8UnitCh;//单位选择,0为变形量ε,1为应变量σ,2为锁模力F
MenuDiaMenu={//单位设置菜单
0,0,1,0,
{
"主999mm"
}
};
MenuMlMenu={//模量设置菜单
0,0,1,0,
{
"主999KN/mm2"
}
};
u8DiaVal;//直径数值
u8MlVal;//模量数值
//菜单与AD结果显示变量,0为AD,1为菜单
u8MenuDis;
//复位前指数
u16BaseAD[4];
//横截面积
u16mianji;
//横截直径
u16zhijing;
//模量
u16moliang;
//按键返回值
u8keyval;
uint8_t*title1="单位:
MM";
uint8_t*title2="单位:
KN/MM2";
externu16ADResult[4];//存储AD结果的数组
externuint16_tVirtAddVarTab[NumbOfVar];//eeprom
Menu*currentMenu;//当前的菜单
voidMainDisplay(void)
{
if(MenuDis==0)
AdUi();
keyval=KeyScan();
switch(keyval)
{
case0:
//什么都不干
{
Delay_ms(50);
break;
}
case1:
//向上
{
if(MenuDis==1)
{
if(currentMenu->selected==0)//到了第一项
break;
else
{
currentMenu->selected--;
DisplayMenu(currentMenu->selected);
}
}
break;
}
case2:
//向下
{
if(MenuDis==1)
{
if(currentMenu->selected==currentMenu->itemCount-1)
break;
else
{
currentMenu->selected++;
DisplayMenu(currentMenu->selected);
}
}
break;
}
case3:
//确认
{
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;
}
case4:
//取消
{
if(MenuDis==1)
{
if(currentMenu->parent!
=NULL)//父菜单不为空,将显示父菜单
{
LCD_Init();
currentMenu=currentMenu->parent;
currentMenu->selected=0;
DisplayMenu(currentMenu->selected);
}
else
{
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[3]=ADResult[3];
AdUi();
}
break;
}
default:
break;
}
}
//用于显示菜单项
voidDisplayMenu(u8line)//显示菜单项并设置选中的项反白
{
inti;
line=3-(currentMenu->range_to-line);
for(i=0;i<4;i++)
{
LCD_Write_String(i,0,currentMenu->menuItems[i+currentMenu->range_from]);
}
WhiteLineInit();
White_Line(line,0,8);//反白显示指定行
}
voidfunc(void)
{
uint8_t*s="为人民服务";
LCD_Write_String(1,0,s);
Delay_ms(3000);
}
voidUnitch1(void)
{
UnitCh=0;
LCD_Init();
currentMenu=currentMenu->parent;
currentMenu->selected=0;
DisplayMenu(currentMenu->selected);
}
voidUnitch2(void)
{
UnitCh=1;
LCD_Init();
currentMenu=currentMenu->parent;
currentMenu->selected=0;
DisplayMenu(currentMenu->selected);
}
voidUnitch3(void)
{
UnitCh=2;
LCD_Init();
currentMenu=currentMenu->parent;
currentMenu->selected=0;
DisplayMenu(c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- stm3212864 液晶 菜单 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)