您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 经营企划 > stm32_12864液晶_菜单设计
/*************menu.h*******************/#ifndef__MENU_H#define__MENU_H#includestm32f10x.h#includeSysTick.h#includestdlib.h#include12864.h#includeAdcDisplay.h#includekey.h#includespi_tm7705.h#includeeeprom.htypedefstructmenu//定义一个菜单{u8range_from,range_to;//当前显示的项开始及结束序号u8itemCount;//项目总数u8selected;//当前选择项u8*menuItems[17];//菜单项目structmenu**subMenus;//子菜单structmenu*parent;//上级菜单,如果是顶级则为nullvoid(**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***********************************************************************************/#includemenu.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为锁模力FMenuDiaMenu={//单位设置菜单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];//eepromMenu*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;i4;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(currentMenu-selected);}voidUnitch4(void){LCD_Init();currentMenu=currentMenu-parent;currentMenu-selected=0;DisplayMenu(currentMenu-selected);}voidDiaChange(void){uint8_t*s=单位:MM;//测试代码u16a=0;inti=0;//u16tmp1;LCD_Init();LCD_Write_String(0,0,s);zhijing=Change(zhijing,title1);mianji=3.14*((zhijing/2)*(zhijing/2));EE_WriteVariable(VirtAddVarTab[0],zhijing);//测试代码//for(i=0;i99;i++)//{//a=a+1;//LCD_Write_Tri_Value(2,3,a);//Delay_ms(50);//}}voidMlChange(void){uint8_t*s=单位:KN/MM2;LCD_Init();LCD_Write_String(0,0,s);moliang=Change(moliang,title2);EE_WriteVariable(VirtAddVarTab[1],moliang);}//数字按键循环,升到9后变0,降到0后变9,参数pm为加减,1为+,0为减u16NumLoop(u16num,u8pm){if(pm==1){if(num=9)num=0;elsenum=num+1;}else{if(num=0)num=9;elsenum=num-1;}returnnum;}//Sval代表直径或模量的默认值,返回修改后直径或模量的值u8Change(u8Sval,uint8_t*title){u16baiwei,shiwei,gewei,Dval;//数字ascii码//chartmpval;//按键返回值u8keyval=0;//光标位置3为百位、4为十位,5为个位u8loc=3;//是否选中其中一位u8clicked=0;//光标闪烁位,是否闪烁u8flicker=0;baiwei=(u16)(Sval/100);shiwei=(u16)((Sval%100)/10);gewei=(u16)((Sval%100)%10);//tmpval=(char)baiwei+0x30;//LCD_Write_Char(2,3,tmpval);//tmpval=(char)shiwei+0x30;//LCD_Write_Char(2,4,tmpval);//tmpval=(char)gewei+0x30;//LCD_Write_Char(2
本文标题:stm32_12864液晶_菜单设计
链接地址:https://www.777doc.com/doc-2860942 .html