📄 key.lst
字号:
134 1 { return key_table[i][j];
135 2 }
136 1 }
137
138 /********************************************************************************/
139 /* fun_name : c51_key_scan_process_jitter() */
140 /* version : v1.00 */
141 /* created : xillinx */
142 /* descript : 键盘扫描到按键按下后需要去抖操作,这个函数处理去抖 */
143 /********************************************************************************/
144 unsigned char c51_key_cur_value=0x0;
145 unsigned char c51_key_jitter=0x0;
146 unsigned char c51_key_record=0x0;
147 unsigned char c51_key_scan_process_jitter(void)
148 { unsigned char c51_key_read_lo=0x0;
149 1 c51_key_read_lo=c51_key_scan_operate();
150 1 if( c51_key_cur_value!=c51_key_read_lo) //* 如果这次扫描的数据与上次不一致
151 1 { c51_key_cur_value=c51_key_read_lo;
152 2 c51_key_jitter=0x0;
153 2 c51_key_record=0x0;
154 2 }
155 1 else
156 1 { c51_key_jitter++;
157 2 }
158 1 if( c51_key_cur_value==0x0) //* 没有按键按下,不需要统计扫描次数
159 1 { c51_key_jitter=0x0;
160 2 //key_off_proc();
161 2 }
162 1 if( c51_key_jitter<0x6) //* 如果没有连续三次扫描到相同的按键,继续扫描
163 1 { return 0x0;
164 2 }
165 1 if( c51_key_record==0x1) //* 如果是已经处理的按键还没有释放,一直按着,不处理
166 1 { return 0x0;
167 2 }
168 1 else
169 1 { c51_key_record=0x1; //* 处理新检测的按键
170 2 key_put_on_proc(c51_key_cur_value);
171 2 }
172 1 return c51_key_cur_value;
173 1 }
174
175
176 /********************************************************************************/
177 /* fun_name : c51_key_scan_hi_process() */
178 /* version : v1.00 */
C51 COMPILER V8.02 KEY 10/20/2008 13:54:42 PAGE 4
179 /* created : xillinx */
180 /* descript : 扫描独立的四个按键 */
181 /********************************************************************************/
182 unsigned char key_hi_cur=0x0;
183 unsigned char key_hi_jit=0x0;
184 unsigned char key_hi_rec=0x0;
185 unsigned char key_val=0x0;
186 unsigned char c51_key_scan_hi_process(void)
187 { unsigned char key_read=0x0;
188 1 key_read=c51_key_read_hi();
189 1 if( key_hi_cur!=key_read) //* 如果这次扫描的数据与上次不一致
190 1 { key_hi_cur=key_read;
191 2 key_hi_jit=0x0;
192 2 key_hi_rec=0x0;
193 2 }
194 1 else
195 1 { key_hi_jit++;
196 2 }
197 1 if( key_hi_cur==0xF0) //* 没有按键按下,不需要统计扫描次数
198 1 { key_hi_jit=0x0;
199 2 //key_off_proc();
200 2 }
201 1 if( key_hi_jit<0x3) //* 如果没有连续三次扫描到相同的按键,继续扫描
202 1 { return 0x0;
203 2 }
204 1
205 1 if( key_hi_rec==0x1) //* 如果是已经处理的按键还没有释放,一直按着,不处理
206 1 { return 0x0;
207 2 }
208 1 if((key_hi_cur&0xF0)==0xE0) //* 第一个按键按下
209 1 { key_val = 0x1;
210 2 }
211 1 else if((key_hi_cur&0xF0)==0xD0)//* 第二个按键按下
212 1 { key_val = 0x2;
213 2 }
214 1 else if((key_hi_cur&0xF0)==0xB0)//* 第三个按键按下
215 1 { key_val = 0x3;
216 2 }
217 1 else //* 第四个按键按下
218 1 { key_val = 0x4;
219 2 }
220 1 key_hi_rec=0x1; //* 处理新检测的按键
221 1 key_put_on_proc(key_val);
222 1
223 1 return key_val;
224 1 }
225
226 /********************************************************************************/
227 /* fun_name : c51_key_scan() */
228 /* version : v1.00 */
229 /* created : xillinx */
230 /* descript : 这个函数需要在定时器里面调用 */
231 /********************************************************************************/
232 void c51_key_scan(void)
233 { unsigned char key_val;
234 1 if( KEY_scan_timer==0x0) //* 定时器没有到
235 1 { return;
236 2 }
237 1 KEY_scan_timer=0x0;
238 1 key_val=c51_key_scan_process_jitter(); //* 8x3=24MS定时器,扫描键盘
239 1 if( key_val!=0x0)
240 1 { UART_printf("push key: %c.\r\n",key_val);
C51 COMPILER V8.02 KEY 10/20/2008 13:54:42 PAGE 5
241 2 }
242 1 key_val=c51_key_scan_hi_process();
243 1 switch(key_val)
244 1 {
245 2 case 0x1:
246 2 UART_printf("push key: F1.\r\n");
247 2 break;
248 2 case 0x2:
249 2 UART_printf("push key: F2.\r\n");
250 2 break;
251 2 case 0x3:
252 2 UART_printf("push key: F3.\r\n");
253 2 break;
254 2 case 0x4:
255 2 UART_printf("push key: F4.\r\n");
256 2 break;
257 2 default:
258 2 break;
259 2 }
260 1 return;
261 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 465 ----
CONSTANT SIZE = 100 ----
XDATA SIZE = 14 1
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 + -