📄 menu.lst
字号:
C51 COMPILER V7.09 MENU 09/17/2008 16:36:38 PAGE 1
C51 COMPILER V7.09, COMPILATION OF MODULE MENU
OBJECT MODULE PLACED IN .\output\menu.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE menu\menu.c LARGE BROWSE INCDIR(audio\;eeprom\;extendUART\;flash\;gps\;inte
-r\;key\;mcu\;menu\;usb\;gprs\;main\;1wire\) DEBUG OBJECTEXTEND PRINT(.\output\menu.lst) OBJECT(.\output\menu.obj)
line level source
1 #include "typedef.h"
2 #include "global.h"
3 #include "menu.h"
4 #include "menuinterface.h"
5 #include "playsound.h"
6
7 /************************MenuProcess()函数的说明*****************************/
8 /*****MenuProcess()为菜单处理程序,main()函数中每隔一段时间对它进行调用,
9 由每个菜单的处理程序pMenu->function获取按键值,处理程序的返回值为
10 CHANGE_MENU, NEXT_MENU, PREVIEW_MENU, LEFT_MENU,RIGHT_MENU,
11 MenuProcess()根据这些返回值来管理菜单,作出相应的操作*****************/
12
13 /*******************************************
14 pMenu->function返回值为CHANGE_MENU时,结构指针仍然指向自己,MenuProcess不操作
15 pMenu->function返回值为NEXT_MENU时,NowMenuPtr指向son,处理下级菜单
16 pMenu->function返回值为PREVIEW_MENU时,NowMenuPtr指向father,处理上级菜单
17 pMenu->function返回值为RIGHT_MENU时,NowMenuPtr--,处理同级右菜单
18 pMenu->function返回值为LEFT_MENU时,NowMenuPtr++,处理同级左菜单
19 **********************************************/
20
21 static MENU *pMenu; /*当前菜单指针*/
22 MENU_INFO menuInfo;
23
24 void meunInit(MENU *pInitMenu, int holdTime, void *funcScroll, void *funcBackLight)
25 {
26 1
27 1 menuInfo.floorCnt = 0;
28 1 pMenu = pInitMenu;
29 1 menuInfo.Father[0] = pInitMenu;
30 1
31 1 menuInfo.holdTime = holdTime;
32 1 menuInfo.returnTimer = 0;
33 1
34 1 menuInfo.ptrScroll = funcScroll;
35 1 menuInfo.ptrBackLight = funcBackLight;
36 1
37 1 (pMenu->function)(1);
38 1
39 1 menuInfo.rebrushLcd = FLASH_SCREEN;
40 1 menuInfo.MenuPopReturnFlag = 1;
41 1 }
42
43 MENU *menu_select(MENU *menuPtr, unsigned char index)
44 {
45 1 MENU *pTmp;
46 1 unsigned char i;
47 1
48 1 if( menuPtr == NULL )
49 1 return menuPtr;
50 1
51 1 pTmp = menuPtr;
52 1 menuInfo.rebrushLcd = FLASH_SCREEN;
53 1 while(pTmp->function != NULL)
54 1 {
C51 COMPILER V7.09 MENU 09/17/2008 16:36:38 PAGE 2
55 2 pTmp --;
56 2 }
57 1
58 1 for(i=0; i<index; i++)
59 1 {
60 2 pTmp ++;
61 2 if( pTmp->function == NULL )
62 2 break;
63 2 }
64 1
65 1 if( pTmp->function == NULL )
66 1 return menuPtr;
67 1 else
68 1 return pTmp;
69 1 }
70
71 /*主程序调用的菜单处理指针*/
72 void MenuProcess(void)
73 {
74 1 char status;
75 1 MENU *pTmp;
76 1
77 1 /*指针出错时,显示错误信息*/
78 1 if( pMenu->function == NULL )
79 1 {
80 2 return; /*xhb pMenu = menu_null;*/
81 2 }
82 1
83 1 /*显示滚动条*/
84 1 if( (menuInfo.rebrushLcd == FLASH_SCREEN) && (menuInfo.ptrScroll != NULL) )
85 1 {
86 2 pTmp = pMenu - 1;
87 2 if( (pTmp->function==NULL) || (pMenu->son==NULL) )
88 2 menuInfo.ptrScroll(0);
89 2 else
90 2 menuInfo.ptrScroll(1); /*向上标记*/
91 2
92 2 pTmp = pMenu + 1;
93 2 if( (pTmp->function==NULL) || (pMenu->son==NULL) )
94 2 menuInfo.ptrScroll(0);
95 2 else
96 2 menuInfo.ptrScroll(2); /*向下标记*/
97 2 }
98 1
99 1 /*按键菜单显示函数*/
100 1 status = (pMenu->function)(menuInfo.rebrushLcd); /*执行菜单,返回按键值*/
101 1
102 1 /*菜单层之间切换*/
103 1 switch(status)
104 1 {
105 2 case NOKEY_MENU:
106 2 default:
107 2 menuInfo.rebrushLcd = KEEP_SCREEN;
108 2
109 2 menuInfo.returnTimer ++;
110 2 //背光处理
111 2 if (menuInfo.returnTimer >= 200)
112 2 menuInfo.ptrBackLight(0);
113 2 if( menuInfo.returnTimer >= menuInfo.holdTime )
114 2 {
115 3 menuInfo.returnTimer = 0;
116 3 // menuInfo.ptrBackLight(0);
C51 COMPILER V7.09 MENU 09/17/2008 16:36:38 PAGE 3
117 3
118 3 if (0 == menuInfo.floorCnt)
119 3 // pMenu = menuInfo.Father[0];
120 3 menuInfo.rebrushLcd = FLASH_SCREEN;
121 3 }
122 2 break;
123 2
124 2 case NOCHANGE_MENU:/*无操作*/
125 2 /* if( menuInfo.floorCnt == 0 )
126 2 {
127 2 menuInfo.returnTimer ++;
128 2 if( menuInfo.returnTimer >= menuInfo.holdTime )
129 2 {
130 2 menuInfo.returnTimer = 0;
131 2 menuInfo.ptrBackLight(0);
132 2 }
133 2 }
134 2 else
135 2 menuInfo.returnTimer = 0;*/
136 2 menuInfo.ptrBackLight(1);
137 2 menuInfo.returnTimer = 0;
138 2
139 2 menuInfo.rebrushLcd = KEEP_SCREEN;
140 2 // tts("msga", 4);//原有的按键音
141 2 play_littlespeaker(LITTLESPEAKER_KEY);
142 2 break;
143 2
144 2 case NEXT_MENU:/*enter*/
145 2 case NEXT_MENU1:/*enter*/
146 2 case NEXT_MENU2:/*enter*/
147 2 case NEXT_MENU3:/*enter*/
148 2 case NEXT_MENU4:/*enter*/
149 2 menuInfo.returnTimer = 0;
150 2
151 2 /*背光控制程序*/
152 2 if( menuInfo.ptrBackLight != NULL )
153 2 {
154 3 menuInfo.ptrBackLight(1);
155 3 }
156 2
157 2
158 2 if(pMenu->son != NULL)
159 2 {
160 3 menuInfo.Father[menuInfo.floorCnt] = pMenu;
161 3 menuInfo.floorCnt ++;
162 3
163 3 if( status == NEXT_MENU2 )
164 3 pMenu = menu_select(pMenu->son, 2);
165 3 else if( status == NEXT_MENU3 )
166 3 pMenu = menu_select(pMenu->son, 3);
167 3 else if( status == NEXT_MENU4 )
168 3 pMenu = menu_select(pMenu->son, 4);
169 3 else
170 3 pMenu = menu_select(pMenu->son, 1);
171 3
172 3 menuInfo.rebrushLcd = FLASH_SCREEN;
173 3 }
174 2 // tts("msga", 4);//原有的按键音
175 2 play_littlespeaker(LITTLESPEAKER_KEY);
176 2 break;
177 2
178 2
C51 COMPILER V7.09 MENU 09/17/2008 16:36:38 PAGE 4
179 2 case PREVIEW_MENU:/*esc*/
180 2 menuInfo.returnTimer = 0;
181 2
182 2 /*背光控制程序*/
183 2 if( menuInfo.ptrBackLight != NULL )
184 2 {
185 3 menuInfo.ptrBackLight(1);
186 3 }
187 2
188 2 if( menuInfo.floorCnt > 0 )
189 2 {
190 3 menuInfo.floorCnt --;
191 3 pMenu = menuInfo.Father[menuInfo.floorCnt];
192 3 menuInfo.MenuPopReturnFlag = 1;
193 3 menuInfo.rebrushLcd = FLASH_SCREEN;
194 3 }
195 2 // tts("msga", 4);//原有的按键音
196 2 play_littlespeaker(LITTLESPEAKER_KEY);
197 2 break;
198 2
199 2 case LEFT_MENU:/*left/up*/
200 2 menuInfo.returnTimer = 0;
201 2
202 2 /*背光控制程序*/
203 2 if( menuInfo.ptrBackLight != NULL )
204 2 {
205 3 menuInfo.ptrBackLight(1);
206 3 }
207 2
208 2 pTmp = pMenu - 1;
209 2 if(pTmp->function != NULL)
210 2 {
211 3 pMenu = pTmp;
212 3 menuInfo.rebrushLcd = FLASH_SCREEN;
213 3 }
214 2 // tts("msga", 4);//原有的按键音
215 2 play_littlespeaker(LITTLESPEAKER_KEY);
216 2 break;
217 2
218 2 case RIGHT_MENU:/*right/down*/
219 2 menuInfo.returnTimer = 0;
220 2
221 2 /*背光控制程序*/
222 2 if( menuInfo.ptrBackLight != NULL )
223 2 {
224 3 menuInfo.ptrBackLight(1);
225 3 }
226 2
227 2 pTmp = pMenu + 1;
228 2 if(pTmp->function != NULL)
229 2 {
230 3 pMenu = pTmp;
231 3 menuInfo.rebrushLcd = FLASH_SCREEN;
232 3 }
233 2 // tts("msga", 4);//原有的按键音
234 2 play_littlespeaker(LITTLESPEAKER_KEY);
235 2 break;
236 2 }
237 1 }
238
239 /*弹出菜单程序处理*/
240 void menuPopUp(MENU *pMenuPop)
C51 COMPILER V7.09 MENU 09/17/2008 16:36:38 PAGE 5
241 {
242 1 if( menuInfo.MenuPopReturnFlag == 1 )
243 1 {
244 2 openLight();
245 2 menuInfo.Father[menuInfo.floorCnt] = pMenu;
246 2 menuInfo.floorCnt++;
247 2
248 2 pMenu = pMenuPop;
249 2 menuInfo.MenuPopReturnFlag = 0;
250 2
251 2 (pMenu->function)(1);
252 2 }
253 1 }
254
255
256 /********************************************
257 *背光打开函数,在收到自动报站的时候被调用
258 *********************************************/
259 void openLight()
260 {
261 1 menuInfo.returnTimer = 0;
262 1
263 1 /*背光控制程序*/
264 1 if( menuInfo.ptrBackLight != NULL )
265 1 {
266 2 menuInfo.ptrBackLight(1);
267 2 }
268 1 }
269
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1385 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 46 24
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
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 + -