?? 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 + -