📄 pro.lst
字号:
0219 E20E LDI R16,0x2E
021A E010 LDI R17,0
021B 940E073E CALL _Write_Data
(0114) Write_Data(VOL_H);
021D 9100007A LDS R16,VOL_H
021F 9110007B LDS R17,VOL_H+1
0221 940E073E CALL _Write_Data
(0115) // Write_Data(VOL_L0);
(0116) Write_Position(2,13);
0223 E02D LDI R18,0xD
0224 E030 LDI R19,0
0225 E002 LDI R16,2
0226 E010 LDI R17,0
0227 940E074E CALL _Write_Position
(0117) Write_String("v");
0229 ED0B LDI R16,0xDB
022A E010 LDI R17,0
022B 940E0768 CALL _Write_String
022D 940E08AD CALL pop_gset2
022F 9508 RET
_KeyScan:
key_return --> R20
i --> R22
0230 940E08BC CALL push_gset2
(0118)
(0119) }
(0120) #define key_mask 0b00001111
(0121) uint KeyScan(void)
(0122) {
(0123) static uint key_value,key_line;
(0124) uint key_return=16;
0232 E140 LDI R20,0x10
0233 E050 LDI R21,0
(0125) uchar i;
(0126) DDRD=0xf0;
0234 EF80 LDI R24,0xF0
0235 BB81 OUT 0x11,R24
(0127) key_line=0b00010000;
0236 E180 LDI R24,0x10
0237 E090 LDI R25,0
0238 939000E2 STS key_line+1,R25
023A 938000E1 STS key_line,R24
(0128) for(i=1;i<=4;i++)
023C E061 LDI R22,1
023D C025 RJMP 0x0263
(0129) {
(0130) PORTD=~key_line;
023E 902000E1 LDS R2,key_line
0240 903000E2 LDS R3,key_line+1
0242 9420 COM R2
0243 9430 COM R3
0244 BA22 OUT 0x12,R2
(0131) PORTD=~key_line;
0245 902000E1 LDS R2,key_line
0247 903000E2 LDS R3,key_line+1
0249 9420 COM R2
024A 9430 COM R3
024B BA22 OUT 0x12,R2
(0132) key_value=key_mask&PIND;
024C B380 IN R24,0x10
024D 2799 CLR R25
024E 708F ANDI R24,0xF
024F 7090 ANDI R25,0
0250 939000E0 STS key_value+1,R25
0252 938000DF STS key_value,R24
(0133) if(key_value==key_mask)
0254 308F CPI R24,0xF
0255 E0E0 LDI R30,0
0256 079E CPC R25,R30
0257 F471 BNE 0x0266
(0134) key_line<<=1;
0258 902000E1 LDS R2,key_line
025A 903000E2 LDS R3,key_line+1
025C 0C22 LSL R2
025D 1C33 ROL R3
025E 923000E2 STS key_line+1,R3
0260 922000E1 STS key_line,R2
0262 9563 INC R22
0263 E084 LDI R24,4
0264 1786 CP R24,R22
0265 F6C0 BCC 0x023E
(0135) else
(0136) break;
(0137) }
(0138) delay_nms(5);
0266 E005 LDI R16,5
0267 E010 LDI R17,0
0268 940E010B CALL _delay_nms
(0139) if(key_value==(key_mask&PIND))
026A B380 IN R24,0x10
026B 2799 CLR R25
026C 708F ANDI R24,0xF
026D 7090 ANDI R25,0
026E 902000DF LDS R2,key_value
0270 903000E0 LDS R3,key_value+1
0272 1628 CP R2,R24
0273 0639 CPC R3,R25
0274 F009 BEQ 0x0276
0275 C08D RJMP 0x0303
(0140) {
(0141)
(0142) switch(key_line|key_value)
0276 916000E1 LDS R22,key_line
0278 917000E2 LDS R23,key_line+1
027A 2962 OR R22,R2
027B 2973 OR R23,R3
027C 3267 CPI R22,0x27
027D E0E0 LDI R30,0
027E 077E CPC R23,R30
027F F409 BNE 0x0281
0280 C068 RJMP 0x02E9
0281 326B CPI R22,0x2B
0282 E0E0 LDI R30,0
0283 077E CPC R23,R30
0284 F409 BNE 0x0286
0285 C060 RJMP 0x02E6
0286 326D CPI R22,0x2D
0287 E0E0 LDI R30,0
0288 077E CPC R23,R30
0289 F409 BNE 0x028B
028A C058 RJMP 0x02E3
028B 326E CPI R22,0x2E
028C E0E0 LDI R30,0
028D 077E CPC R23,R30
028E F409 BNE 0x0290
028F C050 RJMP 0x02E0
0290 E28E LDI R24,0x2E
0291 E090 LDI R25,0
0292 1786 CP R24,R22
0293 0797 CPC R25,R23
0294 F0A4 BLT 0x02A9
0295 3167 CPI R22,0x17
0296 E0E0 LDI R30,0
0297 077E CPC R23,R30
0298 F409 BNE 0x029A
0299 C043 RJMP 0x02DD
029A 316B CPI R22,0x1B
029B E0E0 LDI R30,0
029C 077E CPC R23,R30
029D F409 BNE 0x029F
029E C03B RJMP 0x02DA
029F 316D CPI R22,0x1D
02A0 E0E0 LDI R30,0
02A1 077E CPC R23,R30
02A2 F409 BNE 0x02A4
02A3 C033 RJMP 0x02D7
02A4 316E CPI R22,0x1E
02A5 E0E0 LDI R30,0
02A6 077E CPC R23,R30
02A7 F161 BEQ 0x02D4
02A8 C05A RJMP 0x0303
02A9 3467 CPI R22,0x47
02AA E0E0 LDI R30,0
02AB 077E CPC R23,R30
02AC F409 BNE 0x02AE
02AD C047 RJMP 0x02F5
02AE 346B CPI R22,0x4B
02AF E0E0 LDI R30,0
02B0 077E CPC R23,R30
02B1 F409 BNE 0x02B3
02B2 C03F RJMP 0x02F2
02B3 346D CPI R22,0x4D
02B4 E0E0 LDI R30,0
02B5 077E CPC R23,R30
02B6 F409 BNE 0x02B8
02B7 C037 RJMP 0x02EF
02B8 346E CPI R22,0x4E
02B9 E0E0 LDI R30,0
02BA 077E CPC R23,R30
02BB F181 BEQ 0x02EC
02BC 3467 CPI R22,0x47
02BD E0E0 LDI R30,0
02BE 077E CPC R23,R30
02BF F40C BGE 0x02C1
02C0 C042 RJMP 0x0303
02C1 3867 CPI R22,0x87
02C2 E0E0 LDI R30,0
02C3 077E CPC R23,R30
02C4 F409 BNE 0x02C6
02C5 C03B RJMP 0x0301
02C6 386B CPI R22,0x8B
02C7 E0E0 LDI R30,0
02C8 077E CPC R23,R30
02C9 F409 BNE 0x02CB
02CA C033 RJMP 0x02FE
02CB 386D CPI R22,0x8D
02CC E0E0 LDI R30,0
02CD 077E CPC R23,R30
02CE F161 BEQ 0x02FB
02CF 386E CPI R22,0x8E
02D0 E0E0 LDI R30,0
02D1 077E CPC R23,R30
02D2 F129 BEQ 0x02F8
02D3 C02F RJMP 0x0303
(0143) {
(0144) case 0b00011110:key_return=7;
02D4 E047 LDI R20,7
02D5 E050 LDI R21,0
(0145) break;
02D6 C02C RJMP 0x0303
(0146) case 0b00011101:key_return=8;
02D7 E048 LDI R20,0x8
02D8 E050 LDI R21,0
(0147) break;
02D9 C029 RJMP 0x0303
(0148) case 0b00011011:key_return=9;
02DA E049 LDI R20,0x9
02DB E050 LDI R21,0
(0149) break;
02DC C026 RJMP 0x0303
(0150) case 0b00010111:key_return=11;
02DD E04B LDI R20,0xB
02DE E050 LDI R21,0
(0151) break;
02DF C023 RJMP 0x0303
(0152) case 0b00101110:key_return=4;
02E0 E044 LDI R20,4
02E1 E050 LDI R21,0
(0153) break;
02E2 C020 RJMP 0x0303
(0154) case 0b00101101:key_return=5;
02E3 E045 LDI R20,5
02E4 E050 LDI R21,0
(0155) break;
02E5 C01D RJMP 0x0303
(0156) case 0b00101011:key_return=6;
02E6 E046 LDI R20,6
02E7 E050 LDI R21,0
(0157) break;
02E8 C01A RJMP 0x0303
(0158) case 0b00100111:key_return=10;
02E9 E04A LDI R20,0xA
02EA E050 LDI R21,0
(0159) break;
02EB C017 RJMP 0x0303
(0160) case 0b01001110:key_return=1;
02EC E041 LDI R20,1
02ED E050 LDI R21,0
(0161) break;
02EE C014 RJMP 0x0303
(0162) case 0b01001101:key_return=2;
02EF E042 LDI R20,2
02F0 E050 LDI R21,0
(0163) break;
02F1 C011 RJMP 0x0303
(0164) case 0b01001011:key_return=3;
02F2 E043 LDI R20,3
02F3 E050 LDI R21,0
(0165) break;
02F4 C00E RJMP 0x0303
(0166) case 0b01000111:key_return=12;
02F5 E04C LDI R20,0xC
02F6 E050 LDI R21,0
(0167) break;
02F7 C00B RJMP 0x0303
(0168) case 0b10001110:key_return=0;
02F8 2744 CLR R20
02F9 2755 CLR R21
(0169) break;
02FA C008 RJMP 0x0303
(0170) case 0b10001101:key_return=13;//小数点
02FB E04D LDI R20,0xD
02FC E050 LDI R21,0
(0171) break;
02FD C005 RJMP 0x0303
(0172) case 0b10001011:key_return=14;//ENTER
02FE E04E LDI R20,0xE
02FF E050 LDI R21,0
(0173) break;
0300 C002 RJMP 0x0303
(0174) case 0b10000111:key_return=15;//启动自动扫描
0301 E04F LDI R20,0xF
0302 E050 LDI R21,0
(0175) break;
(0176) }
(0177) }
(0178) return key_return;
0303 018A MOVW R16,R20
0304 940E08AD CALL pop_gset2
0306 9508 RET
_read_keyvalue:
i --> R22
temp --> R20
keycode --> R22
0307 940E08BC CALL push_gset2
(0179) }
(0180)
(0181)
(0182) void read_keyvalue()
(0183) {
(0184) uint temp=0;
0309 2744 CLR R20
030A 2755 CLR R21
(0185) uint i=0;
030B 2766 CLR R22
030C 2777 CLR R23
(0186) uchar keycode=16;
030D E160 LDI R22,0x10
(0187) keycode=KeyScan();
030E DF21 RCALL _KeyScan
030F 2F60 MOV R22,R16
(0188) if(((keycode >=0)&&(keycode <=9)&&(cn < 4))||((keycode ==13)&&(cn == 1)))
0310 3000 CPI R16,0
0311 F038 BCS 0x0319
0312 E089 LDI R24,0x9
0313 1780 CP R24,R16
0314 F020 BCS 0x0319
0315 91800087 LDS R24,cn
0317 3084 CPI R24,4
0318 F040 BCS 0x0321
0319 306D CPI R22,0xD
031A F009 BEQ 0x031C
031B C105 RJMP 0x0421
031C 91800087 LDS R24,cn
031E 3081 CPI R24,1
031F F009 BEQ 0x0321
0320 C100 RJMP 0x0421
(0189) {
(0190) cn++;
0321 91800087 LDS R24,cn
0323 5F8F SUBI R24,0xFF
0324 93800087 STS cn,R24
(0191) switch(keycode)
0326 2777 CLR R23
0327 3060 CPI R22,0
0328 0767 CPC R22,R23
0329 F409 BNE 0x032B
032A C033 RJMP 0x035E
032B 3061 CPI R22,1
032C E0E0 LDI R30,0
032D 077E CPC R23,R30
032E F409 BNE 0x0330
032F C03C RJMP 0x036C
0330 3062 CPI R22,2
0331 E0E0 LDI R30,0
0332 077E CPC R23,R30
0333 F409 BNE 0x0335
0334 C045 RJMP 0x037A
0335 3063 CPI R22,3
0336 E0E0 LDI R30,0
0337 077E CPC R23,R30
0338 F409 BNE 0x033A
0339 C04E RJMP 0x0388
033A 3064 CPI R22,4
033B E0E0 LDI R30,0
033C 077E CPC R23,R30
033D F409 BNE 0x033F
033E C057 RJMP 0x0396
033F 3065 CPI R22,5
0340 E0E0 LDI R30,0
0341 077E CPC R23,R30
0342 F409 BNE 0x0344
0343 C060 RJMP 0x03A4
0344 3066 CPI R22,6
0345 E0E0 LDI R30,0
0346 077E CPC R23,R30
0347 F409 BNE 0x0349
0348 C069 RJMP 0x03B2
0349 3067 CPI R22,7
034A E0E0 LDI R30,0
034B 077E CPC R23,R30
034C F409 BNE 0x034E
034D C072 RJMP 0x03C0
034E 3068 CPI R22,0x8
034F E0E0 LDI R30,0
0350 077E CPC R23,R30
0351 F409 BNE 0x0353
0352 C07B RJMP 0x03CE
0353 3069 CPI R22,0x9
0354 E0E0 LDI R30,0
0355 077E CPC R23,R30
0356 F409 BNE 0x0358
0357 C084 RJMP 0x03DC
0358 306D CPI R22,0xD
0359 E0E0 LDI R30,0
035A 077E CPC R23,R30
035B F409 BNE 0x035D
035C C08D RJMP 0x03EA
035D C099 RJMP 0x03F7
(0192)
(0193) {
(0194)
(0195) case 0:temp=0;SET_VALUE[cn]=temp;break;
035E 2744 CLR R20
035F 2755 CLR R21
0360 90200087 LDS R2,cn
0362 E082 LDI R24,2
0363 9D82 MUL R24,R2
0364 01F0 MOVW R30,R0
0365 EE85 LDI R24,0xE5
0366 E090 LDI R25,0
0367 0FE8 ADD R30,R24
0368 1FF9 ADC R31,R25
0369 8351 STD Z+1,R21
036A 8340 STD Z+0,R20
036B C08B RJMP 0x03F7
(0196)
(0197) case 1:temp=1;SET_VALUE[cn]=temp;break;
036C E041 LDI R20,1
036D E050 LDI R21,0
036E 90200087 LDS R2,cn
0370 E082 LDI R24,2
0371 9D82 MUL R24,R2
0372 01F0 MOVW R30,R0
0373 EE85 LDI R24,0xE5
0374 E090 LDI R25,0
0375 0FE8 ADD R30,R24
0376 1FF9 ADC R31,R25
0377 8351 STD Z+1,R21
0378 8340 STD Z+0,R20
0379 C07D RJMP 0x03F7
(0198)
(0199) case 2:temp=2;SET_VALUE[cn]=temp;break;
037A E042 LDI R20,2
037B E050 LDI R21,0
037C 90200087 LDS R2,cn
037E E082 LDI R24,2
037F 9D82 MUL R24,R2
0380 01F0 MOVW R30,R0
0381 EE85 LDI R24,0xE5
0382 E090 LDI R25,0
0383 0FE8 ADD R30,R24
0384 1FF9 ADC R31,R25
0385 8351 STD Z+1,R21
0386 8340 STD Z+0,R20
0387 C06F RJMP 0x03F7
(0200)
(0201) case 3:temp=3;SET_VALUE[cn]=temp;break;
0388 E043 LDI R20,3
0389 E050 LDI R21,0
038A 90200087 LDS R2,cn
038C E082 LDI R24,2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -