📄 ps2kbd.lst
字号:
179 3 case 0x59 :// Right SHIFT
180 3 shift = 1;
181 3 break;
182 3
183 3 default:
184 3 if(!shift)// If shift not pressed,
185 3 { // do a table look-up
186 4 // ComShowString(COM_1,"Chang Code to ASCII.");
187 4 for(i = 0; (UnShifted[i][0] != sc) && UnShifted[i][0]; i++);
188 4 if (UnShifted[i][0] == sc)
189 4 {
190 5 // ComShowString(COM_1,"Find Success.AsccII Code and usaged code is:");
191 5 // ComSendText(COM_1,&UnShifted[i][1],1);
192 5 // ComSendText(COM_1,&UnShifted[i][2],1);
193 5
194 5 uiKeyCombCode = UnShifted[i][1]+ UnShifted[i][2]*0x100;
195 5 put_kbbuff(uiKeyCombCode);
196 5
197 5
198 5 }
199 4 }
200 3 else
201 3 {// If shift pressed
202 4 // ComShowString(COM_1,"Chang Code to ASCII+Shift.");
203 4
204 4 for(i = 0; (Shifted[i][0] != sc) && Shifted[i][0]; i++);
205 4 if (Shifted[i][0] == sc)
206 4 {
207 5 // ComShowString(COM_1,"Find Success +Shift.AsccII Code and usaged code is:");
208 5 // ComSendText(COM_1,&UnShifted[i][1],1);
209 5 // ComSendText(COM_1,&UnShifted[i][2],1);
210 5
211 5 uiKeyCombCode = UnShifted[i][1]+ UnShifted[i][2]*0x100;
212 5 put_kbbuff(uiKeyCombCode);
213 5 // ComShowString(COM_1,"Find Success.+Shift");
214 5
215 5 }
216 4 }
217 3 break;
218 3 }
219 2 }
220 1 else
221 1 {
222 2 is_up = 0;// Two 0xF0 in a row not allowed
223 2 switch (sc)
224 2 {
225 3 case 0x12 :// Left SHIFT
226 3 shift = 0;
227 3 break;
228 3 case 0x59 :// Right SHIFT
229 3 shift = 0;
230 3 break;
231 3 default:
232 3 break;
233 3 }
234 2 }
235 1 }
236
237 /**************************************************
238 功能介绍:初始化键盘操作,清空键盘缓冲区
239 入口参数: 无
240 返回: 初始化是否成功。true 表示成功
C51 COMPILER V7.50 PS2KBD 04/16/2007 15:23:02 PAGE 5
241 备注:
242 ***************************************************/
243 bool InitKbd(void)
244 {
245 1 // uchar ucPS2ReturnData;
246 1
247 1 inpt = kb_buffer;// Initialize buffer
248 1 outpt = kb_buffer;
249 1 buffcnt = 0;
250 1 return true;
251 1
252 1 /*
253 1 PS2_SendChar(0xEE);
254 1 if(PS2_GetChar(&ucPS2ReturnData))
255 1 {
256 1 ComShowString(COM_1,"Get KBD Echo Code is:");
257 1 ComSendText(COM_1,&ucPS2ReturnData,1);
258 1 return true;
259 1 }
260 1 else
261 1 {
262 1 return false;
263 1 }
264 1 */
265 1 }
266
267 /**************************************************
268 功能介绍:检查在PS2键盘上是否有按键发生
269 入口参数: 无
270 返回: 是否有键按下。true 表示有键按下等待读取。
271 备注:
272 ***************************************************/
273 bool PS2KbHit(void)
274 {
275 1 if(buffcnt > 0)
276 1 {
277 2 return true;
278 2 }
279 1 else
280 1 {
281 2 return false;
282 2 }
283 1 }
284
285 /**************************************************
286 功能介绍:获取PS2键盘的键值
287 入口参数: 无
288 返回: 键盘按键的二次编码值。
289 备注: 返回为ASCII码+功能码
290 ***************************************************/
291 uint PS2GetChar(void)
292 {
293 1 uint uiKeyValue;
294 1
295 1 // while(buffcnt == 0);// Wait for data
296 1 uiKeyValue = *outpt;// Get byte
297 1 outpt++; // Increment pointer
298 1 if (outpt >= kb_buffer + BUFF_SIZE)// Pointer wrapping
299 1 outpt = kb_buffer;
300 1 buffcnt--; // Decrement buffer count
301 1
302 1 return uiKeyValue;
C51 COMPILER V7.50 PS2KBD 04/16/2007 15:23:02 PAGE 6
303 1 }
304
305 /**************************************************
306 功能介绍:扫描键盘
307 入口参数: 无
308 返回: 是否有键按下。True表示扫描到按键
309 备注: 由主调函数循环调用
310 ***************************************************/
311 bool PS2KeyboardScan(void)
312 {
313 1 uchar ucPS2ReturnData;
314 1
315 1 if(PS2_GetChar(&ucPS2ReturnData))
316 1 {
317 2 Decode(ucPS2ReturnData);
318 2 }
319 1 if(PS2KbHit())
320 1 {
321 2 return true;
322 2 }
323 1 else
324 1 {
325 2 return false;
326 2 }
327 1 }
328
329 /**************************************************
330 功能介绍:设置键盘指示灯
331 入口参数: 状态灯编码
332 返回: 设置是否成功。
333 备注:
334 ***************************************************/
335 bool PS2KeyboardSetStatusLed(uchar ucLedValue)
336 {
337 1 uchar ucPS2ReturnData;
338 1
339 1 PS2_SendChar(0xED);
340 1 PS2_SendChar(ucLedValue & 0x07);
341 1
342 1 if(PS2_GetChar(&ucPS2ReturnData))
343 1 {
344 2 // ComShowString(COM_1,"Set Led Cmd Return Code is:");
345 2 // ComSendText(COM_1,&ucPS2ReturnData,1);
346 2 return true;
347 2 }
348 1 else
349 1 {
350 2 return false;
351 2 }
352 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 811 ----
CONSTANT SIZE = 312 ----
XDATA SIZE = 137 11
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 + -