📄 key.lst
字号:
208 /******************************************************************************************************/
209
210 /*设置主菜单状态寄存器, 1进入设置标志*/
211 unsigned char g_SET = 0;
212 /*子功能选项*/
213 unsigned char g_subset = 0;
214 /*定义数据指针*/
215 unsigned char *pF; /*头*/
216 unsigned char Led_i;
217 /*闹铃点计数器*/
218 unsigned char RingCnt;
219
220 /*---------------------------------------------------------*-
221 * 函数名称: KeyProcess()
222 * 参 数:
223 * 返 回:
224 * 函数功能: 键值处理
225 *
226 * 说 明:
227 *
228 * 当前版本: V1.0 * 取代版本:
229 * 作 者: wsl * 修 改:
230 * 版本信息: 2006-12-16 * 修改信息:
231 -*---------------------------------------------------------*/
232 void KeyProcess(void)
233 {
234 1 // 若无按键请求则返回
235 1 if ( Flag_keyprocess )
236 1 {
237 2 Flag_keyprocess = 0; // 清按键有效标志
238 2 // 是引导键
239 2 switch ( keybuffer[1] )
240 2 {
241 3 case 0:
C51 COMPILER V8.08 KEY 10/02/2007 07:17:26 PAGE 5
242 3 // 是功能键
243 3 switch ( keybuffer[0] )
244 3 {
245 4 case K_Up:
246 4 switch (g_SET)
247 4 {
248 5 case 0: CloseBuzzer(); break;
249 5 case 1:
250 5 g_subset++;
251 5 if (g_subset > 9) {g_subset = 0;}
252 5 Main_MENU_interface(g_subset);
253 5 break;
254 5 /***************/
255 5 case 2:
256 5 case 3:
257 5 *(pF+Led_i) = *(pF+Led_i)+1; /*指针指向的变量加1*/
258 5 if (Led_i == 0) { if (*(pF+Led_i) > 2) {*(pF+Led_i) = 0;} }
259 5 else if(Led_i == 2) { if (*(pF+Led_i) > 5) {*(pF+Led_i) = 0;} }
260 5 else { if (*(pF+Led_i) > 9) {*(pF+Led_i) = 0;} }
261 5
262 5 if (*pF == 2) {if (*(pF+1) > 3) {*(pF+1) = 0;}}
263 5 break;
264 5 /*******************/
265 5
266 5 default: break;
267 5 }
268 4 break;
269 4
270 4 case K_LoopRight:
271 4 switch (g_SET)
272 4 {
273 5 case 0: CloseBuzzer(); break;
274 5 case 2:
275 5 case 3:
276 5 Led_i++;
277 5 Flag &= 0x0f;
278 5 if (Led_i>3) {Led_i = 0;}
279 5 SETBIT(Flag, Led_i+4);
280 5 break;
281 5
282 5 default: break;
283 5 }
284 4
285 4 break;
286 4 case K_Enter:
287 4 switch (g_SET)
288 4 {
289 5 case 0: CloseBuzzer(); break;
290 5 case 1:
291 5 switch (g_subset)
292 5 { /*进入时钟设置板面*/
293 6 case 0:
294 6 /*进入系统设置板面*/
295 6 Led_i = 0;
296 6 DATA_Amend(now.hour, now.min, Led_i);
297 6 pF = &dispbuf[0]; /*指向显示缓冲区首地址*/
298 6 g_SET = 2;
299 6 break;
300 6 /*进入闹铃设置板面*/
301 6 case 1:
302 6 /*进入闹铃系统设置板面*/
303 6 Led_i = 0;
C51 COMPILER V8.08 KEY 10/02/2007 07:17:26 PAGE 6
304 6 RingCnt = 0;
305 6 DATA_Amend(Ring[RingCnt].hour, Ring[RingCnt].min, Led_i);
306 6 /*如果RingIDRegister某位为1,说明该点闹铃声已设置*/
307 6 if (GETBIT(BackupRingID, RingCnt))
308 6 { /*点亮最后一位的小数点表示该点闹铃声已设置*/
309 7 Dlink4 = 1;
310 7 }
311 6 else
312 6 {
313 7 Dlink4 = 0;
314 7 }
315 6
316 6 pF = &dispbuf[0]; /*指向显示缓冲区首地址*/
317 6 g_SET = 3;
318 6 break;
319 6 default: break;
320 6 }
321 5 break;
322 5 /***************************/
323 5 case 2: /*保存时间修改设置*/
324 5 now.sec = 0x00;
325 5 now.min = dispbuf[2]*10 + dispbuf[3];
326 5 now.hour = dispbuf[0]*10 + dispbuf[1];
327 5 g_UpdataFlagEn = 1; /*数码显示缓冲区更新*/
328 5 g_SET = 0; /*清设置标志*/
329 5 g_subset = 0;
330 5 RTC_interface();
331 5 break;
332 5 /*********************************/
333 5 case 3: /*读闹铃*/
334 5 RingCnt++;
335 5 if (RingCnt>8-1) {RingCnt = 0;} /*C语言变量从0开始计数,而闹铃点只有8个*/
336 5 Led_i = 0; /*数码管闪烁从时的首位开始*/
337 5 DATA_Amend(Ring[RingCnt].hour, Ring[RingCnt].min, Led_i);
338 5 /*如果RingIDRegister某位为1,说明该点闹铃声已设置*/
339 5 if (GETBIT(BackupRingID, RingCnt))
340 5 { /*点亮最后一位的小数点表示该点闹铃声已设置*/
341 6 Dlink4 = 1;
342 6 }
343 5 else
344 5 {
345 6 Dlink4 = 0;
346 6 }
347 5 pF = &dispbuf[0]; /*指向显示缓冲区首地址*/
348 5 break;
349 5 /*********************************/
350 5 default: break;
351 5 }
352 4 break;
353 4 default: break;
354 4 }
355 3 break;
356 3
357 3 case K_Shift:
358 3
359 3 if ( keybuffer[0] == K_Up )
360 3 {
361 4 /*退出设置板面且不保存已修改的数据*/
362 4 RTC_interface();
363 4 g_UpdataFlagEn = 1; /*数码显示缓冲区更新*/
364 4 g_SET = 0; /*清设置标志*/
365 4 g_subset = 0;
C51 COMPILER V8.08 KEY 10/02/2007 07:17:26 PAGE 7
366 4 }
367 3 // 是复合键
368 3 if (keybuffer[0] == K_Enter)
369 3 {
370 4 switch (g_SET)
371 4 {
372 5 case 0:
373 5 g_SET = 1; /*置位设置标志*/
374 5 g_UpdataFlagEn = 0; /*数码显示缓冲区不更新*/
375 5 g_subset = 0;
376 5 /*进入系统设置板面*/
377 5 Main_MENU_interface(g_subset);
378 5 break;
379 5 case 3:
380 5 /*保存闹铃修改设置*/
381 5 dispbuf[0] = (dispbuf[0]<<4) + dispbuf[1];
382 5 dispbuf[2] = (dispbuf[2]<<4) + dispbuf[3];
383 5 SetRing(dispbuf[0] , dispbuf[2], RingCnt);
384 5 dispbuf[0] = dispbuf[0]>>4;
385 5 dispbuf[2] = dispbuf[2]>>4;
386 5 g_UpdataFlagEn = 1; /*数码显示缓冲区更新*/
387 5 g_SET = 0; /*清设置标志*/
388 5 g_subset = 0;
389 5 RTC_interface();
390 5
391 5 break;
392 5 default : break;
393 5 }
394 4
395 4 }
396 3 break;
397 3
398 3 default: break;
399 3
400 3 }
401 2
402 2 }
403 1 // 置位按键任务完成标志
404 1 Flag_keydone = 1;
405 1 }
406 /*********************************************************************************************************
-********/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 841 ----
CONSTANT SIZE = 4 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 4
IDATA SIZE = ---- ----
BIT SIZE = 5 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -