?? key2.lst
字號:
"File: KEY2.ASM Holtek Cross-Assembler Version 2.86 Page 1
1 0000 include ht82k96e.inc
2 0000 ;include usbrf.inc
3 0000 ;include usbfifo.inc
4 0000 include keyequ.inc
5 0000
6 0000
7 0000
8 0000 ;**************************************************************************************
9 0000 Scaninc equ pac
10 0000 Scanin equ pa
11 0000 scanout1C_adr equ 15h
12 0000 ScanOut1C equ pbc
13 0000 ScanOut1 equ pb
14 0000 scanout2C_adr equ 17h
15 0000 ScanOut2C equ pcc
16 0000 ScanOut2 equ pc
17 0000 Scan2_Mask EQU 0F0H ;pc4~7
18 0000 scanout3C_adr equ 19h
19 0000 ScanOut3C equ pdc
20 0000 ScanOut3 equ pd
21 0000
22 0000 LED_PORT_c equ pcc
23 0000 led_port equ pc ;pc1~3, Scrl, Num, Cap
24 0000 LED_Mask EQU 0FH
25 0000 @LED_Num EQU 2 ; Num Lock LED
26 0000 @LED_Caps EQU 4 ; Caps Lock LEd
27 0000 @LED_Scrl EQU 1 ; Scroll Lock LED
28 0000 led_num equ pc.1
29 0000 led_cap equ pc.2
30 0000 led_scrl equ pc.3
31 0000 led_num_c equ pcc.1
32 0000 led_cap_c equ pcc.2
33 0000 led_scrl_C equ pcc.3
34 0000
35 0000
36 0000 ;KB_LED
37 0000 @Num_bit EQU 0 ; Num Lock LED
38 0000 @Cap_bit EQU 1 ; Caps Lock LEd
39 0000 @Scrl_bit EQU 2 ; Scroll Lock LED
40 0000
41 0000 DEBOUNCE equ 20H
42 0000 REPORT_KB_SIZE equ 8
43 0000 end_of_ScanLines equ 20
44 0000 USB_REG_BANK equ 1
45 0000 ;*************************************************************************
46 0000
47 0000 key_var .section 'data'
48 0000 00 key_mdfb db ?
49 0001 00 key_rsvb db ?
50 0002 00 key_code1b db ?
51 0003 00 key_code2b db ?
52 0004 00 key_code3b db ?
53 0005 00 key_code4b db ?
54 0006 00 key_code5b db ?
55 0007 00 key_code6b db ?
"File: KEY2.ASM Holtek Cross-Assembler Version 2.86 Page 2
56 0008 00 key_buf_end db ?
57 0009 00 indexbuf db ?
58 000A 00 buff_index db ?
59 000B 00 scanlineno db ?
60 000C 00 currentstate db ?
61 000D 00 currentstate1 db ?
62 000E 0014[ STATE_BUF_BEG db 20 dup(?) ;the buffer for keyboard scan line
00
]
63 0022 00 STATE_BUF_END db ?
64 0023 00 DebounceCounter db ?
65 0024 00 scantemp db ?
66 0025 00 GhostScanLine db ?
67 0026 00 BitMap db ?
68 0027 00 ChangeKeyMap db ?
69 0028 00 KeyNo db ?
70 0029 00 KeyBit db ?
71 002A 00 temp1 db ?
72 002B 00 KB_LED db ?
73 002C
74 002C 00 bPhantom dbit
75 002C bKB_KeyUpt dbit
76 002D
77 002D public bKB_KeyUpt
78 002D public kb_led
79 002D
80 002D
81 002D ;public key_mdfb
82 002D ;public key_rsvb
83 002D ;public key_code1b
84 002D ;public key_code2b
85 002D ;public key_code3b
86 002D ;public key_code4b
87 002D ;public key_code5b
88 002D ;public key_code6b
89 002D ;public key_buf_end
90 002D ;public buff_index
91 002D ;public indexbuf
92 002D ;public scanlineno
93 002D ;public currentstate
94 002D ;public currentstate1
95 002D ;public STATE_BUF_BEG ;the buffer for keyboard scan line
96 002D ;public STATE_BUF_END
97 002D ;public DebounceCounter
98 002D ;public scantemp
99 002D ;public GhostScanLine
100 002D ;public BitMap
101 002D ;public ChangeKeyMap
102 002D ;public KeyNo
103 002D ;public KeyBit
104 002D ;public temp1
105 002D ;public KB_LED
106 002D ;public key_rpt_cnt
107 002D
108 002D
109 002D ;*************************************************************************
110 002D extern exit_of_examine_kb_state :near
111 002D
112 002D ;extern KEY_MdfB :byte
113 002D ;extern KEY_RsvB :byte
"File: KEY2.ASM Holtek Cross-Assembler Version 2.86 Page 3
114 002D ;extern KEY_Code1B :byte
115 002D ;extern KEY_Code2B :byte
116 002D ;extern KEY_Code3B :byte
117 002D ;extern KEY_Code4B :byte
118 002D ;extern KEY_Code5B :byte
119 002D ;extern KEY_Code6B :byte
120 002D ;extern KEY_BUF_END :byte
121 002D
122 002D extern FIFO_OUT1 :byte
123 002D extern fifo_out2 :byte
124 002D extern fifo_out3 :byte
125 002D extern fifo_out4 :byte
126 002D extern fifo_out5 :byte
127 002D extern fifo_out6 :byte
128 002D extern fifo_out7 :byte
129 002D extern fifo_out8 :byte
130 002D extern FIFO_SendLen :byte
131 002D
132 002D
133 002D ;extern BUFF_Index :byte
134 002D ;extern IndexBuf :byte
135 002D ;extern scanlineno :byte
136 002D ;extern CurrentState :byte
137 002D ;extern CurrentState1 :byte
138 002D ;extern STATE_BUF_BEG :byte
139 002D ;extern DebounceCounter :byte
140 002D ;extern ScanTemp :byte
141 002D ;extern GhostScanLine :byte
142 002D ;extern BitMap :byte
143 002D ;extern ChangeKeyMap :byte
144 002D ;extern KeyNo :byte
145 002D ;extern Keybit :byte
146 002D ;extern temp1 :byte
147 002D ;
148 002D
149 002D
150 0000 kb_code .section 'code'
151 0000 ;----------------------------------------------------------------------------
152 0000 ;scan key, get data, parsing & send data
153 0000 ;maybe need check suspend
154 0000 examine_kb_state:
155 0000 ; clr key_modify
156 0000
157 0000 ; clr break_key
158 0000 0001 CLR WDT
159 0001 ;set scan line to low
160 0001 ;Get the port and bit no. of scan line
161 0001 0700 R MOV A,ScanLineNo ;
162 0002 2000 R CALL GetScanPortAndBit ;Output: PortNo & BitNo
163 0003 ;Delay
164 0003 0F0A MOV A,10 ;Delay 30 intruction time
165 0004 2000 R CALL DelayNInst ; about 20 us in 6 M sysclk
166 0005 ;get key state of scan line
167 0005 0712 MOV A,ScanIn ;Get key state
168 0006 0080 R MOV CurrentState,A ;Save key state
169 0007
170 0007 0700 R MOV A,ScanLineNo ;get current line state pointer
171 0008 0B00 R ADD A,OFFSET STATE_BUF_BEG
172 0009 0081 MOV MP0,A ;
173 000A 0700 MOV A,R0 ;get current line state data
"File: KEY2.ASM Holtek Cross-Assembler Version 2.86 Page 4
174 000B 0400 R XOR A,CurrentState ;Whether current line no change ?
175 000C 3D0A SZ Z ;No
176 000D 2800 R JMP ScanOneRowOK ;Yes
177 000E ;first or not
178 000E 1080 R SZ DebounceCounter ;first ?
179 000F 2800 R JMP NotFirstKeyChanged ;No
180 0010 FirstKeyChanged: ;Yes
181 0010 1F00 R CLR DebounceCounter ;Reset DebounceCounter to 0
182 0011 1480 R INC DebounceCounter ;Update debounce counter
183 0012 0700 R MOV A,CurrentState ;save current key state to
184 0013 0080 R MOV CurrentState1,A ; template buffer
185 0014 2800 R JMP Exit_Scan_Keyboard ;to next scan
186 0015 NotFirstKeyChanged:
187 0015 0700 R MOV A,CurrentState ;Is any key state changed ?
188 0016 0400 R XOR A,CurrentState1 ;
189 0017 390A SNZ Z ;
190 0018 2800 R JMP FirstKeyChanged ;Yes
191 0019 ;No
192 0019 1480 R INC DebounceCounter ;Update debounce counter
193 001A 0F20 MOV A,DEBOUNCE ;>= debounce time ?
194 001B 0200 R SUB A,DebounceCounter ;
195 001C 3C0A SZ C ;
196 001D 2800 R JMP Exit_Scan_Keyboard ;No
197 001E 1F00 R CLR DebounceCounter ;Yes: debounce has finished and
198 001F ; reinitilize
199 001F
200 001F
201 001F ;----------------------------------------------------------------------------
202 001F ;Debounce finished
203 001F ;check Phantom key
204 001F CheckPhantom:
205 001F 0001 CLR WDT
206 0020 ;How many key pressed ?
207 0020 0F08 MOV A,08H ;Scan in numbers = 8
208 0021 0080 R MOV Temp1,A ;
209 0022 1F00 R CLR ScanTemp ;initial number of keys pressed to 0
210 0023 0700 R MOV A,CurrentState ;current key pressed state
211 0024 CheckPhantomLp:
212 0024 1B85 RRC ACC ;check every column by right rotated
213 0025 380A SNZ C ;key pressed ?
214 0026 1480 R INC ScanTemp ;Yes: Update the number of keys pressed
215 0027 1780 R SDZ Temp1 ;
216 0028 2800 R JMP CheckPhantomLp ;
217 0029 0700 R MOV A,ScanTemp ;ScanTemp = the number of keys pressed
218 002A 0EFE AND A,0FEH ;Key pressed numbers >= 2 ?
219 002B 3D0A SZ Z ;
220 002C 2800 R JMP CheckPhantomOK ;No (Have phantom key is impossible)
221 002D ;Yes (Maybe have phantom key)
222 002D ;Scan line to found phantom key
223 002D 1F00 R CLR GhostScanLine ;scan from line 0
224 002E GhostLoop:
225 002E 0001 CLR WDT
226 002F ;Whether phost scan line is equal to current scan line ?
227 002F 0700 R MOV A,ScanLineNo
228 0030 0400 R XOR A,GhostScanLine
229 0031 3D0A SZ Z
230 0032 2800 R JMP NextLine ;Yes
231 0033 ;set scan line to low
232 0033 ;Get the port and bit no. of scan line
233 0033 0700 R MOV A,GhostScanLine ;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -