📄 menu.lst
字号:
185 1 {
186 2 DisplayLenCount=ScreenHLine;
187 2 }
188 1 LCD_disp_CLS();
189 1
190 1 for (i=0;i<DisplayLenCount;i++)
191 1 {
192 2 if (i==Menu_State.FocusLine)
193 2 {
194 3 //光标所在行菜单项显示,可以自定义反白显示等
195 3 UpdatedisplayMenu_Focus(p->MenuTxt);
196 3 }
197 2 else
198 2 {
199 3 LCD_disp_printR(p->MenuTxt,MenuItemDisplayStartX,i+MenuItemDisplayStartY);
200 3 }
201 2 p++;
202 2 }
203 1
204 1
205 1
206 1
207 1 }
208
209 //按键处理函数
210 void UpdateMenuPanelkeyInner(unsigned char MenuKeyCode)
211 {
212 1 unsigned char i;
213 1 //父菜单堆栈临时元素
214 1 Menu_Statestruct tmpParent;
215 1
216 1 //菜单是否更新 1是 0否
217 1 MenuDisPlayUpdate=1;
218 1
219 1 switch (MenuKeyCode)
220 1 {
221 2
222 2 //一直按着向上键
223 2 case MenuKey_UpCon:
224 2
225 2 case MenuKey_Up:
226 2
227 2
228 2 if (Menu_State.FocusLine>0)
229 2 {
230 3 Menu_State.FocusLine--; //焦点在屏上是第几项
231 3 }
232 2 else
233 2 {
234 3 if (Menu_State.ItemStartDisplay>0)
235 3 {
236 4 Menu_State.ItemStartDisplay--;
237 4 }
238 3 else
239 3 {
240 4 Menu_State.ItemStartDisplay=MenuPanel[Menu_State.CurrentPanel].MenuItemCount-1;
241 4 }
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 5
242 3
243 3 }
244 2
245 2 break;
246 2
247 2 //一直按着向下键
248 2 case MenuKey_DownCon:
249 2 case MenuKey_Down:
250 2 if ((Menu_State.ItemStartDisplay+Menu_State.FocusLine)<MenuPanel[Menu_State.CurrentPanel].MenuItem
-Count-1)
251 2 {
252 3 if (Menu_State.FocusLine<ScreenHLine-1 )
253 3 {
254 4 Menu_State.FocusLine++; //焦点在屏上是第几项
255 4 }
256 3 else
257 3 {
258 4 Menu_State.ItemStartDisplay++; //显示第一项对应的菜单条目索引
259 4 }
260 3 }
261 2 else
262 2 {
263 3 Menu_State.FocusLine=0;
264 3 Menu_State.ItemStartDisplay=0;
265 3 }
266 2
267 2 break;
268 2 case MenuKey_Ok:
269 2
270 2 i=Menu_State.FocusLine+Menu_State.ItemStartDisplay;
271 2 if ((MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+i)->MenuChildID==MenuNoChild)
272 2 {
273 3 (*((MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+i)->CurrentOperate))();
274 3 }
275 2 else
276 2 {
277 3 if (StackFull()==0)
278 3 {
279 4 //父菜单显示在屏幕上的第一条条目
280 4 tmpParent.ItemStartDisplay=Menu_State.ItemStartDisplay;
281 4 //焦点在屏上是第几项
282 4 tmpParent.FocusLine=Menu_State.FocusLine;
283 4 //父菜单号
284 4 tmpParent.CurrentPanel=Menu_State.CurrentPanel;//本级菜单的菜单索引号
285 4 //入栈
286 4 StackPush(tmpParent);
287 4
288 4
289 4 Menu_State.CurrentPanel=(MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+i)->MenuChildID;//父
-菜单的菜单索引号
290 4 Menu_State.ItemStartDisplay=0; //显示第一项对应的菜单条目索引
291 4 Menu_State.FocusLine=0; //焦点在屏上是第几项
292 4
293 4 }
294 3 else
295 3 {
296 4 //菜单达到最大深度,栈满提示函数
297 4 StackFullErr();
298 4
299 4 }
300 3
301 3 };
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 6
302 2 break;
303 2 //一直按着返回键
304 2 case MenuKey_CancelCon:
305 2 case MenuKey_Cancel:
306 2 //测试栈是否空 1 是 0 否
307 2 if( StackEmpty()==0)
308 2 {
309 3 tmpParent=StackPOP();
310 3 Menu_State.CurrentPanel=tmpParent.CurrentPanel;
311 3 Menu_State.ItemStartDisplay=tmpParent.ItemStartDisplay; //显示第一项对应的菜单条目索引
312 3 Menu_State.FocusLine=tmpParent.FocusLine; //焦点在屏上是第几项
313 3
314 3 }
315 2 else
316 2 {
317 3 //菜单已经到最顶了,栈空提示函数
318 3 StackEmptyErr();
319 3
320 3 }
321 2
322 2 break;
323 2
324 2 default:
325 2 //菜单是否更新 1是 0否
326 2 MenuDisPlayUpdate=0;
327 2 break;
328 2
329 2 }
330 1 }
331
332 void UpdateMenuPanelkey(unsigned char MenuKeyCode)
333 {
334 1 if (MenuKeyCode==MenuKey_Null)
335 1 {
336 2 return;
337 2 }
338 1 //弄这两个函数并列目的是减小RAM使用
339 1 UpdateMenuPanelkeyInner(MenuKeyCode);//更新按键
340 1 //菜单是否更新 1是 0否
341 1 if (MenuDisPlayUpdate==1)
342 1 {
343 2 UpdatedisplayMenuPanel();//更新菜单显示
344 2 }
345 1
346 1 }
347
348
349 void init_Menu()
350 {
351 1 //菜单栈初始化
352 1 StackINI();
353 1
354 1 Menu_State.CurrentPanel=0;//本级菜单的菜单索引号
355 1 Menu_State.ItemStartDisplay=0; //显示第一项对应的菜单条目索引
356 1 Menu_State.FocusLine=1; //焦点在屏上是第几项
357 1 UpdatedisplayMenuPanel();//更新菜单
358 1 }
359
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 717 ----
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 7
CONSTANT SIZE = 472 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 15
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -