?? ps2_bin.lst
字號(hào):
237 //輸入:無(wú)
238 //輸出:無(wú)
239 //描述:
240 /*********************************************************/
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 5
241 void uart() interrupt 4 using 2
242 {
243 1 ES=0;
244 1 TH1=0xfa; //裝入初值,22.1184MHZ 的晶振,9600 的波特率
245 1 TL1=0xfa;
246 1
247 1 if(RI == 1) //接收中斷
248 1 {
249 2 RI= 0;
250 2
251 2 }
252 1 else if(TI == 1) //發(fā)送中斷
253 1 {
254 2 if(KeyCodeSum >1)
255 2 {
256 3 // SBUF = KeyCodeBuff[--KeyCodeSum];
257 3 // SBUF = 0x00;
258 3 }
259 2 else
260 2 {
261 3 KeyCodeSum = 0;
262 3 }
263 2 TI = 0;
264 2 }
265 1 ES=1;
266 1 }
267
268 unsigned char findcode(unsigned char dat,unsigned char sort)
269 {
270 1 unsigned char conter=0x00;
271 1 switch (sort)
272 1 {
273 2 case 0xE0:
274 2 {
275 3 for(conter=0x00;conter<22;conter++)
276 3 {
277 4 if(dat==e0_keyval[conter])return conter;
278 4 }
279 3 return nodefinedkey;
280 3 //break;
281 3 }
282 2 case 0xE1:
283 2 {
284 3 for(conter=0x00;conter<2;conter++)
285 3 {
286 4 if(dat==pausekey[conter])return conter;
287 4 }
288 3 return nodefinedkey;
289 3 //break;
290 3
291 3 }
292 2 default:
293 2 for(conter=0x00;conter<86;conter++)
294 2 {
295 3 if(dat==keyval[conter])return conter;
296 3 }
297 2 return nodefinedkey;
298 2 //break;
299 2 }
300 1
301 1 }
302 /*********************************************************/
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 6
303 //函數(shù):KeyTransmit()
304 //功能:串口中斷
305 //輸入:
306 //輸出:
307 //描述:
308 /*********************************************************/
309 void KeyTransmit(void)
310 {
311 1 EA=0;
312 1
313 1 if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x01]==0x12)&(KeyCodeBuff[0x02]!=0x00))
314 1 {
315 2 OUTPORT=findcode(KeyCodeBuff[0x02],0xE0)+80;//是擴(kuò)展建?
316 2 }
317 1 else if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x02]==0x00))
318 1 {
319 2 OUTPORT=findcode(KeyCodeBuff[0x01],0xE0)+58;//是普通擴(kuò)展鍵?
320 2 }
321 1 if(KeyCodeBuff[0x00]==0xE1)OUTPORT=200; //pause的鍵顯示200
322 1 else
323 1 {
324 2 if((KeyCodeBuff[0x00]!=0xE0)&(KeyCodeBuff[0x00]!=0x00))
325 2 {
326 3 OUTPORT=findcode(KeyCodeBuff[0x00],0x12);//是普通鍵嗎?
327 3 }
328 2 }
329 1 //KeyCodeSum -= 0x01;
330 1 SBUF = KeyCodeBuff[0x00];//發(fā)送鍵值
331 1 // KeyCodeSum += 0x01;
332 1 //KeyCodeSum = 0; //
333 1 // KeyExtendFlag = 0;
334 1 EA=1;
335 1 }
336 /*********************************************************/
337 //函數(shù):timer0()
338 //功能:定時(shí)器0中斷
339 //輸入:
340 //輸出:
341 //描述:
342 /*********************************************************/
343 void timer0(void) interrupt 1 using 3
344 {
345 1 unsigned char compare=0x00;
346 1 switch(dat[0x00])
347 1
348 1 case 0xe0: //是擴(kuò)展鍵嗎?
349 1 for(compare=0x00;compare<100;compare++)
350 1 {
351 2 if(dat[0x01]==e0_keyval[compare])break;
352 2 }
353 1 }
354 /*********************************************************/
355 //函數(shù):ex0()
356 //功能:外部中斷0服務(wù)程序
357 //輸入:
358 //輸出:
359 //描述:
360 /*********************************************************/
361 void ex0() interrupt 0 using 3
362 { //時(shí)鐘線變低
363 1 unsigned char bitCount;
364 1 unsigned char KeyCode = 0;
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 7
365 1 if(KeyCodeSum < MAXBUFFER) KeyCodeBuff[KeyCodeSum] = 0;
366 1 for(bitCount = 8; bitCount != 0; bitCount --) // 把起始位算入
367 1 {
368 2 WAITFORKEYBOARDPULSE; // 等待一個(gè)有效的下跳沿
369 2 KeyCode >>= 1; // 按照PS2格式,數(shù)據(jù)低位在前
370 2 scl = 1;
371 2 sda = 1;
372 2 if(sda == 1)
373 2 {
374 3 KeyCode |= 0x80; // 得到有效的數(shù)據(jù)位
375 3 }
376 2 }
377 1 WAITFORKEYBOARDPULSE; // 等待按鍵發(fā)送效驗(yàn)位
378 1 WAITFORKEYBOARDPULSE; // 等待按鍵發(fā)送終止位
379 1 while(!scl); // 等待鍵盤把時(shí)鐘線拉高
380 1 switch(KeyCode)
381 1 {
382 2
383 2 case CODE_POST:
384 2 KeyBoardConnectFlag = 1;
385 2 break;
386 2 case CODE_ACK: //鍵盤應(yīng)答
387 2 // Order(LedStatus);
388 2 break;
389 2 case CODE_ECHO: //鍵盤的echo回應(yīng)碼
390 2 break;
391 2 case 0xFE:
392 2 break;
393 2 case CODE_BREAK: //鍵盤發(fā)送的是斷碼
394 2 KeyUpFlag = 1;
395 2 break;
396 2
397 2 case CODE_EXTEND: //鍵盤發(fā)送的是擴(kuò)展碼
398 2 if(KeyExtendFlag == 0)//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
399 2 { // KeyFlag = 1;
400 3 KeyExtendFlag = 1;
401 3 KeyCodeSum=0x00;
402 3 KeyCodeBuff[KeyCodeSum] = KeyCode;
403 3 KeyCodeSum+=1;
404 3
405 3 }
406 2 break;
407 2
408 2 case CODE_PAUSE: //鍵盤發(fā)送的是Pause鍵的鍵碼
409 2 KeyPauseFlag = 1;
410 2 //KeyFlag = 1;
411 2 KeyCodeSum=0x00;
412 2 KeyCodeBuff[KeyCodeSum] = KeyCode;
413 2 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
414 2
415 2 break;
416 2 /*
417 2 case CODE_NUMLOCK:
418 2 if(KeyPauseFlag == 1 || (KeyMakeCodeFlag == 0 && KeyUpFlag))
419 2 {
420 2 //KeyFlag = 1; //如果是Pause鍵的鍵碼(E1+14+77)則77代表鍵碼結(jié)束直接發(fā)送
421 2
422 2 if(KeyMakeCodeFlag == 0) //Pause鍵發(fā)送的鍵碼是(F0+77)
423 2 {
424 2 KeyCodeBuff[KeyCodeSum] = CODE_PAUSE;
425 2 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
426 2 KeyCodeBuff[KeyCodeSum] = 0x14;
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 8
427 2 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
428 2 }
429 2
430 2 KeyCodeBuff[KeyCodeSum] = KeyCode;
431 2 KeyUpFlag = 0;
432 2 KeyMakeCodeFlag = 0;
433 2 KeyPauseFlag = 0;
434 2 break;
435 2 }
436 2
437 2 case CODE_CAPSLOCK:
438 2 //KeyFlag = 1;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
439 2 // KeyCodeSum=0x00;
440 2 KeyCodeBuff[KeyCodeSum] = KeyCode;
441 2 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
442 2 break;
443 2
444 2 case CODE_SCROLLLOCK: //發(fā)送的是三個(gè)LED控制鍵通碼
445 2 // KeyFlag = 1;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
446 2 KeyLedLockFlag = 1;
447 2 //KeyCodeSum=0x00;
448 2 KeyCodeBuff[KeyCodeSum] = KeyCode;
449 2 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
450 2 break;
451 2 */
452 2 default: //鍵盤發(fā)送的是通碼
453 2
454 2 if(KeyUpFlag ==1)//KeyUpFlag ==
455 2 { //發(fā)送的是斷碼之后的通碼
456 3
457 3 KeyFlag = 1; //有正常鍵被按下
458 3 KeyUpFlag = 0; //鍵彈起標(biāo)志
459 3 KeyMakeCodeFlag = 0; //鍵通碼標(biāo)志
460 3 KeyExtendFlag = 0;
461 3 if(KeyCode==0x12)KeyCodeBuff[0x03]= 0x00; //斷碼之后的通碼為0X12說(shuō)明按鍵碼全部接收完畢/
462 3 else
463 3 {
464 4 // KeyCodeBuff[0x02]= 0x00; //斷碼之后的通碼不為0X12就是普通擴(kuò)展鍵清無(wú)用的字節(jié)
465 4 }
466 3 KeyCodeSum=0x00;
467 3
468 3 /*
469 3 if(KeyPauseFlag == 1) //Pause鍵被按下發(fā)送的鍵碼是(E1+F0+14)
-
470 3 {
471 3 KeyPauseFlag = 0;
472 3 KeyCodeBuff[KeyCodeSum] = KeyCode;
473 3 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
474 3 else
475 3 {
476 3 KeyCodeSum=0x00;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
477 3 }
478 3 break;
479 3 }
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -