📄 4x4key.lst
字号:
(0033) PORTA|=(1<<ls138b);
11B 9ADE SBI 0x1B,6
(0034) PORTA&=~(1<<ls138c);
11C 98DD CBI 0x1B,5
(0035) s_ms(600);
11D E508 LDI R16,0x58
11E E012 LDI R17,2
11F DF2D RCALL _s_ms
(0036) sendbyte(0);//数码管4
120 2700 CLR R16
121 DF34 RCALL _sendbyte
(0037) PORTA|=(1<<ls138a);
122 9ADF SBI 0x1B,7
(0038) PORTA|=(1<<ls138b);
123 9ADE SBI 0x1B,6
(0039) PORTA&=~(1<<ls138c);
124 98DD CBI 0x1B,5
(0040) s_ms(600);
125 E508 LDI R16,0x58
126 E012 LDI R17,2
127 DF25 RCALL _s_ms
(0041) sendbyte(0);//数码管5
128 2700 CLR R16
129 DF2C RCALL _sendbyte
(0042) PORTA&=~(1<<ls138a);
12A 98DF CBI 0x1B,7
(0043) PORTA&=~(1<<ls138b);
12B 98DE CBI 0x1B,6
(0044) PORTA|=(1<<ls138c);
12C 9ADD SBI 0x1B,5
(0045) s_ms(600);
12D E508 LDI R16,0x58
12E E012 LDI R17,2
12F DF1D RCALL _s_ms
(0046) sendbyte(0);//数码管6
130 2700 CLR R16
131 DF24 RCALL _sendbyte
(0047) PORTA|=(1<<ls138a);
132 9ADF SBI 0x1B,7
(0048) PORTA&=~(1<<ls138b);
133 98DE CBI 0x1B,6
(0049) PORTA|=(1<<ls138c);
134 9ADD SBI 0x1B,5
(0050) s_ms(600);
135 E508 LDI R16,0x58
136 E012 LDI R17,2
137 DF15 RCALL _s_ms
(0051) sendbyte(0);//数码管7
138 2700 CLR R16
139 DF1C RCALL _sendbyte
(0052) PORTA&=~(1<<ls138a);
13A 98DF CBI 0x1B,7
(0053) PORTA|=(1<<ls138b);
13B 9ADE SBI 0x1B,6
(0054) PORTA|=(1<<ls138c);
13C 9ADD SBI 0x1B,5
(0055) s_ms(600);
13D E508 LDI R16,0x58
13E E012 LDI R17,2
13F DF0D RCALL _s_ms
(0056) sendbyte(0);//数码管8
140 2700 CLR R16
141 DF14 RCALL _sendbyte
(0057) PORTA|=(1<<ls138a);
142 9ADF SBI 0x1B,7
(0058) PORTA|=(1<<ls138b);
143 9ADE SBI 0x1B,6
(0059) PORTA|=(1<<ls138c);
144 9ADD SBI 0x1B,5
(0060) s_ms(600);
145 E508 LDI R16,0x58
146 E012 LDI R17,2
147 DF05 RCALL _s_ms
148 940C 01F4 JMP pop_xgset003C
_turn:
key --> R16
14A 934A ST R20,-Y
14B 935A ST R21,-Y
FILE: E:\产品\开发板\光盘\16实验程序\4x4键盘\4x4key_main.c
(0001) //4x4键盘试验程序
(0002) //使用板载的4x4键盘
(0003) //数码管显示按键值
(0004)
(0005) #define uchar unsigned char
(0006) #define uint unsigned int
(0007) #include<iom128v.h>
(0008) #include"ch595.h"
(0009) #include"encoder.h"
(0010) #include"key_value.h"
(0011) #include"disp.h"
(0012)
(0013) uchar a1,a2,a3;
(0014)
(0015) //键值转换
(0016) turn(uchar key)
(0017) {
(0018) switch(key)
14C 2F40 MOV R20,R16
14D 2755 CLR R21
14E 3241 CPI R20,0x21
14F E0E0 LDI R30,0
150 075E CPC R21,R30
151 F409 BNE 0x0153
152 C052 RJMP 0x01A5
153 3242 CPI R20,0x22
154 E0E0 LDI R30,0
155 075E CPC R21,R30
156 F409 BNE 0x0158
157 C055 RJMP 0x01AD
158 3244 CPI R20,0x24
159 E0E0 LDI R30,0
15A 075E CPC R21,R30
15B F409 BNE 0x015D
15C C058 RJMP 0x01B5
15D 3248 CPI R20,0x28
15E E0E0 LDI R30,0
15F 075E CPC R21,R30
160 F409 BNE 0x0162
161 C05B RJMP 0x01BD
162 E288 LDI R24,0x28
163 E090 LDI R25,0
164 1784 CP R24,R20
165 0795 CPC R25,R21
166 F0AC BLT 0x017C
167 3141 CPI R20,0x11
168 E0E0 LDI R30,0
169 075E CPC R21,R30
16A F409 BNE 0x016C
16B C037 RJMP 0x01A3
16C 3142 CPI R20,0x12
16D E0E0 LDI R30,0
16E 075E CPC R21,R30
16F F409 BNE 0x0171
170 C03A RJMP 0x01AB
171 3144 CPI R20,0x14
172 E0E0 LDI R30,0
173 075E CPC R21,R30
174 F409 BNE 0x0176
175 C03D RJMP 0x01B3
176 3148 CPI R20,0x18
177 E0E0 LDI R30,0
178 075E CPC R21,R30
179 F409 BNE 0x017B
17A C040 RJMP 0x01BB
17B C046 RJMP 0x01C2
17C 3441 CPI R20,0x41
17D E0E0 LDI R30,0
17E 075E CPC R21,R30
17F F139 BEQ 0x01A7
180 3442 CPI R20,0x42
181 E0E0 LDI R30,0
182 075E CPC R21,R30
183 F159 BEQ 0x01AF
184 3444 CPI R20,0x44
185 E0E0 LDI R30,0
186 075E CPC R21,R30
187 F179 BEQ 0x01B7
188 3448 CPI R20,0x48
189 E0E0 LDI R30,0
18A 075E CPC R21,R30
18B F409 BNE 0x018D
18C C032 RJMP 0x01BF
18D 3441 CPI R20,0x41
18E E0E0 LDI R30,0
18F 075E CPC R21,R30
190 F40C BGE 0x0192
191 C030 RJMP 0x01C2
192 3841 CPI R20,0x81
193 E0E0 LDI R30,0
194 075E CPC R21,R30
195 F099 BEQ 0x01A9
196 3842 CPI R20,0x82
197 E0E0 LDI R30,0
198 075E CPC R21,R30
199 F0B9 BEQ 0x01B1
19A 3844 CPI R20,0x84
19B E0E0 LDI R30,0
19C 075E CPC R21,R30
19D F0D9 BEQ 0x01B9
19E 3848 CPI R20,0x88
19F E0E0 LDI R30,0
1A0 075E CPC R21,R30
1A1 F0F9 BEQ 0x01C1
1A2 C01F RJMP 0x01C2
(0019) {
(0020) case 0x11:
(0021) key=0x01;break;
1A3 E001 LDI R16,1
1A4 C01D RJMP 0x01C2
(0022) case 0x21:
(0023) key=0x02;break;
1A5 E002 LDI R16,2
1A6 C01B RJMP 0x01C2
(0024) case 0x41:
(0025) key=0x03;break;
1A7 E003 LDI R16,3
1A8 C019 RJMP 0x01C2
(0026) case 0x81:
(0027) key=0x04;break;
1A9 E004 LDI R16,4
1AA C017 RJMP 0x01C2
(0028) case 0x12:
(0029) key=0x05;break;
1AB E005 LDI R16,5
1AC C015 RJMP 0x01C2
(0030) case 0x22:
(0031) key=0x06;break;
1AD E006 LDI R16,6
1AE C013 RJMP 0x01C2
(0032) case 0x42:
(0033) key=0x07;break;
1AF E007 LDI R16,7
1B0 C011 RJMP 0x01C2
(0034) case 0x82:
(0035) key=0x08;break;
1B1 E008 LDI R16,0x8
1B2 C00F RJMP 0x01C2
(0036) case 0x14:
(0037) key=0x09;break;
1B3 E009 LDI R16,0x9
1B4 C00D RJMP 0x01C2
(0038) case 0x24:
(0039) key=0x0a;break;
1B5 E00A LDI R16,0xA
1B6 C00B RJMP 0x01C2
(0040) case 0x44:
(0041) key=0x0b;break;
1B7 E00B LDI R16,0xB
1B8 C009 RJMP 0x01C2
(0042) case 0x84:
(0043) key=0x0c;break;
1B9 E00C LDI R16,0xC
1BA C007 RJMP 0x01C2
(0044) case 0x18:
(0045) key=0x0d;break;
1BB E00D LDI R16,0xD
1BC C005 RJMP 0x01C2
(0046) case 0x28:
(0047) key=0x0e;break;
1BD E00E LDI R16,0xE
1BE C003 RJMP 0x01C2
(0048) case 0x48:
(0049) key=0xa0f;break;
1BF E00F LDI R16,0xF
1C0 C001 RJMP 0x01C2
(0050) case 0x88:
(0051) key=0x10;break;
1C1 E100 LDI R16,0x10
(0052) }
(0053) return(key);
1C2 2711 CLR R17
1C3 9159 LD R21,Y+
1C4 9149 LD R20,Y+
1C5 9508 RET
(0054) }
(0055)
(0056) //主函数
(0057) main()
(0058) {
(0059) uchar key,tem;
(0060) //端口初始化
(0061) DDRA=0xff;
_main:
tem --> R10
key --> R12
1C6 EF8F LDI R24,0xFF
1C7 BB8A OUT 0x1A,R24
(0062) PORTA=0xff;
1C8 BB8B OUT 0x1B,R24
(0063) DDRC=0xff;
1C9 BB84 OUT 0x14,R24
(0064) PORTC=0xff;
1CA BB85 OUT 0x15,R24
(0065) DDRE=0x00;
1CB 2422 CLR R2
1CC B822 OUT 0x02,R2
(0066) PORTE=0xff;
1CD B983 OUT 0x03,R24
(0067) DDRF=0xfc;
1CE EF8C LDI R24,0xFC
1CF 9380 0061 STS a2,R24
1D1 C008 RJMP 0x01DA
(0068) while(1)
(0069) {
(0070) key=key_value(); //读取键值
1D2 DEE3 RCALL _key_value
1D3 2EC0 MOV R12,R16
(0071) if(key!=0)
1D4 2300 TST R16
1D5 F011 BEQ 0x01D8
(0072) {
(0073) tem=turn(key); //转换译码
1D6 DF73 RCALL _turn
1D7 2EA0 MOV R10,R16
(0074) }
(0075) disp(tem); //显示键值
FILE: <library>
1D8 2D0A MOV R16,R10
1D9 DF21 RCALL _disp
1DA CFF7 RJMP 0x01D2
1DB 9508 RET
mod8u:
1DC 9468 BSET 6
1DD C001 RJMP xdiv8u
div8u:
1DE 94E8 BCLR 6
xdiv8u:
1DF 932A ST R18,-Y
1E0 92FA ST R15,-Y
1E1 92EA ST R14,-Y
1E2 24FF CLR R15
1E3 24EE CLR R14
1E4 E120 LDI R18,0x10
1E5 0F00 LSL R16
1E6 1CFF ROL R15
1E7 1CEE ROL R14
1E8 16E1 CP R14,R17
1E9 F010 BCS 0x01EC
1EA 1AE1 SUB R14,R17
1EB 9503 INC R16
1EC 952A DEC R18
1ED F7B9 BNE 0x01E5
1EE F40E BRTC 0x01F0
1EF 2D0E MOV R16,R14
1F0 90E9 LD R14,Y+
1F1 90F9 LD R15,Y+
1F2 9129 LD R18,Y+
1F3 9508 RET
pop_xgset003C:
1F4 90A9 LD R10,Y+
1F5 90B9 LD R11,Y+
1F6 90C9 LD R12,Y+
1F7 90D9 LD R13,Y+
1F8 9508 RET
push_xgsetF0FC:
1F9 937A ST R23,-Y
1FA 936A ST R22,-Y
push_xgset30FC:
1FB 935A ST R21,-Y
1FC 934A ST R20,-Y
push_xgset00FC:
1FD 92FA ST R15,-Y
1FE 92EA ST R14,-Y
push_xgset003C:
1FF 92DA ST R13,-Y
200 92CA ST R12,-Y
201 92BA ST R11,-Y
202 92AA ST R10,-Y
203 9508 RET
push_xgsetF000:
204 937A ST R23,-Y
205 936A ST R22,-Y
206 935A ST R21,-Y
207 934A ST R20,-Y
208 9508 RET
pop_xgsetF000:
209 9149 LD R20,Y+
20A 9159 LD R21,Y+
20B 9169 LD R22,Y+
20C 9179 LD R23,Y+
20D 9508 RET
push_xgsetF00C:
20E 937A ST R23,-Y
20F 936A ST R22,-Y
210 935A ST R21,-Y
211 934A ST R20,-Y
212 92BA ST R11,-Y
213 92AA ST R10,-Y
214 9508 RET
pop_xgsetF00C:
215 90A9 LD R10,Y+
216 90B9 LD R11,Y+
217 9149 LD R20,Y+
218 9159 LD R21,Y+
219 9169 LD R22,Y+
21A 9179 LD R23,Y+
21B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -