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

📄 ps2_bin.src

📁 ps2的驱动
💻 SRC
📖 第 1 页 / 共 3 页
字号:
; .\PS2_BIN.SRC generated from: PS2_BIN.C
; COMPILER INVOKED BY:
;        C:\Keil\C51\BIN\C51.EXE PS2_BIN.C BROWSE DEBUG OBJECTEXTEND SRC(.\PS2_BIN.SRC)

$NOMOD51

NAME	PS2_BIN

P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
T0	BIT	0B0H.4
AC	BIT	0D0H.6
T1	BIT	0B0H.5
EA	BIT	0A8H.7
IE	DATA	0A8H
key_sw	BIT	090H.1
RD	BIT	0B0H.7
ES	BIT	0A8H.4
IP	DATA	0B8H
RI	BIT	098H.0
INT0	BIT	0B0H.2
CY	BIT	0D0H.7
TI	BIT	098H.1
INT1	BIT	0B0H.3
PS	BIT	0B8H.4
SP	DATA	081H
OV	BIT	0D0H.2
WR	BIT	0B0H.6
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
sda	BIT	0B0H.4
IE0	BIT	088H.1
IE1	BIT	088H.3
B	DATA	0F0H
scl	BIT	0B0H.2
ACC	DATA	0E0H
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
TF1	BIT	088H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
TB8	BIT	098H.3
EX1	BIT	0A8H.2
IT1	BIT	088H.2
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
PT0	BIT	0B8H.1
PT1	BIT	0B8H.3
RS0	BIT	0D0H.3
TR0	BIT	088H.4
RS1	BIT	0D0H.4
TR1	BIT	088H.6
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
REN	BIT	098H.4
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PSW	DATA	0D0H
?PR?main?PS2_BIN     SEGMENT CODE 
?PR?uart?PS2_BIN     SEGMENT CODE 
?PR?_findcode?PS2_BIN                    SEGMENT CODE 
?PR?KeyTransmit?PS2_BIN                  SEGMENT CODE 
?PR?timer0?PS2_BIN   SEGMENT CODE 
?PR?ex0?PS2_BIN      SEGMENT CODE 
?PR?ReadPS2?PS2_BIN  SEGMENT CODE 
?PR?_Order?PS2_BIN   SEGMENT CODE 
?DT?_Order?PS2_BIN   SEGMENT DATA OVERLAYABLE 
?PR?KickDog?PS2_BIN  SEGMENT CODE 
?PR?_Delay?PS2_BIN   SEGMENT CODE 
?C_INITSEG           SEGMENT CODE 
?CO?PS2_BIN          SEGMENT CODE 
?DT?PS2_BIN          SEGMENT DATA 
?BI?PS2_BIN          SEGMENT BIT 
	EXTRN	CODE (?C_STARTUP)
	PUBLIC	KeyIDLo
	PUBLIC	KeyUpFlag
	PUBLIC	KeyIDHi
	PUBLIC	i
	PUBLIC	KeyBoardConnectFlag
	PUBLIC	KeyCodeSum
	PUBLIC	sum
	PUBLIC	KeyLedLockFlag
	PUBLIC	dat
	PUBLIC	KeyCodeBuff
	PUBLIC	KeyPauseFlag
	PUBLIC	KeyFlag
	PUBLIC	KeyMakeCodeFlag
	PUBLIC	LedStatus
	PUBLIC	KeyExtendFlag
	PUBLIC	E1flag
	PUBLIC	E0flag
	PUBLIC	pausekey
	PUBLIC	e0_keyval
	PUBLIC	keyval
	PUBLIC	_Delay
	PUBLIC	KickDog
	PUBLIC	_Order
	PUBLIC	ReadPS2
	PUBLIC	ex0
	PUBLIC	timer0
	PUBLIC	KeyTransmit
	PUBLIC	_findcode
	PUBLIC	uart
	PUBLIC	main

	RSEG  ?DT?_Order?PS2_BIN
?_Order?BYTE:
      check?750:   DS   1

	RSEG  ?DT?PS2_BIN
         E0flag:   DS   1
         E1flag:   DS   1
      LedStatus:   DS   1
    KeyCodeBuff:   DS   16
            dat:   DS   6
            sum:   DS   1
     KeyCodeSum:   DS   1
              i:   DS   2
        KeyIDHi:   DS   1
        KeyIDLo:   DS   1

	RSEG  ?BI?PS2_BIN
  KeyExtendFlag:   DBIT   1
KeyMakeCodeFlag:   DBIT   1
        KeyFlag:   DBIT   1
   KeyPauseFlag:   DBIT   1
 KeyLedLockFlag:   DBIT   1
KeyBoardConnectFlag:   DBIT   1
      KeyUpFlag:   DBIT   1

	RSEG  ?CO?PS2_BIN
keyval:
	DB	076H
	DB	005H
	DB	006H
	DB	004H
	DB	00CH
	DB	003H
	DB	00BH
	DB	083H
	DB	00AH
	DB	001H
	DB	009H
	DB	078H
	DB	007H
	DB	00EH
	DB	016H
	DB	01EH
	DB	026H
	DB	025H
	DB	02EH
	DB	036H
	DB	03DH
	DB	03EH
	DB	046H
	DB	045H
	DB	04EH
	DB	055H
	DB	05DH
	DB	066H
	DB	00DH
	DB	015H
	DB	01DH
	DB	024H
	DB	02DH
	DB	02CH
	DB	035H
	DB	03CH
	DB	043H
	DB	044H
	DB	04DH
	DB	054H
	DB	05BH
	DB	058H
	DB	01CH
	DB	01BH
	DB	023H
	DB	02BH
	DB	034H
	DB	033H
	DB	03BH
	DB	042H
	DB	04BH
	DB	04CH
	DB	052H
	DB	05AH
	DB	012H
	DB	01AH
	DB	022H
	DB	021H
	DB	02AH
	DB	032H
	DB	031H
	DB	03AH
	DB	041H
	DB	049H
	DB	04AH
	DB	059H
	DB	014H
	DB	011H
	DB	029H
	DB	07EH
	DB	077H
	DB	07CH
	DB	07BH
	DB	06CH
	DB	075H
	DB	07DH
	DB	06BH
	DB	073H
	DB	074H
	DB	069H
	DB	072H
	DB	07AH
	DB	070H
	DB	071H
	DB	069H
	DB	079H

e0_keyval:
	DB	011H
	DB	01FH
	DB	014H
	DB	012H
	DB	070H
	DB	06CH
	DB	07DH
	DB	071H
	DB	069H
	DB	07AH
	DB	04AH
	DB	05AH
	DB	075H
	DB	06BH
	DB	072H
	DB	074H
	DB	05EH
	DB	03FH
	DB	037H
	DB	07CH
	DB	027H
	DB	02FH

pausekey:
	DB	0E1H
	DB	014H


	RSEG  ?C_INITSEG
	DB	010H
	DB	KeyCodeBuff
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H
	DB	000H

	DB	001H
	DB	KeyCodeSum
	DB	000H

	DB	0C1H, KeyFlag + 000H	; bit-init

	DB	0C1H, KeyUpFlag + 000H	; bit-init

	DB	0C1H, KeyExtendFlag + 000H	; bit-init

	DB	0C1H, KeyLedLockFlag + 000H	; bit-init

	DB	0C1H, KeyBoardConnectFlag + 000H	; bit-init

	DB	0C1H, KeyPauseFlag + 000H	; bit-init

	DB	0C1H, KeyMakeCodeFlag + 000H	; bit-init

	DB	001H
	DB	E1flag
	DB	000H

	DB	001H
	DB	E0flag
	DB	000H

	DB	001H
	DB	KeyIDLo
	DB	000H

	DB	001H
	DB	KeyIDHi
	DB	000H

	DB	001H
	DB	LedStatus
	DB	000H

	DB	001H
	DB	dat
	DB	000H

	DB	001H
	DB	sum
	DB	000H

; /*****************************************************************************/
; //main.c
; //功能:从PS/2口接受键盘信息,解码成ACSII码,通过UART发送出去,并且控制键盘
; //修改:
; //时间:2006-7-8
; //作者:R.S.J
; /*****************************************************************************/
; 
; #include <reg51.h>
; #include <intrins.h>
; 
; //#include "PS2.h"
; 
; #define EINT (EA = 1)
; #define DINT (EA = 0)
; 
; #define MAXBUFFER 15
; 
; #define WAITFORKEYBOARDPULSE  while(!scl); while(scl)
; 
; #define COMMAND_RESET     0xFF  //命令:复位键盘
; #define COMMAND_READID    0xF2 //命令:读键盘ID
; #define COMMAND_SETSTATUS 0xED //命令:设置状态CapsLock,NumLock,ScrollLock
; #define COMMAND_SETRATE   0xF3 //命令:设置速率,延时
; #define COMMAND_ENABLE    0xF4 //命令:使能键盘
; #define CAPSLOCK_EN       0x04  //使能CapsLock  灯
; #define NUMLOCK_EN        0x02  //使能NumLock   灯
; #define SCROLLLOCK_EN     0x01  //使能ScrollLock灯
; #define CAPSLOCK_DIS      0x03  //关闭CapsLock灯
; #define NUMLOCK_DIS       0x05  //关闭NumLock灯
; #define SCROLLLOCK_DIS    0x06 //关闭ScrollLock灯
; #define DISALL            0x00  //关闭所有灯
; 
; 
; #define CODE_POST     0xAA  //键盘上电自检成功 Power On Self Test
; #define CODE_ACK      0xFA  //键盘应答码
; #define CODE_ECHO     0xEE  //键盘的回应码
; #define CODE_BREAK    0xF0  //断码
; #define CODE_EXTEND   0xE0  //扩展码
; #define CODE_PAUSE    0xE1  //Pause键起始码 E1+14+77/E1+F0+14/F0+77
; #define CODE_LSHIFT   0x12  //左Shift键通码
; #define CODE_RSHIFT   0x59  //右Shift键通码
; #define CODE_LCTRL    0x14  //左CTRL键通码
; #define CODE_RCTRL    0x14  //右CTRL键通码 0xE0,0x14
; #define CODE_LALT     0x11  //左ALT键通码
; #define CODE_RALT     0x11  //右ALT键通码  0xE0,0x11
; #define CODE_NUMLOCK  0x77  //NumLock键
; #define CODE_CAPSLOCK 0x58  //CapsLock键
; #define CODE_SCROLLLOCK 0x7E//SCROLLLOCK键
; #define nodefinedkey   0x00//
; 
; #define OUTPORT P2    //电平输出口定义
; 
; /* 函数定义 */
; unsigned char ReadPS2(); //读PS2端口获取PS2发送的数据
; void KeyScan();          //获得键值
; void KeyTransmit();      //发送键值
; void Order(unsigned char);            //向键盘发送命令
; void KickDog();          //喂狗
; void Delay(unsigned char);
; void LedLock(unsigned char);
; /* 变量定义 */
; sbit sda = P3^4;     //P3.7做为数据线//^^^^^^^^^^^^^^^^^^^^^^
; sbit scl = P3^2;     //P3.2做为时钟线
; sbit key_sw = P1^1;  //P1.2作为键盘电源开关
; 
; int  i;
; unsigned char KeyCodeBuff[MAXBUFFER+1] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//键值缓存
; unsigned char KeyCodeSum      = 0; //键码数
; bit KeyFlag                   = 0; //有键标志
; bit KeyUpFlag                 = 0; //键弹起标志
; bit KeyExtendFlag             = 0; //扩展键标志
; bit KeyLedLockFlag            = 0; //三个Led键被按下的标志
; bit KeyBoardConnectFlag       = 0; //键盘连接标志
; bit KeyPauseFlag              = 0; //Pause键标志
; bit KeyMakeCodeFlag           = 0; //键盘发送通码标志
; /*
; bit CapsLockFlag              = 0; //CapsLock标志
; bit NumLockFlag               = 0; //NumLock标志
; bit ScrollLockFlag            = 0; //ScrollLock标志
; */
; unsigned char E1flag                    = 0;//我家的
; unsigned char E0flag                    = 0;//
; ///////////////////////////////////////////
; unsigned char KeyIDLo   = 0; //键盘ID低字节
; unsigned char KeyIDHi   = 0; //键盘ID高字节
; unsigned char LedStatus = 0; //NumLock,CapsLock,ScrollLock灯控制
; unsigned char dat[6]= 0x00;  // 输出数据缓存
; unsigned char sum=0x00;
; /*********************************************************/
; //函数:main()
; //功能:主函数
; //输入:无
; //输出:无
; //描述:
; /*********************************************************/
; unsigned char code keyval[]=
; {
; 0x76,0x05,0x06,0x04,0x0c,0x03,0x0b,0x83,0x0a,0x01,0x09,0x78,0x07,
; 0x0e,0x16,0x1e,0x26,0x25,0x2e,0x36,0x3d,0x3e,0x46,0x45,0x4e,0x55,
; 0x5d,0x66,0x0d,0x15,0x1d,0x24,0x2d,0x2c,0x35,0x3c,0x43,0x44,0x4d,
; 0x54,0x5b,0x58,0x1c,0x1b,0x23,0x2b,0x34,0x33,0x3b,0x42,0x4b,0x4c,
; 0x52,0x5a,0x12,0x1a,0x22,0x21,0x2a,0x32,0x31,0x3a,0x41,0x49,0x4a,
; 0x59,0x14,0x11,0x29,0x7e,0x77,0x7c,0x7b,0x6c,0x75,0x7d,0x6b,0x73,
; 0x74,0x69,0x72,0x7a,0x70,0x71,0x69,0x79,
; 
; };
; unsigned char code e0_keyval[]=
; {0x11,0x1F,0x14,0x12,0x70,0x6c,0x7d,0x71,0x69,0x7a,0x4a,0x5a,0x75,0x6b,0x72,0x74,0x5e,0x3f,0x37,0x7c,0x27,0x2f};
; unsigned char code pausekey[]={0xe1,0x14};
; //unsigned char code pausekey[]={0xe1,0x14}
; 
; void main()

	RSEG  ?PR?main?PS2_BIN
main:
	USING	0
			; SOURCE LINE # 113
; {
			; SOURCE LINE # 114
; DINT; //关中断
			; SOURCE LINE # 115
	CLR  	EA
;         
; for(i=0;i<1000;i++)
			; SOURCE LINE # 117
	CLR  	A
	MOV  	i,A
	MOV  	i+01H,A
?C0001:
	INC  	i+01H
	MOV  	A,i+01H
	JNZ  	?C0160
	INC  	i
?C0160:
	CJNE 	A,#0E8H,?C0001
	MOV  	A,i
	CJNE 	A,#03H,?C0001
?C0002:
;                 ;//延时稳定
;         
;         /*  初始化变量  */
; sda = 0;
			; SOURCE LINE # 121
	CLR  	sda
; scl = 0;      //端口设置为高
			; SOURCE LINE # 122
	CLR  	scl
; key_sw = 1;   //关键盘
			; SOURCE LINE # 123
	SETB 	key_sw
;         for(i=0;i<1000;i++)
			; SOURCE LINE # 124
	CLR  	A
	MOV  	i,A
	MOV  	i+01H,A
?C0004:
;                 Delay(10);
			; SOURCE LINE # 125
	MOV  	R7,#0AH
	LCALL	_Delay
	INC  	i+01H
	MOV  	A,i+01H
	JNZ  	?C0162
	INC  	i
?C0162:
	CLR  	C
	SUBB 	A,#0E8H
	MOV  	A,i
	XRL  	A,#080H
	SUBB 	A,#083H
	JC   	?C0004
?C0005:
;         for(i = 0;i<16;i++)
			; SOURCE LINE # 126
	CLR  	A
	MOV  	i,A
	MOV  	i+01H,A
?C0007:
;         {
			; SOURCE LINE # 127
;                 KeyCodeBuff[i] = 0;
			; SOURCE LINE # 128
	MOV  	A,#LOW (KeyCodeBuff)
	ADD  	A,i+01H
	MOV  	R0,A
	CLR  	A
	MOV  	@R0,A
;         }
			; SOURCE LINE # 129
	INC  	i+01H
	MOV  	A,i+01H
	JNZ  	?C0163
	INC  	i
?C0163:
	XRL  	A,#010H
	ORL  	A,i
	JNZ  	?C0007
?C0008:
;         KeyCodeSum              = 0;
			; SOURCE LINE # 130
	CLR  	A
	MOV  	KeyCodeSum,A
;         KeyFlag                 = 0;
			; SOURCE LINE # 131
	CLR  	KeyFlag
;         KeyUpFlag               = 0;
			; SOURCE LINE # 132
	CLR  	KeyUpFlag
;         KeyExtendFlag           = 0;
			; SOURCE LINE # 133
	CLR  	KeyExtendFlag
;         KeyLedLockFlag          = 0;
			; SOURCE LINE # 134
	CLR  	KeyLedLockFlag
;         KeyBoardConnectFlag     = 0;
			; SOURCE LINE # 135
	CLR  	KeyBoardConnectFlag
;         KeyPauseFlag            = 0;
			; SOURCE LINE # 136
	CLR  	KeyPauseFlag
;         KeyMakeCodeFlag         = 0;
			; SOURCE LINE # 137
	CLR  	KeyMakeCodeFlag
;         KeyIDLo                 = 0;
			; SOURCE LINE # 138
	MOV  	KeyIDLo,A
;         KeyIDHi                 = 0;
			; SOURCE LINE # 139
	MOV  	KeyIDHi,A
;         LedStatus               = 0;
			; SOURCE LINE # 140
	MOV  	LedStatus,A
; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; TMOD=0x22; // 定时器1 工作于方式2
			; SOURCE LINE # 142
	MOV  	TMOD,#022H
; //20
; SCON=0x40; // 串口工作于方式1
			; SOURCE LINE # 144
	MOV  	SCON,#040H
; TH1=0xfa; //装入初值,22.1184MHZ 的晶振,9600 的波特率
			; SOURCE LINE # 145
	MOV  	TH1,#0FAH
; TL1=0xfa;
			; SOURCE LINE # 146
	MOV  	TL1,#0FAH
; TL0 = 0xff;
			; SOURCE LINE # 147
	MOV  	TL0,#0FFH
; TH0 = 0xff;
			; SOURCE LINE # 148
	MOV  	TH0,#0FFH
; PCON=0x00; //波特率无倍增
			; SOURCE LINE # 149
	MOV  	PCON,A
; TR1=1; //开启定时器1 开始工作
			; SOURCE LINE # 150
	SETB 	TR1
; TR0=1; //开启定时器0 开始工作
			; SOURCE LINE # 151
	SETB 	TR0
; //EA=1;
; 
; ES=1;	
			; SOURCE LINE # 154
	SETB 	ES
; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; /*
;         TMOD = 0x22;  //T1为波特率发生器设置19200波特率
;         //T0为采样键盘时钟发生器
;         TL1 = 0xFD;
;         TH1 = 0xFD;
; // TL0 =
; // TH0 =
; PCON |= 0x80; //SMOD设置为1
; SCON = 0x50;  //串口控制寄存器
;       //工作方式
;       //非多机通讯方式
;       //允许接收
;       //
; 
; TR1 = 1;      //定时器1开始
; */
;         IT0 = 0;      //低电平引起中断
			; SOURCE LINE # 172
	CLR  	IT0
; 
;         ES = 1;       //开串口中断
			; SOURCE LINE # 174
	SETB 	ES
;         EX0 = 1;      //开外部0中断
			; SOURCE LINE # 175
	SETB 	EX0
;         key_sw = 0;   //开键盘电源
			; SOURCE LINE # 176
	CLR  	key_sw
;         scl = 1;
			; SOURCE LINE # 177
	SETB 	scl
;         sda = 1;
			; SOURCE LINE # 178
	SETB 	sda
;           
; Delay(1);
			; SOURCE LINE # 180
	MOV  	R7,#01H
	LCALL	_Delay
?C0010:
;         while(!KeyBoardConnectFlag)
			; SOURCE LINE # 181
	JB   	KeyBoardConnectFlag,?C0011
;                 ReadPS2();//等待键盘自检成功
			; SOURCE LINE # 182
	LCALL	ReadPS2
	SJMP 	?C0010
?C0011:
;                 
;         Order(COMMAND_RESET);   //复位键盘
			; SOURCE LINE # 184
	MOV  	R7,#0FFH
	LCALL	_Order
;         ReadPS2();              //等待键盘应答
			; SOURCE LINE # 185
	LCALL	ReadPS2

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -