📄 ps2_bin.lst
字号:
480 3
481 3
482 3 if(KeyExtendFlag == 1)
483 3 {
484 3
485 3
486 3 if((KeyCodeSum > 0x02))
487 3 {
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 9
488 3 KeyCodeSum=0x00;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
489 3 KeyExtendFlag = 0;
490 3 }
491 3 else
492 3 {
493 3 //KeyCodeSum+=1;
494 3 KeyCodeBuff[KeyCodeSum] = KeyCode;
495 3 KeyCodeSum++;
496 3 }
497 3
498 3
499 3 }
500 3 /*
501 3 if(KeyLedLockFlag == 1)
502 3 {
503 3 KeyLedLockFlag = 0;
504 3 switch(KeyCode)
505 3 {
506 3 case CODE_CAPSLOCK:
507 3 if(LedStatus & CAPSLOCK_EN)
508 3 {
509 3 LedStatus &= CAPSLOCK_DIS;
510 3 }
511 3 else
512 3 {
513 3 LedStatus |= CAPSLOCK_EN;
514 3 }
515 3 break;
516 3 case CODE_NUMLOCK:
517 3 if(LedStatus & NUMLOCK_EN)
518 3 {
519 3 LedStatus &= NUMLOCK_DIS;
520 3 }
521 3 else
522 3 {
523 3 LedStatus |= NUMLOCK_EN;
524 3 }
525 3 break;
526 3 case CODE_SCROLLLOCK:
527 3 if(LedStatus & SCROLLLOCK_EN)
528 3 {
529 3 LedStatus &= SCROLLLOCK_DIS;
530 3 }
531 3 else
532 3 {
533 3 LedStatus |= SCROLLLOCK_EN;
534 3 }
535 3 // KeyCodeBuff[KeyCodeSum] = KeyCode;
536 3 break;
537 3 }
538 3 Order(0xED); //设置Led
539 3
540 3 //Order(LedStatus);
541 3 //LedLock(LedStatus);
542 3 } */
543 3 }
544 2
545 2
546 2 else //通码
547 2 {
548 3 // KeyCodeSum=0x00;
549 3 KeyCodeBuff[KeyCodeSum] = KeyCode;
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 10
550 3 if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
551 3 // KeyMakeCodeFlag = 1;
552 3 }
553 2 }
554 1
555 1 }
556 /*********************************************************/
557 //函数:KeyScan()
558 //功能:扫描键盘
559 //输入:
560 //输出:键值
561 //描述:
562 /*********************************************************/
563 /*
564 void KeyScan()
565 {
566 unsigned char KeyCode;
567 KeyCode = ReadPS2();
568 if(KeyCode == CODE_BREAK)
569 {
570
571 KeyFlag = 1;
572 }
573 else
574 {
575 KeyCodeBuff[KeyCodeSum] = KeyCode;
576 KeyCodeSum++;
577 }
578 }
579 */
580 /*********************************************************/
581 //函数:ReadPS2()
582 //功能:扫描键盘
583 //输入:
584 //输出:键值
585 //描述:
586 /*********************************************************/\
587
588 unsigned char ReadPS2()
589 {
590 1 unsigned char KeyCode; //键盘键值
591 1 unsigned char bitCount; //位数
592 1 while(scl); // 等待键盘把时钟第一次拉低
593 1
594 1 for(bitCount = 8; bitCount != 0; bitCount --) // 把起始位算入
595 1 {
596 2 WAITFORKEYBOARDPULSE; // 等待一个有效的下跳沿
597 2 KeyCode >>= 1; // 按照PS2格式,数据低位在前
598 2 scl = 1;
599 2 sda = 1;
600 2 if(sda == 1)
601 2 {
602 3 KeyCode |= 0x80; // 得到有效的数据位
603 3 }
604 2 }
605 1 WAITFORKEYBOARDPULSE; // 等待按键发送效验位
606 1 WAITFORKEYBOARDPULSE; // 等待按键发送终止位
607 1 while(!scl); // 等待键盘把时钟线拉高
608 1 if(KeyCode == CODE_POST)
609 1 KeyBoardConnectFlag = 1;
610 1 return(KeyCode); // 返回按键扫描
611 1 }
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 11
612
613 /*********************************************************/
614 //函数:Order()
615 //功能:向键盘发送命令
616 //输入:命令
617 //输出:?
618 //描述:
619 /*********************************************************/
620 void Order(unsigned char orderByte)
621 {
622 1 unsigned char cnt;
623 1 unsigned char check;
624 1
625 1 //DINT; //关闭总中断,发送命令到键盘
626 1
627 1 scl = 0;
628 1 sda = 1;
629 1 for(cnt = 0xff; cnt != 0; cnt --); // 拉低时钟与数据并延时
630 1
631 1 sda = 0;
632 1 scl = 1;
633 1 for(cnt = 8; cnt != 0; cnt --)
634 1 { // 发送八位数据,循环八次
635 2
636 2 while(scl);
637 2 if(orderByte & 0x01)
638 2 {
639 3 sda = 1; // 根据低位设定输出数据
640 3 check ++; // 如果输出一个1,效验记录数据加一
641 3 }
642 2 else
643 2 {
644 3 sda = 0;
645 3 }
646 2 orderByte >>= 1; // 命令字调整
647 2 while(!scl); // 输出脉冲
648 2 }
649 1 while(scl);
650 1 if(check % 2)
651 1 { // 如果输出过偶数个脉冲
652 2 sda = 0; // 效验数据位置1
653 2 }
654 1 else
655 1 {
656 2 sda = 1; // 否则数据位置0
657 2 }
658 1 while(!scl);
659 1 while(scl);
660 1 sda = 1;
661 1 while(!scl); // 发送终止位
662 1 sda = 1;
663 1 scl = 1;
664 1 while((scl) | (sda)); // 等待ACK握手信号
665 1 while(!scl); //等待scl变高
666 1 //EINT; //开总中断
667 1 }
668 /*********************************************************/
669 //函数:void LedLock()
670 //功能:三个键盘的控制
671 //输入:三个键盘灯的控制
672 //输出:三个灯的状态
673 //描述:
C51 COMPILER V7.07 PS2_BIN 05/26/2005 16:04:50 PAGE 12
674 /*********************************************************/
675 /*
676 void LedLock(unsigned char LedLock)
677 {
678 Order(0xED); //控制命令字
679 Order(LedLock);
680 }
681 /*********************************************************/
682 //函数:KickDog()
683 //功能:喂狗
684 //输入:
685 //输出:?
686 //描述:
687 /*********************************************************/
688
689 /*********************************************************/
690 //函数:Delay()
691 //功能:延时
692 //输入:延时时间设定值
693 //输出:?
694 //描述:
695 /*********************************************************/
696 void Delay(unsigned char Times)
697 {
698 1 unsigned char n;
699 1 n = 120;
700 1 for(;Times>0;Times--)
701 1 {
702 2 for(;n>0;n--)
703 2 ;
704 2 }
705 1 }
706
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 896 ----
CONSTANT SIZE = 110 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 31 1
IDATA SIZE = ---- ----
BIT SIZE = 7 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -