⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2_bin.src

📁 ps2的驱动
💻 SRC
📖 第 1 页 / 共 3 页
字号:
	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 + -