版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、stm32-12864液晶-菜单设计/*menu h*#ifndef MENU H #define MENU H#in elude "stm32f10x.h"#i nclude "SysTick.h"#in elude <stdlib.h> #i nclude "12864.h"#i nclude "AdcDis play.h"#i nclude "key.h"#in clude "sp i_tm7705.h"#in clude "ee prom.h&q
2、uot;typ edef struct menu/定义一个菜单u8 ran ge_from,ra nge_to; /当前显示的项开始及结束序号u8 itemCou nt;/ 项目总数u8 selected;/ 当前选择项u8 *me nultems17;/菜单项目struct menu *subMe nu s;/子菜单struct menu *paren t;/ 级则为nullvoid (*fu nc)();/行的函数级菜单,如果是顶选择相应项按确定键后执Me nu;void Mai nDis play(void);void DispI ayMe nu (u8 lin e);void fun
3、c(void);void Un itchl(void);void Un itch2(void);void Un itch3(void);void Un itch4(void);void DiaCha nge(void);void MlCha nge(void);u16 NumLoo p(u16 num,u8 p m); u8 Cha nge(u8 Sval,ui nt8_t* title); void Menuln it(void);#endif /* MENU H */*menu h*menu c*文件名menu.c描述:液晶菜单函数库实验平台:硬件连接库版本ST3.0.0*#in elud
4、e "me nu.h"菜单与AD结果显示变量,0为AD 1为菜单 extern u8 Men uDis=0;/typ edef struct menu /定义一个菜单/ u8 ran ge_from,ra nge_to; /开始及结束序号/ u8 itemCou nt;/当前显示的项项目总数当前选择项菜单项目 子菜单级菜单,如果是/ u8 selected;/ / u8 *me nultems17;/ struct menu *subMe nu s;/ struct menu *paren t;/顶级则为null/ void (*fu nc)();/执行的函数选择相应项按确
5、定键后/ /Me nu;Menu Mai nMenu = /0,340,默认显示选择第0项"单位设置x10","直径设置x10",定义主菜单0-3项,总共4项,当前"模量设置"关于;x10",IIMenu UnitMe nu = / 单位设置菜单0,340,IIIIIIII应变量£",锁模力KN ",锁模力Ton", 取消"u8 UnitCh;/ 单位选择,0为变形量£, 变量, 2为锁模力F1为应Menu DiaMenu = /单位设置菜单0,0,1,0,&quo
6、t;主 999 mm"Menu MlMenu = /模量设置菜单0,0,1,0,"主 999 KN/mm2" ;u8 DiaVal;/直径数值u8 MlVal;/ 模量数值/菜单与AD结果显示变量,0为AD 1为菜单 u8 Men uDis;/复位前指数u16 BaseAD4;/横截面积u16 mianji;/横截直径u16 zhiji ng;/模量u16 molia ng;/按键返回值u8 keyval;uin t8_t* title仁"uint8 t* title2="单位:单位:MM"KN/MM2"extern u16
7、 ADResult4;/exter n存储AD结果的数组uint16 tVirtAddVarTabNumbOfVar;/ee promMenu *curre ntMe nu;/ 当前的菜单void Mai nDis play(void) if (Me nuDis=0)AdUi();keyval=KeySca n();switch(keyval)case 0:/什么都不Delay_ms(50); break;case 1:/ 向上if(Me nuDis=1)if(curre ntMe nu->selected= 0)/到了第一项break;elsecurren tMe nu->sel
8、ected-;Dis playMe nu (curre ntMe nu->selected);break;case 2:/ 向下if(Me nuDis=1)if(curre ntMe nu->selectedcurre ntMe nu->itemCo un t-1)break;elsecurre ntMe nu->selected+;Dis playMe nu (curre ntMe nu->selected);break;case 3:/ 确认if(Me nuDis=O)Men uDis=1;LCDnit();Dis pl ayMe nu (curre ntMe
9、 nu->selected); elseif(curre ntMen u->subMe nu scurre ntMen u->s elected匸NULL)LCD_I ni t();curre ntMe nucurre ntMen u->subMe nu scurre ntMen u->select ed;Dis playMe nu (curre ntMe nu->selected);elseif(curre ntMe nu->fu nccurre ntMe nu->selecte d != NULL)LCDnit();curre ntMe nu
10、->funccurrentMenu->selected();/执行相应的函数curre ntMe nu->selected=O;DisplayMe nu (curre ntMe nu->selected);/返叵后恢复原来的菜单状态break;case 4:/ 取消if(Me nuDis=1)if(curre ntMe nu->pare nt!=NULL)/父菜单不为空,将显示父菜单Write_Char(0,0x30);/关闭扩展指LCD_I nit();curre ntMe nucurre ntMe nu->parent;curren tMe nu->
11、;selected=0;Dis playMe nu (curre ntMe nu->selected);elseMen uDis=O;/curre ntMe nu = MainMenu; curre ntMe nu->selected=O; LCDnit();AdUi();Delay_ms(100); else Clr_Scr();Delay_ms(50);/复位归零BaseAD0=ADResult0;BaseAD1=ADResult1;BaseAD2=ADResult2;BaseAD3=ADResult3;AdUi(); break; default: break;/用于显示采单
12、项void Dis pl ayMe nu(u8 line) / 显示菜单项并设置选中的项反白int i;line = 3-(curre ntMen u->ra nge_to-li ne);for(i = 0;i<4;i+)LCD_Write_Stri ng(i,O,curre ntMe nu->me nulte msi+curre ntMe nu->ra nge_from);WhiteLi nel nit();反白显示指定行White_Li ne(li ne,0,8);/ void fun c(void)uint8_t* s="为人民服务"LCD_W
13、rite_Stri ng(1,0,s);Delay_ms(3000); void Un itch1(void)Uni tCh=O;LCDni t();curre ntMe nu = curre ntMe nu->parent;curre ntMe nu->selected=O;Dis pl ayMe nu (curre ntMe nu->selected); void Un itch2(void)Uni tCh=1;LCD_I ni t();curre ntMe nu = curre ntMe nu->parent;curre ntMe nu->selected=
14、0;Dis pl ayMe nu (curre ntMe nu->selected); void Un itch3(void)Uni tCh=2;LCD_I ni t();curre ntMe nu = curre ntMe nu->parent;curre ntMe nu->selected=0;Dis pl ayMe nu (curre ntMe nu->selected); void Un itch4(void)LCD_I ni t();curre ntMe nu = curre ntMe nu->parent;curre ntMe nu->selec
15、ted=0;Dis pl ayMe nu (curre ntMe nu->selected); 单位:MM"void DiaCha nge(void) ui nt8_t* s="/测试代码u16 a=0;int i=0;/u16 tmp1;LCDni t();LCD_Wnte_Stri ng(O,O,s);zhiji ng=Cha nge(zhiji ng,title1);mianji=3.14*(zhiji ng/2)*(zhiji ng/2);EE_WriteVariable(VirtAddVarTab0, zhiji ng);/测试代码for(i=0;iv99;
16、i+)a=a+1;LCD_Write_Tn_Value(2,3,a);Delay_ms(50);/ void MlCha nge(void)uint8_t* s=" 单位:KN/MM2"LCD_I ni t();LCD_Write_Stri ng(0,0,s);molia ng=Cha nge(molia ng,title2);EE_WriteVariable(VirtAddVarTab1,molia ng);/数字按键循环,升到9后变0,降到0后变9, 参数pm为加减,1为+ , 0为减u16 NumLoo p(u16 num,u8 pm)if (pm=1)if (nu
17、m>=9)n um=0;elsenum=n um+1;elseif (nu m<=0) n um=9;elsenum=n um-1;return num;/Sval代表直径或模量的默认值,返回修改后 直径或模量的值u8 Cha nge(u8 Sval,ui nt8_t* title)u16 baiwei,shiwei,gewei,Dval;/数字ascii 码/char tmp val;/按键返回值u8 keyval=0;/光标位置3为百位、4为十位,5为个位u8 loc=3;中一位/是否选中其u8 clicked=0;/光标闪烁位,是否闪烁u8 flicker=0;baiwei=
18、(u16)(Sval/100);shiwei=(u16)(Sval%100)/10); gewei=(u16)(Sval%100)%10);/t mpval=(char)baiwei + 0x30; LCD_Write_Char(2,3,tm pval); t mpval=(char)shiwei + 0x30;LCD_Write_Char(2,4,tm pval); t mpval=(char)gewei + 0x30;LCD_Write_Char(2,5,tm pval);/LCD_Wnte_Si ngle_Num(2,3,baiwei);/LCD_Wnte_Si ngle_Num(2,4
19、,shiwei);LCD_Write_Si ngle_Num(2,5,gewei);LCD_Write_Tri_Value(2,3,Sval);WhiteLi nel nit();White_Li ne(2,3,1);/反白显示指定行while(1)keyval=KeySca n();switch(keyval)case 0:/什么都不if (clicked)if (flicker=0)White_Li ne(2,loc,1); flicker=1;else Shut_White_Li ne(2,loc,1); flicker=0;/else/White_Li ne(2,loc,1);Dela
20、y_ms(300); break;case 1:/ 向上if (clicked=0)if (loc>3) loc=loc-1;elseloc=3;WhiteLi nel nit();White_Li ne(2,loc,1);else switch (loc)case 3:baiwei=NumLoop(baiwei,1);LCD_I nit(); break;case 4:shiwei=NumLo op( shiwei,1);LCD_I nit(); break;case 5: gewei=NumLo op (gewei,1);LCDni t();break;default:break;
21、break;case 2:/ 向下if (clicked=0)if (loc<5) loc=loc+1;elseloc=5;WhiteLi nel nit();White_Li ne(2,loc,1); elseswitch (loc)case 3: baiwei=NumLo op (baiwei,0);LCDni t();break;case 4: shiwei=NumLo op (shiwei,0);LCD_I ni t();break;case 5:gewei=NumLo op (gewei,0);LCDni t();break;default:break;break;case 3
22、:/ 确认 if (clicked) clicked=0;elseclicked=1; break;case 4:/ 取消 if (clicked)clicked=0;else II返回主菜单LCDnit();curre ntMe nu = & Mai nMenu;curren tMe nu->selected=0;Dis playMe nu (curre ntMe nu->selected);/返回新的数值Dval=baiwei*100+shiwei*10+gewei; return Dval;break;default:break;IILCD_I ni t();LCD_
23、Write_Stri ng(0,0,title);Dval=baiwei*100+shiwei*10+gewei;LCD_Write_Tn_Value(2,3,Dval);Delay_ms(20);/初始化菜单:void Men ul nit(void)Mai nMen u.subMe nus=malloc(sizeof(&Mai nMe nu)*4);MainMenu.subMenus0= &UnitMenu;/ 第 1项没有子菜单置null,选择后程序会调用func 中相应项中的函数Mai nMen u.subMe nus1 = NULL;/ &DiaMe nu;直
24、接执行设置函数Mai nMen u.subMe nus2 = NULL;/&MIMe nu; 直 接执行设置函数Mai nMen u.subMe nus3 = NULL;MainMen u.f unc = malloc(sizeof(&fun c)*4);Mai nMen u.fu nc0 = &func;Mai nMe nu.fu nc1 = & DiaCha nge;MainMenu.func2= &MlChange;/ 当选择了并按了确定,会执行func函数Mai nMen u.fu nc3 = NULL;Mai nMen u. pare nt = NULL;/表示是顶级菜单Un itMe nu.subMe nus malloc(sizeof(&Un itMe nu)*4); Un itMe nu.subMe nusO = NULL; Uni tMe nu.subMe nus1 = NULL; Un itMe n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 疾病保险课件教学课件
- 2024年度影视版权许可协议
- 04年影视制作委托合同
- 2024年度办公楼照明系统灯具更换外包协议
- 2024年度“生态修复”工程咨询服务合同
- 制作课件教学课件
- 2024年广告发布与装修施工合同协议
- 2024在熔盛重工与淡水河谷砂石船建造合同签约仪式上的致辞熔盛重工朱文花
- 2024年度暖通设备安装及调试合同
- 2024土地使用权转让合同(含开发权)
- 黄河商品交易市场介绍稿
- Unit 3 My friends Part C Story time(教学设计)-2024-2025学年人教PEP版英语四年级上册
- 2024中国海油校园招聘2024人(高频重点提升专题训练)共500题附带答案详解
- 孙中山诞辰纪念日主题班会主题班会
- 2024年安徽省合肥市中考语文题卷(含答案)
- G -B- 43630-2023 塔式和机架式服务器能效限定值及能效等级(正式版)
- 24春国开电大《工具书与文献检索》平时作业1-4答案
- 文艺复兴经典名著选读 知到智慧树网课答案
- 2024年北京出版集团有限责任公司招聘笔试冲刺题(带答案解析)
- 2022-2023学年福建省厦门一中九年级(上)期中物理试卷
- 足球球性球感练习教案
评论
0/150
提交评论