📄 ps2_bin.lst
字号:
237 //输入:无
238 //输出:无
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) //发送中断
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 //函数: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;//是扩展建?
316 2 }
317 1 else if((KeyCodeBuff[0x00]==0xE0)&(KeyCodeBuff[0x02]==0x00))
318 1 {
319 2 OUTPORT=findcode(KeyCodeBuff[0x01],0xE0)+58;//是普通扩展键?
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];//发送键值
331 1 // KeyCodeSum += 0x01;
332 1 //KeyCodeSum = 0; //
333 1 // KeyExtendFlag = 0;
334 1 EA=1;
335 1 }
336 /*********************************************************/
337 //函数:timer0()
338 //功能:定时器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: //是扩展键吗?
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 //函数:ex0()
356 //功能:外部中断0服务程序
357 //输入:
358 //输出:
359 //描述:
360 /*********************************************************/
361 void ex0() interrupt 0 using 3
362 { //时钟线变低
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; // 等待一个有效的下跳沿
369 2 KeyCode >>= 1; // 按照PS2格式,数据低位在前
370 2 scl = 1;
371 2 sda = 1;
372 2 if(sda == 1)
373 2 {
374 3 KeyCode |= 0x80; // 得到有效的数据位
375 3 }
376 2 }
377 1 WAITFORKEYBOARDPULSE; // 等待按键发送效验位
378 1 WAITFORKEYBOARDPULSE; // 等待按键发送终止位
379 1 while(!scl); // 等待键盘把时钟线拉高
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: //键盘应答
387 2 // Order(LedStatus);
388 2 break;
389 2 case CODE_ECHO: //键盘的echo回应码
390 2 break;
391 2 case 0xFE:
392 2 break;
393 2 case CODE_BREAK: //键盘发送的是断码
394 2 KeyUpFlag = 1;
395 2 break;
396 2
397 2 case CODE_EXTEND: //键盘发送的是扩展码
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: //键盘发送的是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代表键码结束直接发送
421 2
422 2 if(KeyMakeCodeFlag == 0) //Pause键发送的键码是(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: //发送的是三个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: //键盘发送的是通码
453 2
454 2 if(KeyUpFlag ==1)//KeyUpFlag ==
455 2 { //发送的是断码之后的通码
456 3
457 3 KeyFlag = 1; //有正常键被按下
458 3 KeyUpFlag = 0; //键弹起标志
459 3 KeyMakeCodeFlag = 0; //键通码标志
460 3 KeyExtendFlag = 0;
461 3 if(KeyCode==0x12)KeyCodeBuff[0x03]= 0x00; //断码之后的通码为0X12说明按键码全部接收完毕/
462 3 else
463 3 {
464 4 // KeyCodeBuff[0x02]= 0x00; //断码之后的通码不为0X12就是普通扩展键清无用的字节
465 4 }
466 3 KeyCodeSum=0x00;
467 3
468 3 /*
469 3 if(KeyPauseFlag == 1) //Pause键被按下发送的键码是(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 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -