📄 menu.lst
字号:
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN Menu.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Menu.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /*
2 名称:GXD LCD多层菜单 v1.2
3 作者:中国传惠 TranSmart gongxd@126.com
4
5 特点:
6 可以在液晶LCM上显示最大254层深度的菜单,可以非常方便的使用和移植。
7 字符型显示适用于St7920控制芯片。
8 图像显示适用于st7656控制芯片,不带字库要自己实现汉字字符显示
9 在图像模式下支持焦点菜单反白,
10 焦点菜单反白流程是:
11 1.调用 LCD_disp_SetReverse(1),打开液晶反白显示,以后的输出都是反白显示
12 2.输出焦点菜单内容
13 3.调用 LCD_disp_SetReverse(0),关闭液晶反白显示,以后的输出都是正常显示
14 可以根据此流程,在各种控制芯片上实现反白显示。
15
16
17 历史:
18 2009-9-22 添加在图形模式下焦点行反白的功能
19 2009-8-2 添加N层菜单功能,修改屏幕参数定义
20 2009-3-4 初始版本
21
22 编译环境:
23
24 IDE-Version:
25 uVision3 V3.33
26 Copyright (c) Keil Elektronik GmbH / Keil Software, Inc 2006
27
28 Tool Version Numbers:
29 工具链路径:C:\Keil\C51\BIN\
30 C Compiler: C51.Exe V8.05a
31 Assembler: A51.Exe
32 Linker/Locator: BL51.Exe V6.00
33 Librarian: LIB51.Exe V4.24
34 Hex Converter: OH51.Exe V2.6
35 CPU DLL: S8051.DLL V3.06
36 Dialog DLL: DP51.DLL V2.48b
37 Target DLL: C:\KEIL\VW_C.DLL
38 Dialog DLL: TP51.DLL V2.48b
39
40 版权声明:
41 义务:
42 1.如果您在使用中发现任何BUG,请通知gongxd@126.com,我会及时改正,并给您一份最新的代码
43 2.请保留本声明
44
45 权利:
46 如果您同意履行上面的义务,您就可以完全免费将代码应用于任何商业非商业用途
47 但本代码版权归中国传惠gongxd@126.com 所有,否则严禁使用本代码
48
49 建议:
50 如果您作了什么改进希望能通知gongxd@126.com,最好能共享一下,
51 我也会给您一份 最新 的代码,共同进步嘛
52
53 后话:大家都不容易,如果您觉得这东西有点用,就尽情传播吧
54 */
55
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 2
56 #include "menu.h"
57 #include "menu_res.h"
58
59 //菜单是否更新 1是 0否
60 unsigned char MenuDisPlayUpdate;
61
62
63 //所有菜单板的个数
64 #define MenuAllCount sizeof(MenuPanel)/sizeof(MenuPanelStruct)
65 Menu_Statestruct Menu_State;//菜单状态定义
66
67
68 //=================================================================================栈函数
69
70 //栈大小,菜单深度
71 #define StackSize MenuDeep
72
73 //声明堆栈元素类型
74 typedef Menu_Statestruct StackElementType;
75 //栈元素数组声明
76 StackElementType MenuParentStack[StackSize];
77
78 //栈顶
79 unsigned char StackTOP;
80
81 //栈初始化
82 void StackINI()
83 {
84 1 StackTOP=0;
85 1 }
86 //测试栈是否空 1 是 0 否
87 unsigned char StackEmpty()
88 {
89 1 return StackTOP==0;
90 1 }
91 //测试栈是否满 1 是 0 否
92 unsigned char StackFull()
93 {
94 1 return StackTOP==StackSize;
95 1 }
96
97 //出栈
98 StackElementType StackPOP()
99 {
100 1 if (StackTOP==0)
101 1 {
102 2 return MenuParentStack[0];
103 2 }
104 1 StackTOP--;
105 1 return MenuParentStack[StackTOP];
106 1 }
107
108 //入栈
109 void StackPush(StackElementType INElement)
110 {
111 1 if (StackTOP==StackSize)
112 1 {
113 2 return;
114 2 }
115 1 MenuParentStack[StackTOP]=INElement;
116 1 StackTOP++;
117 1 }
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 3
118
119 //=================================================================================菜单函数
120 //已经到最顶了
121 void StackEmptyErr()
122 {
123 1 unsigned char code MenuTopErrMsg[]=
124 1 {"已经到最顶了"};
125 1 LCD_disp_CLS();
126 1 LCD_disp_printR(MenuTopErrMsg,1,1);
127 1 delayms(300);
128 1 LCD_disp_CLS();
129 1 //显示主菜单
130 1 Menu_State.CurrentPanel=0;//本级菜单的菜单索引号
131 1 Menu_State.ItemStartDisplay=0; //显示第一项对应的菜单条目索引
132 1 Menu_State.FocusLine=1; //焦点在屏上是第几项
133 1 }
134
135 //菜单达到最大深度,栈满提示函数
136 void StackFullErr()
137 {
138 1 unsigned char code MenuTopErrMsg[]=
139 1 {"菜单栈满无法继续"};
140 1 LCD_disp_CLS();
141 1 LCD_disp_printR(MenuTopErrMsg,0,1);
142 1 delayms(300);
143 1 LCD_disp_CLS();
144 1 }
145
146 //默认菜单处理函数
147 void voidNull()
148 {
149 1 }
150
151 //光标所在行菜单项显示
152 void UpdatedisplayMenu_Focus(unsigned char *MenuTxttmp)
153 {
154 1 #if FocusReverse==1
155 1 //图像反色显示 0 否 1是,执行此命令后的所有操作均是按照设置显示
156 1 LCD_disp_SetReverse(1);
157 1 #endif
158 1 //显示菜单项
159 1 LCD_disp_printR(MenuTxttmp,MenuItemDisplayStartX,Menu_State.FocusLine+MenuItemDisplayStartY);
160 1
161 1 //是否显示每行菜单前的指示 0 否 1是 ,推荐字符液晶使用,图形液晶用反白
162 1 #if FocusPointDisply==1
//显示前面的指针
LCD_setpos(MenuPointX,Menu_State.FocusLine+MenuItemDisplayStartY);
LCD_disp_Putchar(MenuPointASCII);
#endif
167 1
168 1 #if FocusReverse==1
169 1 //图像反色显示 0 否 1是,执行此命令后的所有操作均是按照设置显示
170 1 LCD_disp_SetReverse(0);
171 1 #endif
172 1
173 1
174 1 }
175
176 //菜单显示更新函数
177 void UpdatedisplayMenuPanel()
178 {
179 1 unsigned char i,DisplayLenCount;
C51 COMPILER V8.05a MENU 09/22/2009 20:36:58 PAGE 4
180 1
181 1 MenuItemStruct *p;
182 1 p=MenuPanel[Menu_State.CurrentPanel].MenuPanelItem+Menu_State.ItemStartDisplay;
183 1 DisplayLenCount=MenuPanel[Menu_State.CurrentPanel].MenuItemCount-Menu_State.ItemStartDisplay ;
184 1 if (DisplayLenCount>ScreenHLine)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -