📄 ps2_bin.src
字号:
ADD A,#0F3H
JZ ?C0102
ADD A,#0FEH
JZ ?C0091
ADD A,#0F6H
JZ ?C0102
ADD A,#0FCH
JZ ?C0102
ADD A,#054H
JNZ ?C0096
; {
; SOURCE LINE # 381
;
; case CODE_POST:
; SOURCE LINE # 383
?C0087:
; KeyBoardConnectFlag = 1;
; SOURCE LINE # 384
SETB KeyBoardConnectFlag
; break;
; SOURCE LINE # 385
SJMP ?C0102
; case CODE_ACK: //键盘应答
; SOURCE LINE # 386
; // Order(LedStatus);
; break;
; SOURCE LINE # 388
; case CODE_ECHO: //键盘的echo回应码
; SOURCE LINE # 389
; break;
; SOURCE LINE # 390
; case 0xFE:
; SOURCE LINE # 391
; break;
; SOURCE LINE # 392
; case CODE_BREAK: //键盘发送的是断码
; SOURCE LINE # 393
?C0091:
; KeyUpFlag = 1;
; SOURCE LINE # 394
SETB KeyUpFlag
; break;
; SOURCE LINE # 395
SJMP ?C0102
;
; case CODE_EXTEND: //键盘发送的是扩展码
; SOURCE LINE # 397
?C0092:
; if(KeyExtendFlag == 0)//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; SOURCE LINE # 398
JB KeyExtendFlag,?C0102
; { // KeyFlag = 1;
; SOURCE LINE # 399
; KeyExtendFlag = 1;
; SOURCE LINE # 400
SETB KeyExtendFlag
; KeyCodeSum=0x00;
; SOURCE LINE # 401
MOV KeyCodeSum,#00H
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; SOURCE LINE # 402
MOV A,#LOW (KeyCodeBuff)
ADD A,KeyCodeSum
MOV R0,A
MOV @R0,AR7
; KeyCodeSum+=1;
; SOURCE LINE # 403
INC KeyCodeSum
;
; }
; SOURCE LINE # 405
; break;
; SOURCE LINE # 406
SJMP ?C0102
;
; case CODE_PAUSE: //键盘发送的是Pause键的键码
; SOURCE LINE # 408
?C0094:
; KeyPauseFlag = 1;
; SOURCE LINE # 409
SETB KeyPauseFlag
; //KeyFlag = 1;
; KeyCodeSum=0x00;
; SOURCE LINE # 411
MOV KeyCodeSum,#00H
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; SOURCE LINE # 412
MOV A,#LOW (KeyCodeBuff)
ADD A,KeyCodeSum
MOV R0,A
MOV @R0,AR7
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; SOURCE LINE # 413
MOV A,KeyCodeSum
CLR C
SUBB A,#0FH
JNC ?C0102
INC KeyCodeSum
;
; break;
; SOURCE LINE # 415
SJMP ?C0102
; /*
; case CODE_NUMLOCK:
; if(KeyPauseFlag == 1 || (KeyMakeCodeFlag == 0 && KeyUpFlag))
; {
; //KeyFlag = 1; //如果是Pause键的键码(E1+14+77)则77代表键码结束直接发送
;
; if(KeyMakeCodeFlag == 0) //Pause键发送的键码是(F0+77)
; {
; KeyCodeBuff[KeyCodeSum] = CODE_PAUSE;
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; KeyCodeBuff[KeyCodeSum] = 0x14;
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; }
;
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; KeyUpFlag = 0;
; KeyMakeCodeFlag = 0;
; KeyPauseFlag = 0;
; break;
; }
;
; case CODE_CAPSLOCK:
; //KeyFlag = 1;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; // KeyCodeSum=0x00;
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; break;
;
; case CODE_SCROLLLOCK: //发送的是三个LED控制键通码
; // KeyFlag = 1;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; KeyLedLockFlag = 1;
; //KeyCodeSum=0x00;
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; break;
; */
; default: //键盘发送的是通码
; SOURCE LINE # 452
?C0096:
;
; if(KeyUpFlag ==1)//KeyUpFlag ==
; SOURCE LINE # 454
JNB KeyUpFlag,?C0097
; { //发送的是断码之后的通码
; SOURCE LINE # 455
;
; KeyFlag = 1; //有正常键被按下
; SOURCE LINE # 457
SETB KeyFlag
; KeyUpFlag = 0; //键弹起标志
; SOURCE LINE # 458
CLR KeyUpFlag
; KeyMakeCodeFlag = 0; //键通码标志
; SOURCE LINE # 459
CLR KeyMakeCodeFlag
; KeyExtendFlag = 0;
; SOURCE LINE # 460
CLR KeyExtendFlag
; if(KeyCode==0x12)KeyCodeBuff[0x03]= 0x00; //断码之后的通码为0X12说明按键码全部接收完毕/
; SOURCE LINE # 461
CJNE R7,#012H,?C0099
MOV KeyCodeBuff+03H,#00H
; else
; {
; SOURCE LINE # 463
; // KeyCodeBuff[0x02]= 0x00; //断码之后的通码不为0X12就是普通扩展键清无用的字节
; }
; SOURCE LINE # 465
?C0099:
; KeyCodeSum=0x00;
; SOURCE LINE # 466
MOV KeyCodeSum,#00H
;
; /*
; if(KeyPauseFlag == 1) //Pause键被按下发送的键码是(E1+F0+14)
; {
; KeyPauseFlag = 0;
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; else
; {
; KeyCodeSum=0x00;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; }
; break;
; }
;
;
; if(KeyExtendFlag == 1)
; {
;
;
; if((KeyCodeSum > 0x02))
; {
; KeyCodeSum=0x00;//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; KeyExtendFlag = 0;
; }
; else
; {
; //KeyCodeSum+=1;
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; KeyCodeSum++;
; }
;
;
; }
; /*
; if(KeyLedLockFlag == 1)
; {
; KeyLedLockFlag = 0;
; switch(KeyCode)
; {
; case CODE_CAPSLOCK:
; if(LedStatus & CAPSLOCK_EN)
; {
; LedStatus &= CAPSLOCK_DIS;
; }
; else
; {
; LedStatus |= CAPSLOCK_EN;
; }
; break;
; case CODE_NUMLOCK:
; if(LedStatus & NUMLOCK_EN)
; {
; LedStatus &= NUMLOCK_DIS;
; }
; else
; {
; LedStatus |= NUMLOCK_EN;
; }
; break;
; case CODE_SCROLLLOCK:
; if(LedStatus & SCROLLLOCK_EN)
; {
; LedStatus &= SCROLLLOCK_DIS;
; }
; else
; {
; LedStatus |= SCROLLLOCK_EN;
; }
; // KeyCodeBuff[KeyCodeSum] = KeyCode;
; break;
; }
; Order(0xED); //设置Led
;
; //Order(LedStatus);
; //LedLock(LedStatus);
; } */
; }
; SOURCE LINE # 543
SJMP ?C0102
?C0097:
;
;
; else //通码
; {
; SOURCE LINE # 547
; // KeyCodeSum=0x00;
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; SOURCE LINE # 549
MOV A,#LOW (KeyCodeBuff)
ADD A,KeyCodeSum
MOV R0,A
MOV @R0,AR7
; if(KeyCodeSum < MAXBUFFER) KeyCodeSum++;
; SOURCE LINE # 550
MOV A,KeyCodeSum
CLR C
SUBB A,#0FH
JNC ?C0102
INC KeyCodeSum
; // KeyMakeCodeFlag = 1;
; }
; SOURCE LINE # 552
; }
; SOURCE LINE # 553
;
; }
; SOURCE LINE # 555
?C0102:
POP PSW
POP ACC
RETI
; END OF ex0
; /*********************************************************/
; //函数:KeyScan()
; //功能:扫描键盘
; //输入:
; //输出:键值
; //描述:
; /*********************************************************/
; /*
; void KeyScan()
; {
; unsigned char KeyCode;
; KeyCode = ReadPS2();
; if(KeyCode == CODE_BREAK)
; {
;
; KeyFlag = 1;
; }
; else
; {
; KeyCodeBuff[KeyCodeSum] = KeyCode;
; KeyCodeSum++;
; }
; }
; */
; /*********************************************************/
; //函数:ReadPS2()
; //功能:扫描键盘
; //输入:
; //输出:键值
; //描述:
; /*********************************************************/\
;
; unsigned char ReadPS2()
RSEG ?PR?ReadPS2?PS2_BIN
ReadPS2:
USING 0
; SOURCE LINE # 588
;---- Variable 'KeyCode?646' assigned to Register 'R7' ----
; {
; SOURCE LINE # 589
?C0103:
; unsigned char KeyCode; //键盘键值
; unsigned char bitCount; //位数
; while(scl); // 等待键盘把时钟第一次拉低
; SOURCE LINE # 592
JB scl,?C0103
?C0104:
;
; for(bitCount = 8; bitCount != 0; bitCount --) // 把起始位算入
; SOURCE LINE # 594
;---- Variable 'bitCount?647' assigned to Register 'R6' ----
MOV R6,#08H
?C0105:
; {
; SOURCE LINE # 595
?C0108:
; WAITFORKEYBOARDPULSE; // 等待一个有效的下跳沿
; SOURCE LINE # 596
JNB scl,?C0108
?C0110:
JB scl,?C0110
?C0111:
; KeyCode >>= 1; // 按照PS2格式,数据低位在前
; SOURCE LINE # 597
MOV A,R7
CLR C
RRC A
MOV R7,A
; scl = 1;
; SOURCE LINE # 598
SETB scl
; sda = 1;
; SOURCE LINE # 599
SETB sda
; if(sda == 1)
; SOURCE LINE # 600
JNB sda,?C0107
; {
; SOURCE LINE # 601
; KeyCode |= 0x80; // 得到有效的数据位
; SOURCE LINE # 602
ORL AR7,#080H
; }
; SOURCE LINE # 603
; }
; SOURCE LINE # 604
?C0107:
DJNZ R6,?C0105
?C0113:
; WAITFORKEYBOARDPULSE; // 等待按键发送效验位
; SOURCE LINE # 605
JNB scl,?C0113
?C0115:
JB scl,?C0115
?C0117:
; WAITFORKEYBOARDPULSE; // 等待按键发送终止位
; SOURCE LINE # 606
JNB scl,?C0117
?C0119:
JB scl,?C0119
?C0121:
; while(!scl); // 等待键盘把时钟线拉高
; SOURCE LINE # 607
JNB scl,?C0121
?C0122:
; if(KeyCode == CODE_POST)
; SOURCE LINE # 608
CJNE R7,#0AAH,?C0123
; KeyBoardConnectFlag = 1;
; SOURCE LINE # 609
SETB KeyBoardConnectFlag
?C0123:
; return(KeyCode); // 返回按键扫描
; SOURCE LINE # 610
; }
; SOURCE LINE # 611
?C0124:
RET
; END OF ReadPS2
;
; /*********************************************************/
; //函数:Order()
; //功能:向键盘发送命令
; //输入:命令
; //输出:?
; //描述:
; /*********************************************************/
; void Order(unsigned char orderByte)
RSEG ?PR?_Order?PS2_BIN
_Order:
USING 0
; SOURCE LINE # 620
;---- Variable 'orderByte?748' assigned to Register 'R7' ----
; {
; SOURCE LINE # 621
; unsigned char cnt;
; unsigned char check;
;
; //DINT; //关闭总中断,发送命令到键盘
;
; scl = 0;
; SOURCE LINE # 627
CLR scl
; sda = 1;
; SOURCE LINE # 628
SETB sda
; for(cnt = 0xff; cnt != 0; cnt --); // 拉低时钟与数据并延时
; SOURCE LINE # 629
;---- Variable 'cnt?749' assigned to Register 'R6' ----
MOV R6,#0FFH
?C0125:
DJNZ R6,?C0125
?C0126:
;
; sda = 0;
; SOURCE LINE # 631
CLR sda
; scl = 1;
; SOURCE LINE # 632
SETB scl
; for(cnt = 8; cnt != 0; cnt --)
; SOURCE LINE # 633
MOV R6,#08H
?C0128:
; { // 发送八位数据,循环八次
; SOURCE LINE # 634
?C0131:
;
; while(scl);
; SOURCE LINE # 636
JB scl,?C0131
?C0132:
; if(orderByte & 0x01)
; SOURCE LINE # 637
MOV A,R7
JNB ACC.0,?C0133
; {
; SOURCE LINE # 638
; sda = 1; // 根据低位设定输出数据
; SOURCE LINE # 639
SETB sda
; check ++; // 如果输出一个1,效验记录数据加一
; SOURCE LINE # 640
INC check?750
; }
; SOURCE LINE # 641
SJMP ?C0134
?C0133:
; else
; {
; SOURCE LINE # 643
; sda = 0;
; SOURCE LINE # 644
CLR sda
; }
; SOURCE LINE # 645
?C0134:
; orderByte >>= 1; // 命令字调整
; SOURCE LINE # 646
MOV A,R7
CLR C
RRC A
MOV R7,A
?C0135:
; while(!scl); // 输出脉冲
; SOURCE LINE # 647
JNB scl,?C0135
; }
; SOURCE LINE # 648
?C0130:
DJNZ R6,?C0128
?C0137:
; while(scl);
; SOURCE LINE # 649
JB scl,?C0137
?C0138:
; if(check % 2)
; SOURCE LINE # 650
MOV A,check?750
JNB ACC.0,?C0139
; { // 如果输出过偶数个脉冲
; SOURCE LINE # 651
; sda = 0; // 效验数据位置1
; SOURCE LINE # 652
CLR sda
; }
; SOURCE LINE # 653
SJMP ?C0141
?C0139:
; else
; {
; SOURCE LINE # 655
; sda = 1; // 否则数据位置0
; SOURCE LINE # 656
SETB sda
; }
; SOURCE LINE # 657
?C0141:
; while(!scl);
; SOURCE LINE # 658
JNB scl,?C0141
?C0143:
; while(scl);
; SOURCE LINE # 659
JB scl,?C0143
?C0144:
; sda = 1;
; SOURCE LINE # 660
SETB sda
?C0145:
; while(!scl); // 发送终止位
; SOURCE LINE # 661
JNB scl,?C0145
?C0146:
; sda = 1;
; SOURCE LINE # 662
SETB sda
; scl = 1;
; SOURCE LINE # 663
SETB scl
?C0147:
; while((scl) | (sda)); // 等待ACK握手信号
; SOURCE LINE # 664
MOV C,sda
ORL C,scl
JC ?C0147
?C0149:
; while(!scl); //等待scl变高
; SOURCE LINE # 665
JNB scl,?C0149
; //EINT; //开总中断
; }
; SOURCE LINE # 667
?C0151:
RET
; END OF _Order
; /*********************************************************/
; //函数:void LedLock()
; //功能:三个键盘的控制
; //输入:三个键盘灯的控制
; //输出:三个灯的状态
; //描述:
; /*********************************************************/
; /*
; void LedLock(unsigned char LedLock)
; {
; Order(0xED); //控制命令字
; Order(LedLock);
; }
; /*********************************************************/
; //函数:KickDog()
; //功能:喂狗
; //输入:
; //输出:?
; //描述:
; /*********************************************************/
; void KickDog()
RSEG ?PR?KickDog?PS2_BIN
KickDog:
; SOURCE LINE # 688
; {
; SOURCE LINE # 689
;
;
; }
; SOURCE LINE # 692
RET
; END OF KickDog
; /*********************************************************/
; //函数:Delay()
; //功能:延时
; //输入:延时时间设定值
; //输出:?
; //描述:
; /*********************************************************/
; void Delay(unsigned char Times)
RSEG ?PR?_Delay?PS2_BIN
_Delay:
USING 0
; SOURCE LINE # 700
;---- Variable 'Times?951' assigned to Register 'R7' ----
; {
; SOURCE LINE # 701
; unsigned char n;
; n = 120;
; SOURCE LINE # 703
;---- Variable 'n?952' assigned to Register 'R6' ----
MOV R6,#078H
; for(;Times>0;Times--)
; SOURCE LINE # 704
?C0153:
MOV A,R7
SETB C
SUBB A,#00H
JC ?C0159
; {
; SOURCE LINE # 705
; for(;n>0;n--)
; SOURCE LINE # 706
?C0156:
MOV A,R6
SETB C
SUBB A,#00H
JC ?C0155
DEC R6
SJMP ?C0156
; ;
; }
; SOURCE LINE # 708
?C0155:
DEC R7
SJMP ?C0153
; }
; SOURCE LINE # 709
?C0159:
RET
; END OF _Delay
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -