📄 keyscan.lst
字号:
1 000000 ;**********************************************
2 000000 ;Name :mnkey
3 000000 ;Function:
4 000000 ;Input :
5 000000 ;Output :
6 000000 ;Register Used:
7 000000 ;***********************************************
8 000000 mnkey:
9 000000 call keyin
10 000000 call keychk
11 000000 call keycvt
12 000000
13 000000 mnkey90:
14 000000 ret
15 000000
16 000000 ;**********************************************
17 000000 ;Name :keyin
18 000000 ;Function:keyinbuf.7=0:key on line0,=1:key on line1
19 000000 ;Input :
20 000000 ;Output :
21 000000 ;Register Used:var1,var2
22 000000 ;***********************************************
23 000000 keyin:
24 000000 ;-----
25 000000 mov_ var1,p2 ;push p2 value
26 000000 ;// mov_ var2,p4
27 000000 mov a,#11110000b
28 000000 or p4,a
29 000000 call p2input
30 000000 clr keyinbuf
31 000000 ;----
32 000000 ;start scan key
33 000000 ;line0
34 000000 bclr line0
35 000000 call delay_10us
36 000000 mov a,p2
37 000000 and a,#01111111b
38 000000 mov keyinbuf,a
39 000000 xor a,#01111111b
40 000000 b0bts1 fz
41 000000 jmp keyin80 ;line0 上有键按下,退出line1扫描
42 000000 ;-----
43 000000 ;line1 ;line0 上无键按下,接着扫描line1
44 000000 bclr line1
45 000000 call delay_10us
46 000000 mov a,p2
47 000000 and a,#01111111b
48 000000 mov keyinbuf,a
49 000000 xor a,#01111111b
50 000000 b0bts0 fz
51 000000 jmp keyin80 ;line1 上无键按下
52 000000 ;----
53 000000 bset keyinbuf.7 ;line1 上有键按下
54 000000 ;------
55 000000 keyin80:
56 000000 bset line0
57 000000 bset line1
58 000000 ;----
59 000000 call p2output
60 000000 mov_ p2,var1 ;pop p2 value
61 000000 ;// mov_ p4,var2
62 000000 ;---
63 000000 keyin90:
64 000000 ret
65 000000
66 000000 ;**********************************************
67 000000 ;Name :keychk
68 000000 ;Function:
69 000000 ;Input :
70 000000 ;Output :
71 000000 ;Register Used:
72 000000 ;***********************************************
73 000000 keychk:
74 000000 mov a,keyinbuf ;check line0 state
75 000000 cmprs a,keychkbuf
76 000000 jmp keychk10
77 000000
78 000000 b0bts1 keystatflag ;check have key push or not?
79 000000 jmp keychk90
80 000000
81 000000 mov a,keychat ;banish key's dithering
82 000000 b0bts1 fz
83 000000 jmp keychk90
84 000000
85 000000 mov a,keychkbuf ;save key value
86 000000 mov keycvtbuf,a
87 000000
88 000000 bclr keystatflag
89 000000 jmp keychk90
90 000000 ;---
91 000000 keychk10:
92 000000 mov a,keyinbuf ;send key state to bufram
93 000000 mov keychkbuf,a
94 000000
95 000000 bset keystatflag ;set key push flag
96 000000 mov a,#3 ;3
97 000000 mov keychat,a ;banish key's dithering 30ms
98 000000 ;---
99 000000 keychk90:
100 000000 ret
101 000000
102 000000
103 000000 ;**********************************************
104 000000 ;Name :keycvt
105 000000 ;Function:
106 000000 ;Input :
107 000000 ;Output :
108 000000 ;Register Used:temp3,temp4
109 000000 ;***********************************************
110 000000 keycvt:
111 000000 mov a,keycvtbuf ;convert key value
112 000000 cmprs a,keyoldbuf
113 000000 jmp keycvt10
114 000000 jmp keycvt90
115 000000 ;-----------------------------------------
116 000000 keycvt10:
117 000000 b0bts0 lineflag ;=0:line0 key,=1:line1 key
118 000000 jmp line1keypush
119 000000 ;----
120 000000 ;line0 key push
121 000000 mov a,keycvtbuf
122 000000 mov keyoldbuf,a
123 000000 or a,#10000000b
124 000000 mov temp3,a
125 000000 mov_ temp4,#7
126 000000 ;-----------------------------------------
127 000000 loopline0:
128 000000 bclr fc
129 000000 rrcm temp3
130 000000 b0bts1 fc
131 000000 jmp line0getonekey
132 000000 decms temp4
133 000000 jmp loopline0
134 000000 ;-----
135 000000 bset keyokflag
136 000000 ret
137 000000 ;-----
138 000000 line0getonekey:
139 000000 mov a,temp4
140 000000 mov aplcode,a
141 000000 ret
142 000000 ;------------------------------------------
143 000000 line1keypush:
144 000000 mov a,keycvtbuf
145 000000 mov keyoldbuf,a
146 000000 or a,#10000000b
147 000000 mov temp3,a
148 000000 ;----
149 000000 and a,#00000011b
150 000000 b0bts0 fz
151 000000 jmp twokeypush
152 000000 mov_ temp4,#5
153 000000 loopline1:
154 000000 bclr fc
155 000000 rrcm temp3
156 000000 b0bts1 fc
157 000000 jmp line1getonekey
158 000000 decms temp4
159 000000 jmp loopline1
160 000000 ;-----
161 000000 bset keyokflag
162 000000 ret
163 000000 ;-----
164 000000 line1getonekey:
165 000000 mov a,temp4
166 000000 add a,#7
167 000000 mov aplcode,a
168 000000 ret
169 000000 ;----
170 000000 twokeypush:
171 000000 mov a,#13
172 000000 mov aplcode,a
173 000000 bset keyokflag
174 000000 ;-----
175 000000 keycvt90:
176 000000 ret
177 000000
178 000000 ;*******************************************************
179 000000 ;*******************************************************
180 000000 ;*******************************************************
181 000000 p2input:
182 000000 clr p2m ;set p2 is input
183 000000 mov_ p2ur,#0ffh ;set p2 have pull_up
184 000000 jmp $+1
185 000000 jmp $+1
186 000000 ret
187 000000 ;-----------------
188 000000 p2output:
189 000000 mov_ p2m,#0ffh ;set p2 is output
190 000000 clr p2ur ;clr p2 pull_up
191 000000 jmp $+1
192 000000 jmp $+1
193 000000 ret
194 000000
195 000000
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -