📄 keypaddrive.src
字号:
; .\keypaddrive.SRC generated from: keypaddrive.c
; COMPILER INVOKED BY:
; C:\Keil\C51\BIN\C51.EXE keypaddrive.c LARGE BROWSE DEBUG OBJECTEXTEND SRC(.\keypaddrive.SRC)
NAME KEYPADDRIVE
?PR?_PutInBuf?KEYPADDRIVE SEGMENT CODE
?PR?GetKey?KEYPADDRIVE SEGMENT CODE
?PR?KeyScan?KEYPADDRIVE SEGMENT CODE
?C_INITSEG SEGMENT CODE
?CO?KEYPADDRIVE SEGMENT CODE
?ID?KEYPADDRIVE SEGMENT IDATA
?XD?KEYPADDRIVE SEGMENT XDATA
?BA?KEYPADDRIVE SEGMENT DATA BITADDRESSABLE
PUBLIC Vertical3
PUBLIC Vertical2
PUBLIC Vertical1
PUBLIC Vertical0
PUBLIC KeyPadStatus
PUBLIC KeyBuf
PUBLIC Temp1
PUBLIC Delay10ms
PUBLIC KeyElement3
PUBLIC KeyElement2
PUBLIC KeyElement1
PUBLIC KeyElement0
PUBLIC Key
PUBLIC BufFlag
PUBLIC Temp
PUBLIC Front
PUBLIC Real
PUBLIC Row
PUBLIC KeyScan
PUBLIC GetKey
PUBLIC _PutInBuf
RSEG ?ID?KEYPADDRIVE
Real: DS 1
Front: DS 1
KeyPadStatus: DS 1
RSEG ?XD?KEYPADDRIVE
Temp: DS 1
BufFlag: DS 1
KeyElement0: DS 4
KeyElement1: DS 4
KeyElement2: DS 4
KeyElement3: DS 4
Delay10ms: DS 1
Temp1: DS 1
KeyBuf: DS 16
RSEG ?BA?KEYPADDRIVE
Key: DS 1
Vertical0 EQU (Key+0).0
Vertical1 EQU (Key+0).1
Vertical2 EQU (Key+0).2
Vertical3 EQU (Key+0).3
RSEG ?CO?KEYPADDRIVE
Row:
DB 001H
DB 002H
DB 004H
DB 008H
RSEG ?XD?KEYPADDRIVE
RSEG ?C_INITSEG
DB 001H
DB KeyPadStatus
DB 000H
DB 001H
DB Front
DB 000H
DB 001H
DB Real
DB 000H
DB 041H
DW BufFlag
DB 000H
DB 044H
DW KeyElement0
DB 031H
DB 032H
DB 033H
DB 034H
DB 044H
DW KeyElement1
DB 035H
DB 036H
DB 037H
DB 038H
DB 044H
DW KeyElement2
DB 039H
DB 030H
DB 020H
DB 020H
DB 044H
DW KeyElement3
DB 020H
DB 020H
DB 020H
DB 020H
; //---------------------------------------------
; // the 4*4 keypad driver
; // write by liujianwei 2005-6-25
; // e-mail:liujianwei@ruyi.com
; // qq:361299856
; //---------------------------------------------
;
;
; #include <absacc.h>
; #define KEY_ROW_PORT 0x2000
; #define KEY_VERTICAL_PORT 0xA000
; #define unchar unsigned char
; #define KEY_ROW XBYTE[KEY_ROW_PORT]
; #define KEY_VERTICAL XBYTE[KEY_VERTICAL_PORT]
; #define EMPTY 0
; #define NOTEMPTY 2
; #define FULL 1
; #define NOTFULL 3
; //-------------------------------------------
; // the globle varible declar here
; //---------------------------------------------
; unchar KeyBuf[16];
; unchar idata KeyPadStatus=0;
; unchar idata Front=0;
; unchar idata Real=0;
; unchar BufFlag=EMPTY; //0= empty
; const unchar code Row[4]={ 0x01,0x02,0x04,0x08};
; const unchar KeyElement0[4]={'1','2','3','4'};
; const unchar KeyElement1[4]={'5','6','7','8'};
; const unchar KeyElement2[4]={'9','0',' ',' '};
; const unchar KeyElement3[4]={' ',' ',' ',' '};
; unchar bdata Key;
; sbit Vertical0= Key^0;
; sbit Vertical1= Key^1;
; sbit Vertical2= Key^2;
; sbit Vertical3= Key^3;
;
; unchar Temp,Temp1;
; unchar Delay10ms;
; //--------------------------------------
; // put the char into the key buffer
; //--------------------------------------
; PutInBuf(unchar x)
RSEG ?PR?_PutInBuf?KEYPADDRIVE
_PutInBuf:
USING 0
; SOURCE LINE # 43
;---- Variable 'x?040' assigned to Register 'R7' ----
; {
; SOURCE LINE # 44
; if (BufFlag!=FULL)
; SOURCE LINE # 45
MOV DPTR,#BufFlag
MOVX A,@DPTR
XRL A,#01H
JZ ?C0003
; {
; SOURCE LINE # 46
; KeyBuf[Real]=x;
; SOURCE LINE # 47
MOV R0,#LOW (Real)
MOV A,@R0
ADD A,#LOW (KeyBuf)
MOV DPL,A
CLR A
ADDC A,#HIGH (KeyBuf)
MOV DPH,A
MOV A,R7
MOVX @DPTR,A
;
; Real++;
; SOURCE LINE # 49
INC @R0
; Real&=0x0f;
; SOURCE LINE # 50
MOV A,@R0
ANL A,#0FH
MOV R7,A
MOV @R0,A
; BufFlag=NOTEMPTY;
; SOURCE LINE # 51
MOV DPTR,#BufFlag
MOV A,#02H
MOVX @DPTR,A
; if (Real==Front)
; SOURCE LINE # 52
INC R0
MOV A,@R0
CJNE A,AR7,?C0003
; BufFlag=FULL;
; SOURCE LINE # 53
MOV A,#01H
MOVX @DPTR,A
; }
; SOURCE LINE # 54
; }
; SOURCE LINE # 55
?C0003:
RET
; END OF _PutInBuf
; //----------------------------------------
; // get char from the key bufffer
; //---------------------------------------
;
; unchar GetKey()
RSEG ?PR?GetKey?KEYPADDRIVE
GetKey:
USING 0
; SOURCE LINE # 60
; { unchar x;
; SOURCE LINE # 61
; if (BufFlag!=EMPTY)
; SOURCE LINE # 62
MOV DPTR,#BufFlag
MOVX A,@DPTR
JZ ?C0004
; {
; SOURCE LINE # 63
; x=KeyBuf[Front];
; SOURCE LINE # 64
MOV R0,#LOW (Front)
MOV A,@R0
ADD A,#LOW (KeyBuf)
MOV DPL,A
CLR A
ADDC A,#HIGH (KeyBuf)
MOV DPH,A
MOVX A,@DPTR
MOV R7,A
;---- Variable 'x?141' assigned to Register 'R7' ----
; Front++;
; SOURCE LINE # 65
INC @R0
; Front&=0x0f;
; SOURCE LINE # 66
MOV A,@R0
ANL A,#0FH
MOV R6,A
MOV @R0,A
; BufFlag=NOTFULL;
; SOURCE LINE # 67
MOV DPTR,#BufFlag
MOV A,#03H
MOVX @DPTR,A
; if (Real==Front)
; SOURCE LINE # 68
DEC R0
MOV A,@R0
CJNE A,AR6,?C0005
; BufFlag=EMPTY;
; SOURCE LINE # 69
CLR A
MOVX @DPTR,A
?C0005:
; return(x);
; SOURCE LINE # 70
RET
; }
; SOURCE LINE # 71
?C0004:
; //else
; return(0);
; SOURCE LINE # 73
MOV R7,#00H
; }
; SOURCE LINE # 74
?C0006:
RET
; END OF GetKey
;
; //--------------------------------------
; // key scan function
; // scan the key and put the key into key buffer
; //-----------------------------------------------
; KeyScan()
RSEG ?PR?KeyScan?KEYPADDRIVE
KeyScan:
USING 0
; SOURCE LINE # 80
; {unchar x0,x1,x2,x3;
; SOURCE LINE # 81
;
; switch(KeyPadStatus)
; SOURCE LINE # 83
MOV R0,#LOW (KeyPadStatus)
MOV A,@R0
DEC A
JNZ $ + 5H
LJMP ?C0029
DEC A
JNZ $ + 5H
LJMP ?C0031
DEC A
JNZ $ + 5H
LJMP ?C0053
DEC A
JNZ $ + 5H
LJMP ?C0055
ADD A,#04H
JZ $ + 5H
LJMP ?C0065
; {
; SOURCE LINE # 84
; case 0 :
; SOURCE LINE # 85
?C0008:
; //--------------------------------------------------------------------------
; // scan the first row
; //--------------------------------------------------------------------------
; KEY_ROW = Row[0];
; SOURCE LINE # 89
MOV DPTR,#Row
CLR A
MOVC A,@A+DPTR
MOV DPTR,#02000H
MOVX @DPTR,A
;
; Key=KEY_VERTICAL;
; SOURCE LINE # 91
MOV DPTR,#0A000H
MOVX A,@DPTR
MOV Key,A
; // while(1);
;
; if (Key )
; SOURCE LINE # 94
JZ ?C0009
; {
; SOURCE LINE # 95
; if (Vertical0)
; SOURCE LINE # 96
JNB Vertical0,?C0010
; {
; SOURCE LINE # 97
; Temp=KeyElement0[0];
; SOURCE LINE # 98
MOV DPTR,#KeyElement0
; KeyPadStatus=1;
; SOURCE LINE # 99
; break;
; SOURCE LINE # 100
LJMP ?C0080
; }
; SOURCE LINE # 101
?C0010:
;
; if (Vertical1)
; SOURCE LINE # 103
JNB Vertical1,?C0011
; {
; SOURCE LINE # 104
; Temp=KeyElement0[1];
; SOURCE LINE # 105
MOV DPTR,#KeyElement0+01H
?C0066:
;
; KeyPadStatus=1;
; SOURCE LINE # 107
; break;
; SOURCE LINE # 108
LJMP ?C0080
; }
; SOURCE LINE # 109
?C0011:
; if (Vertical2)
; SOURCE LINE # 110
JNB Vertical2,?C0012
; {
; SOURCE LINE # 111
; Temp=KeyElement0[2];
; SOURCE LINE # 112
MOV DPTR,#KeyElement0+02H
?C0067:
;
; KeyPadStatus=1;
; SOURCE LINE # 114
; break;
; SOURCE LINE # 115
LJMP ?C0080
; }
; SOURCE LINE # 116
?C0012:
; if (Vertical3)
; SOURCE LINE # 117
JNB Vertical3,?C0009
; {
; SOURCE LINE # 118
; Temp=KeyElement0[3];
; SOURCE LINE # 119
MOV DPTR,#KeyElement0+03H
?C0068:
;
; KeyPadStatus=1;
; SOURCE LINE # 121
; break;
; SOURCE LINE # 122
LJMP ?C0080
; }
; SOURCE LINE # 123
; }
; SOURCE LINE # 124
?C0009:
; //------------------------------------------------------------------------------
; // scan the secend row
; //------------------------------------------------------------------------------
; KEY_ROW = Row[1];
; SOURCE LINE # 128
MOV DPTR,#Row+01H
CLR A
MOVC A,@A+DPTR
MOV DPTR,#02000H
MOVX @DPTR,A
; Key=KEY_VERTICAL;
; SOURCE LINE # 129
MOV DPTR,#0A000H
MOVX A,@DPTR
MOV Key,A
; if (Key)
; SOURCE LINE # 130
JZ ?C0014
; {
; SOURCE LINE # 131
; if (Vertical0)
; SOURCE LINE # 132
JNB Vertical0,?C0015
; {
; SOURCE LINE # 133
; Temp=KeyElement1[0];
; SOURCE LINE # 134
MOV DPTR,#KeyElement1
?C0069:
; KeyPadStatus=1;
; SOURCE LINE # 135
; break;
; SOURCE LINE # 136
SJMP ?C0080
; }
; SOURCE LINE # 137
?C0015:
;
; if (Vertical1)
; SOURCE LINE # 139
JNB Vertical1,?C0016
; {
; SOURCE LINE # 140
; Temp=KeyElement1[1];
; SOURCE LINE # 141
MOV DPTR,#KeyElement1+01H
?C0070:
;
; KeyPadStatus=1;
; SOURCE LINE # 143
; break;
; SOURCE LINE # 144
SJMP ?C0080
; }
; SOURCE LINE # 145
?C0016:
; if (Vertical2)
; SOURCE LINE # 146
JNB Vertical2,?C0017
; {
; SOURCE LINE # 147
; Temp=KeyElement1[2];
; SOURCE LINE # 148
MOV DPTR,#KeyElement1+02H
?C0071:
;
; KeyPadStatus=1;
; SOURCE LINE # 150
; break;
; SOURCE LINE # 151
SJMP ?C0080
; }
; SOURCE LINE # 152
?C0017:
; if (Vertical3)
; SOURCE LINE # 153
JNB Vertical3,?C0014
; {
; SOURCE LINE # 154
; Temp=KeyElement1[3];
; SOURCE LINE # 155
MOV DPTR,#KeyElement1+03H
?C0072:
;
; KeyPadStatus=1;
; SOURCE LINE # 157
; break;
; SOURCE LINE # 158
SJMP ?C0080
; }
; SOURCE LINE # 159
; }
; SOURCE LINE # 160
?C0014:
; //------------------------------------------------------------------------------
; // scan the third row
; //------------------------------------------------------------------------------
; KEY_ROW = Row[2];
; SOURCE LINE # 164
MOV DPTR,#Row+02H
CLR A
MOVC A,@A+DPTR
MOV DPTR,#02000H
MOVX @DPTR,A
; Key=KEY_VERTICAL;
; SOURCE LINE # 165
MOV DPTR,#0A000H
MOVX A,@DPTR
MOV Key,A
; if (Key)
; SOURCE LINE # 166
JZ ?C0019
; {
; SOURCE LINE # 167
; if (Vertical0)
; SOURCE LINE # 168
JNB Vertical0,?C0020
; {
; SOURCE LINE # 169
; Temp=KeyElement2[0];
; SOURCE LINE # 170
MOV DPTR,#KeyElement2
?C0073:
; KeyPadStatus=1;
; SOURCE LINE # 171
; break;
; SOURCE LINE # 172
SJMP ?C0080
; }
; SOURCE LINE # 173
?C0020:
;
; if (Vertical1)
; SOURCE LINE # 175
JNB Vertical1,?C0021
; {
; SOURCE LINE # 176
; Temp=KeyElement2[1];
; SOURCE LINE # 177
MOV DPTR,#KeyElement2+01H
?C0074:
;
; KeyPadStatus=1;
; SOURCE LINE # 179
; break;
; SOURCE LINE # 180
SJMP ?C0080
; }
; SOURCE LINE # 181
?C0021:
; if (Vertical2)
; SOURCE LINE # 182
JNB Vertical2,?C0022
; {
; SOURCE LINE # 183
; Temp=KeyElement2[2];
; SOURCE LINE # 184
MOV DPTR,#KeyElement2+02H
?C0075:
;
; KeyPadStatus=1;
; SOURCE LINE # 186
; break;
; SOURCE LINE # 187
SJMP ?C0080
; }
; SOURCE LINE # 188
?C0022:
; if (Vertical3)
; SOURCE LINE # 189
JNB Vertical3,?C0019
; {
; SOURCE LINE # 190
; Temp=KeyElement2[3];
; SOURCE LINE # 191
MOV DPTR,#KeyElement2+03H
?C0076:
;
; KeyPadStatus=1;
; SOURCE LINE # 193
; break;
; SOURCE LINE # 194
SJMP ?C0080
; }
; SOURCE LINE # 195
; }
; SOURCE LINE # 196
?C0019:
; //------------------------------------------------------------------------------
; // scan the fourth row
; //------------------------------------------------------------------------------
; KEY_ROW = Row[3];
; SOURCE LINE # 200
MOV DPTR,#Row+03H
CLR A
MOVC A,@A+DPTR
MOV DPTR,#02000H
MOVX @DPTR,A
; Key=KEY_VERTICAL;
; SOURCE LINE # 201
MOV DPTR,#0A000H
MOVX A,@DPTR
MOV Key,A
; if (Key)
; SOURCE LINE # 202
JNZ $ + 5H
LJMP ?C0065
; {
; SOURCE LINE # 203
; if (Vertical0)
; SOURCE LINE # 204
JNB Vertical0,?C0025
; {
; SOURCE LINE # 205
; Temp=KeyElement3[0];
; SOURCE LINE # 206
MOV DPTR,#KeyElement3
?C0077:
; KeyPadStatus=1;
; SOURCE LINE # 207
; break;
; SOURCE LINE # 208
SJMP ?C0080
; }
; SOURCE LINE # 209
?C0025:
;
; if (Vertical1)
; SOURCE LINE # 211
JNB Vertical1,?C0026
; {
; SOURCE LINE # 212
; Temp=KeyElement3[1];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -