📄 key.lst
字号:
KEY_iMENU = 1;
KEY_iSELECT = 1;
KEY_iUP = 1;
KEY_iDOWN = 1;
#else
#error KEY.C - Invalid PLATFORM_CFG !
#endif /* PROJECT */
234 1
235 1
236 1
237 1 #if (KEY_AUTO_REPEAT)
238 1 bTimerKeyAuto = 0; /* For key auto repeat feature */
239 1 #endif // KEY_AUTO_REPEAT
240 1
C51 COMPILER V7.50 KEY 02/05/2007 16:33:25 PAGE 5
241 1 #if (KEY_STILL_DETECTION)
242 1 // Pressed key duration !
243 1 bKEY_STILL_INTERVAL = KEY_STILL_INTERVAL;
244 1 bTimerKeyPressed = bKEY_STILL_INTERVAL;
245 1 #endif
246 1
247 1 KEY_BufferFlush();
248 1
249 1 fKeyReleased = TRUE;
250 1
251 1 bKeyScanState = KEY_STATE_UP;
252 1
253 1 #if (KEY_VR_AIN21)
bKEY_VR_ADJUSTMENT = KEY_VR_DEFAULT;
#endif
256 1
257 1 } /* KEY_Init */
258
259
260 /* -------------------------------------------------------------------
261 Name: KEY_Pressed - To check whether any keys are pressed.
262 Purpose: .
263 Passed: None.
264 Returns:
265 FALSE if no key pressed.
266 Notes:
267 ------------------------------------------------------------------- */
268 BOOL KEY_Pressed (void)
269 {
270 1 return( (KEY_IOPORT & KEY_MASK) != KEY_MASK );
271 1 } /* KEY_Pressed */
272
273
274 /* -------------------------------------------------------------------
275 Name: KEY_Scan -
276 Purpose: To scan the keypad periodically.
277 Passed: None.
278 Returns: None.
279 Notes:
280 1) THIS ONE IS USUALLY CALLED FROM TIMER ISR ONLY
281 2) Local variables are allowed if it is NOT called by other ISRs
282 or code !
283 3) The duration is at least 30ms between each call of this scan
284 function for avoiding de-bounce failure.
285
286 ------------------------------------------------------------------- */
287 void KEY_Scan (void)
288 {
289 1 #if (KEY_AUTO_REPEAT)
290 1 if (bTimerKeyAuto)
291 1 bTimerKeyAuto--;
292 1 #endif // KEY_AUTO_REPEAT
293 1
294 1 if (bTimerKeyPressed)
295 1 bTimerKeyPressed--;
296 1
297 1 #if (KEY_STILL_DETECTION)
298 1 if (bTimerKeyPressed == 1)
299 1 {
300 2 KEY_BufferFlush();
301 2 KEY_BufferIn(bLastKey | KEY_MASK_STILL);
302 2
C51 COMPILER V7.50 KEY 02/05/2007 16:33:25 PAGE 6
303 2 #if (NO_RELEASE_AFTER_STILL)
304 2 fKeyNO_STILL = FALSE;
305 2 #endif
306 2 }
307 1 #endif // KEY_STILL_DETECTION
308 1
309 1
310 1 switch (bKeyScanState)
311 1 {
312 2 case KEY_STATE_UP:
313 2 if (KEY_Pressed())
314 2 {
315 3 bKeyScanState = KEY_STATE_DEBOUNCE;
316 3
317 3 #if (NO_RELEASE_AFTER_STILL)
318 3 fKeyNO_STILL = TRUE;
319 3 #endif
320 3 }
321 2 #if (KEY_STILL_DETECTION)
322 2 else
323 2 {
324 3 bTimerKeyPressed = 0;
325 3 fKeyReleased = TRUE;
326 3 }
327 2 #endif // KEY_STILL_DETECTION
328 2 break;
329 2
330 2
331 2 case KEY_STATE_DEBOUNCE:
332 2 if (KEY_Pressed())
333 2 {
334 3 KEY_BufferIn(KEY_Decode());
335 3
336 3 #if (KEY_AUTO_REPEAT)
337 3 bTimerKeyAuto = KEY_REPEAT_START_DELAY;
338 3 #endif // KEY_AUTO_REPEAT
339 3
340 3 bLastKey = KEY_Decode();
341 3
342 3 #if (KEY_STILL_DETECTION)
343 3 if (bLastKey == KEY_POWER)
344 3 bTimerKeyPressed = bKEY_STILL_INTERVAL;
345 3 #endif // KEY_STILL_DETECTION
346 3
347 3 bKeyScanState = KEY_STATE_REPEAT_START_DELAY;
348 3 }
349 2 else
350 2 {
351 3 bTimerKeyPressed = 0;
352 3 fKeyReleased = TRUE;
353 3
354 3 bKeyScanState = KEY_STATE_UP;
355 3 }
356 2 break;
357 2
358 2
359 2 case KEY_STATE_REPEAT_START_DELAY:
360 2 if (KEY_Pressed())
361 2 {
362 3 #if (KEY_AUTO_REPEAT)
363 3 if (bTimerKeyAuto == 0)
364 3 {
C51 COMPILER V7.50 KEY 02/05/2007 16:33:25 PAGE 7
365 4 KEY_BufferIn(KEY_Decode());
366 4
367 4 bTimerKeyAuto = KEY_REPEAT_INTERVAL;
368 4
369 4 bKeyScanState = KEY_STATE_REPEAT_DELAY;
370 4 } /* if */
371 3 #endif // KEY_AUTO_REPEAT
372 3 }
373 2 else
374 2 {
375 3 #if (NO_RELEASE_AFTER_STILL)
376 3 if (fKeyNO_STILL)
377 3 #endif
378 3 {
379 4 KEY_BufferFlush();
380 4 KEY_BufferIn(bLastKey | KEY_MASK_RELEASE);
381 4 }
382 3
383 3 bTimerKeyPressed = 0;
384 3 fKeyReleased = TRUE;
385 3
386 3 bKeyScanState = KEY_STATE_DEBOUNCE;
387 3 } /* if */
388 2 break;
389 2
390 2
391 2 #if (KEY_AUTO_REPEAT)
392 2 case KEY_STATE_REPEAT_DELAY:
393 2 if (KEY_Pressed())
394 2 {
395 3 if (bTimerKeyAuto == 0)
396 3 {
397 4 KEY_BufferIn(KEY_Decode());
398 4
399 4 bTimerKeyAuto = KEY_REPEAT_INTERVAL;
400 4 } /* if */
401 3 }
402 2 else
403 2 {
404 3 #if (NO_RELEASE_AFTER_STILL)
405 3 if (fKeyNO_STILL)
406 3 #endif
407 3 {
408 4 KEY_BufferFlush();
409 4 KEY_BufferIn(bLastKey | KEY_MASK_RELEASE);
410 4 }
411 3
412 3 bTimerKeyPressed = 0;
413 3 fKeyReleased = TRUE;
414 3
415 3 bKeyScanState = KEY_STATE_DEBOUNCE;
416 3 }
417 2 break;
418 2 #endif // KEY_AUTO_REPEAT
419 2
420 2 default :
421 2 break;
422 2 } /* switch */
423 1 } /* KEY_Scan */
424
425
426 /* -------------------------------------------------------------------
C51 COMPILER V7.50 KEY 02/05/2007 16:33:25 PAGE 8
427 Name: -
428 Purpose: .
429 Passed: None.
430 Returns: None.
431 Notes:
432 ------------------------------------------------------------------- */
433
434 /* **********************************************************************
435
436 Description:
437
438
439 ********************************************************************** */
440
441 /* %% End Of File %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 303 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 12 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -