stm32_12864液晶_菜单设计

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……

stm32_12864液晶_菜单设计.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219