📄 key.lst
字号:
C51 COMPILER V7.50 KEY 05/11/2009 22:41:49 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN Key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include "config.h"
2
3 #define KEY_ON 0
4 #define KEY_OFF 1
5
6 #define KEY1 (1<<0)
7 #define KEY2 (1<<1)
8 #define KEY3 (1<<2)
9
10 #define NOKEY (~(KEY1|KEY2|KEY3))
11
12 uint8 KeyCode; //按键码,确认按下以后赋值
13 uint8 KeyStatus; //按键扫描状态机变量
14 uint8 KeyDone; //的确有键按下标志位,1为有键
15
16 uint8 KeyDownTime; //按下计时
17 uint8 KeyReleaseTime; //释放计时
18
19 void KeyScan(void);
20 void KeyProcess(void);
21
22 void KeyInit(void);
23
24
25
26 void KeyInit(void)
27 {
28 1 KeyCode = 0;
29 1 KeyStatus = 0;
30 1 KeyDone = 0;
31 1 KeyDownTime = 0;
32 1 KeyReleaseTime = 0;
33 1 }
34
35 void KeyScan(void)
36 {
37 1 uint8 temp;
38 1
39 1 temp = P2;
40 1 temp = (temp & 0x07);
41 1
42 1 switch(KeyStatus)
43 1 {
44 2 case 0: //等待是否有按键按下,如果有键按下就进入状态1
45 2 if( temp != 7 )
46 2 {
47 3 KeyStatus = 1;
48 3 }
49 2 break;
50 2 case 1: //进行延时消抖,进入状态2再次判断
51 2 if( KeyDownTime > 2)
52 2 {
53 3 KeyStatus = 2;
54 3 KeyDownTime = 0;
55 3 }
C51 COMPILER V7.50 KEY 05/11/2009 22:41:49 PAGE 2
56 2 break;
57 2 case 2: //若检测到确实是按下了,读取键值,进入状态3;否则到状态0等待
58 2 if( temp != (KEY1|KEY2|KEY3) )
59 2 {
60 3 KeyCode = (KEY1|KEY2|KEY3) - temp;
61 3 KeyStatus = 3;
62 3 KeyDone = 1;
63 3 }
64 2 else
65 2 {
66 3 KeyStatus = 0;
67 3 }
68 2 break;
69 2 case 3: //若按键释放,进入状态4
70 2 if( temp == 0x07 )
71 2 {
72 3 KeyStatus = 4;
73 3 }
74 2 break;
75 2 case 4: //延时消抖,进入状态5
76 2 if( KeyReleaseTime > 2 )
77 2 {
78 3 KeyStatus = 5;
79 3 KeyReleaseTime = 0;
80 3 }
81 2 break;
82 2 case 5: //确实是按键释放了,进入状态0再次等待按键的按下;否则继续在状态4等待释放
83 2 if( temp == 0x07 )
84 2 {
85 3 KeyStatus = 0;
86 3
87 3 }
88 2 else
89 2 {
90 3 KeyStatus = 4;
91 3 }
92 2 break;
93 2 default:
94 2 break;
95 2 }
96 1 }
97
98 void KeyProcess(void)
99 {
100 1 KeyScan();
101 1 if( KeyDone != 0 )
102 1 { //判断是否有键按下
103 2 KeyDone = 0;
104 2 switch( KeyCode )
105 2 {
106 3 case KEY1: //+键,下翻页功能
107 3 switch( DisValue_Status )
108 3 {
109 4 case DIS00_HMC: //显示时分秒
110 4 DisValue_Status = DIS00_YMD; //+ 切换到年月日
111 4 break;
112 4 case DIS00_YMD:
113 4 DisValue_Status = DIS00_HMC;
114 4 break;
115 4 case 2:
116 4
117 4 break;
C51 COMPILER V7.50 KEY 05/11/2009 22:41:49 PAGE 3
118 4 case 3:
119 4
120 4 break;
121 4 case 4:
122 4
123 4 break;
124 4 case 5:
125 4
126 4 break;
127 4 case 6:
128 4
129 4 break;
130 4 default:
131 4 break;
132 4 }
133 3
134 3
135 3
136 3 break;
137 3 case KEY2:
138 3
139 3
140 3 break;
141 3 case KEY3:
142 3
143 3
144 3 break;
145 3 case (KEY1|KEY2):
146 3 break;
147 3 case (KEY2|KEY3):
148 3 break;
149 3 case (KEY1|KEY3):
150 3 break;
151 3 case (KEY1|KEY2|KEY3):
152 3 break;
153 3 default:
154 3 break;
155 3 }
156 2 }
157 1 }
158
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 140 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
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 + -