📄 ps2_bin.src
字号:
; .\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 + -