📄 keyboard.lst
字号:
C51 COMPILER V8.02 KEYBOARD 12/10/2008 22:55:07 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE KEYBOARD
OBJECT MODULE PLACED IN keyboard.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE keyboard.c BROWSE DEBUG OBJECTEXTEND
line level source
1
2
3 #include "keyboard.h"
4
5 unsigned char key,key_old,key_new,key_pressed_time;
6
7 void scan_keyboard(void) //键盘扫描
8 {
9 1 if(key)return;
10 1 if((KEY_INPUT & KEY_PIN)==KEY_PIN) //按键释放
11 1 {
12 2 if(!key_old) //如果上次无按键按下
13 2 {
14 3 return; //返回
15 3 }
16 2 else //如果上次有按键按下
17 2 {
18 3 if(key_pressed_time>100) //按键时间超过一秒,长按键码
19 3 {
20 4 // key=key_old+0x80; //长按键码等于普通按键码加0x80
21 4 }
22 3 else if(key_pressed_time>1)
23 3 {
24 4 key=key_old; //按键值
25 4 }
26 3 key_old=0;
27 3 }
28 2 return;
29 2 }
30 1 else //按键按下
31 1 {
32 2 //savtime=CLOSETIME; //重新计算关闭LED时间
33 2 key_new=0;
34 2
35 2 if(START_KEY)key_new=KEY_START; //START键按下
36 2
37 2 if(MIN_KEY)key_new=KEY_MIN; //MIN键按下
38 2
39 2 if(SEC_KEY)key_new=KEY_SEC; //SEC键按下
40 2
41 2 if(RESET_KEY)key_new=KEY_RESET; //RESET键按下
42 2
43 2 if(key_new==key_old) //如果按键按下长于10ms
44 2 {
45 3 if(key_pressed_time>80) //如果按键按下超过1s
46 3 {
47 4 key_pressed_time-=5; //则自动按键。相当于每隔50ms按一次
48 4 key=key_new;
49 4 return;
50 4 }
51 3 else
52 3 {
53 4 key_pressed_time++; //按键按下计时加一
54 4 }
55 3 }
C51 COMPILER V8.02 KEYBOARD 12/10/2008 22:55:07 PAGE 2
56 2 else
57 2 {
58 3 key_pressed_time=0; //如果本次按下跟上次按下不一样,则按键按下时间清零
59 3 }
60 2 key_old=key_new; //保存本次按键值
61 2 }
62 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 97 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 ----
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 + -