+_-
来自「avr单片机icc写的密码锁」· 代码 · 共 1,672 行 · 第 1/4 页
TXT
1,672 行
0021E 2755 CLR R21
0021F 3445 CPI R20,0x45
00220 E0E0 LDI R30,0
00221 075E CPC R21,R30
00222 F1A9 BEQ 0x0258
00223 3446 CPI R20,0x46
00224 E0E0 LDI R30,0
00225 075E CPC R21,R30
00226 F409 BNE 0x0228
00227 C03C RJMP 0x0264
00228 3447 CPI R20,0x47
00229 E0E0 LDI R30,0
0022A 075E CPC R21,R30
0022B F409 BNE 0x022D
0022C C043 RJMP 0x0270
0022D 344D CPI R20,0x4D
0022E E0E0 LDI R30,0
0022F 075E CPC R21,R30
00230 F159 BEQ 0x025C
00231 344E CPI R20,0x4E
00232 E0E0 LDI R30,0
00233 075E CPC R21,R30
00234 F199 BEQ 0x0268
00235 344F CPI R20,0x4F
00236 E0E0 LDI R30,0
00237 075E CPC R21,R30
00238 F409 BNE 0x023A
00239 C03A RJMP 0x0274
0023A 3445 CPI R20,0x45
0023B E0E0 LDI R30,0
0023C 075E CPC R21,R30
0023D F40C BGE 0x023F
0023E C048 RJMP 0x0287
0023F 3545 CPI R20,0x55
00240 E0E0 LDI R30,0
00241 075E CPC R21,R30
00242 F0E9 BEQ 0x0260
00243 3546 CPI R20,0x56
00244 E0E0 LDI R30,0
00245 075E CPC R21,R30
00246 F129 BEQ 0x026C
00247 3547 CPI R20,0x57
00248 E0E0 LDI R30,0
00249 075E CPC R21,R30
0024A F169 BEQ 0x0278
0024B 354D CPI R20,0x5D
0024C E0E0 LDI R30,0
0024D 075E CPC R21,R30
0024E F169 BEQ 0x027C
0024F 354E CPI R20,0x5E
00250 E0E0 LDI R30,0
00251 075E CPC R21,R30
00252 F169 BEQ 0x0280
00253 354F CPI R20,0x5F
00254 E0E0 LDI R30,0
00255 075E CPC R21,R30
00256 F169 BEQ 0x0284
00257 C02F RJMP 0x0287
(0017) {
(0018) case keycode_s1: g=1;break;
00258 E081 LDI R24,1
00259 9380 0061 STS g,R24
0025B C02B RJMP 0x0287
(0019) case keycode_s2: g=2;break;
0025C E082 LDI R24,2
0025D 9380 0061 STS g,R24
0025F C027 RJMP 0x0287
(0020) case keycode_s3: g=3;break;
00260 E083 LDI R24,3
00261 9380 0061 STS g,R24
00263 C023 RJMP 0x0287
(0021) case keycode_s9: g=4;break;
00264 E084 LDI R24,4
00265 9380 0061 STS g,R24
00267 C01F RJMP 0x0287
(0022) case keycode_s10: g=5;break;
00268 E085 LDI R24,5
00269 9380 0061 STS g,R24
0026B C01B RJMP 0x0287
(0023) case keycode_s11: g=6;break;
0026C E086 LDI R24,6
0026D 9380 0061 STS g,R24
0026F C017 RJMP 0x0287
(0024) case keycode_s17: g=7;break;
00270 E087 LDI R24,7
00271 9380 0061 STS g,R24
00273 C013 RJMP 0x0287
(0025) case keycode_s18: g=8;break;
00274 E088 LDI R24,0x8
00275 9380 0061 STS g,R24
00277 C00F RJMP 0x0287
(0026) case keycode_s19: g=9;break;
00278 E089 LDI R24,0x9
00279 9380 0061 STS g,R24
0027B C00B RJMP 0x0287
(0027) case keycode_s4: g=0;break;
0027C 2422 CLR R2
0027D 9220 0061 STS g,R2
0027F C007 RJMP 0x0287
(0028) case keycode_s12: g=12;break;
00280 E08C LDI R24,0xC
00281 9380 0061 STS g,R24
00283 C003 RJMP 0x0287
(0029) case keycode_s20: g=20;break;
00284 E184 LDI R24,0x14
00285 9380 0061 STS g,R24
(0030) }
(0031) if(g>=0&&g<=9)
00287 9020 0061 LDS R2,g
00289 2D82 MOV R24,R2
0028A 3080 CPI R24,0
0028B F0B8 BCS 0x02A3
0028C E089 LDI R24,0x9
0028D 1582 CP R24,R2
0028E F0A0 BCS 0x02A3
(0032) {j++,mimas[j-1]=g;
0028F 9180 0060 LDS R24,j
00291 5F8F SUBI R24,0xFF
00292 9380 0060 STS j,R24
00294 E686 LDI R24,0x66
00295 E090 LDI R25,0
00296 91E0 0060 LDS R30,j
00298 27FF CLR R31
00299 0FE8 ADD R30,R24
0029A 1FF9 ADC R31,R25
0029B 8220 ST Z,R2
(0033) if(j==7){j=0;}}
0029C 9180 0060 LDS R24,j
0029E 3087 CPI R24,7
0029F F419 BNE 0x02A3
002A0 2422 CLR R2
002A1 9220 0060 STS j,R2
(0034) if(g==12)
002A3 9180 0061 LDS R24,g
002A5 308C CPI R24,0xC
002A6 F441 BNE 0x02AF
(0035) {j=0,write_com12864(0x01),
002A7 2422 CLR R2
002A8 9220 0060 STS j,R2
002AA E001 LDI R16,1
002AB DE51 RCALL _write_com12864
002AC E005 LDI R16,5
002AD E010 LDI R17,0
002AE DDE4 RCALL _delay
(0036) delay(5); }
(0037) if(g==20)
002AF 9180 0061 LDS R24,g
002B1 3184 CPI R24,0x14
002B2 F449 BNE 0x02BC
(0038) {j=0,xg=1;
002B3 2422 CLR R2
002B4 9220 0060 STS j,R2
002B6 E081 LDI R24,1
002B7 E090 LDI R25,0
002B8 9390 0064 STS xg+1,R25
002BA 9380 0063 STS xg,R24
(0039) }
002BC 940E 04F5 CALL pop_xgset300C
002BE 9009 LD R0,Y+
002BF BE0F OUT 0x3F,R0
002C0 91F9 LD R31,Y+
002C1 91E9 LD R30,Y+
002C2 91B9 LD R27,Y+
002C3 91A9 LD R26,Y+
002C4 9199 LD R25,Y+
002C5 9189 LD R24,Y+
002C6 9139 LD R19,Y+
002C7 9129 LD R18,Y+
002C8 9119 LD R17,Y+
002C9 9109 LD R16,Y+
002CA 9099 LD R9,Y+
002CB 9089 LD R8,Y+
002CC 9079 LD R7,Y+
002CD 9069 LD R6,Y+
002CE 9059 LD R5,Y+
002CF 9049 LD R4,Y+
002D0 9039 LD R3,Y+
002D1 9029 LD R2,Y+
002D2 9019 LD R1,Y+
002D3 9009 LD R0,Y+
002D4 9518 RETI
(0040)
(0041) }
(0042)
(0043) void main()
(0044) {uint i;
(0045) for(i=0;i<6;i++)
_main:
i --> R20
002D5 2744 CLR R20
002D6 2755 CLR R21
002D7 C00A RJMP 0x02E2
(0046) {mimac[i]=read_eep(i);
002D8 018A MOVW R16,R20
002D9 DF22 RCALL _read_eep
002DA E68D LDI R24,0x6D
002DB E090 LDI R25,0
002DC 01FA MOVW R30,R20
002DD 0FE8 ADD R30,R24
002DE 1FF9 ADC R31,R25
002DF 8300 ST Z,R16
002E0 5F4F SUBI R20,0xFF
002E1 4F5F SBCI R21,0xFF
002E2 3046 CPI R20,6
002E3 E0E0 LDI R30,0
002E4 075E CPC R21,R30
002E5 F390 BCS 0x02D8
(0047) }
(0048) //液晶配置
(0049) port_init12864();
002E6 DDD8 RCALL _port_init12864
(0050) lcd_init12864();
002E7 DDDF RCALL _lcd_init12864
(0051)
(0052) write_com12864(0x01);
002E8 E001 LDI R16,1
002E9 DE13 RCALL _write_com12864
(0053) delay_ms(10);
002EA E00A LDI R16,0xA
002EB E010 LDI R17,0
002EC DDBD RCALL _delay_ms
(0054)
(0055) //451配置
(0056) port_init451();
002ED DEB5 RCALL _port_init451
(0057) int0_init();
002EE DEFA RCALL _int0_init
(0058) ch451_init();
002EF DEF6 RCALL _ch451_init
(0059) ch451_write(CH451_RESET);
002F0 E001 LDI R16,1
002F1 E012 LDI R17,2
002F2 DEBA RCALL _ch451_write
(0060) ch451_write(CH451_SYSON2);
002F3 E003 LDI R16,3
002F4 E014 LDI R17,4
002F5 DEB7 RCALL _ch451_write
(0061) ch451_write(CH451_TWINKLE);
002F6 E000 LDI R16,0
002F7 E016 LDI R17,6
002F8 DEB4 RCALL _ch451_write
(0062) ch451_write(CH451_BCD);
002F9 E80F LDI R16,0x8F
002FA E015 LDI R17,5
002FB DEB1 RCALL _ch451_write
(0063) for(;;)
(0064) {
(0065) switch(j)
002FC 9160 0060 LDS R22,j
002FE 2777 CLR R23
002FF 3060 CPI R22,0
00300 0767 CPC R22,R23
00301 F0F9 BEQ 0x0321
00302 3061 CPI R22,1
00303 E0E0 LDI R30,0
00304 077E CPC R23,R30
00305 F409 BNE 0x0307
00306 C069 RJMP 0x0370
00307 3062 CPI R22,2
00308 E0E0 LDI R30,0
00309 077E CPC R23,R30
0030A F409 BNE 0x030C
0030B C06A RJMP 0x0376
0030C 3063 CPI R22,3
0030D E0E0 LDI R30,0
0030E 077E CPC R23,R30
0030F F409 BNE 0x0311
00310 C06D RJMP 0x037E
00311 3064 CPI R22,4
00312 E0E0 LDI R30,0
00313 077E CPC R23,R30
00314 F409 BNE 0x0316
00315 C06E RJMP 0x0384
00316 3065 CPI R22,5
00317 E0E0 LDI R30,0
00318 077E CPC R23,R30
00319 F409 BNE 0x031B
0031A C071 RJMP 0x038C
0031B 3066 CPI R22,6
0031C E0E0 LDI R30,0
0031D 077E CPC R23,R30
0031E F409 BNE 0x0320
0031F C072 RJMP 0x0392
00320 CFDB RJMP 0x02FC
(0066) {
(0067) case 0:
(0068) {if(xg==3){
00321 9180 0063 LDS R24,xg
00323 9190 0064 LDS R25,xg+1
00325 3083 CPI R24,3
00326 E0E0 LDI R30,0
00327 079E CPC R25,R30
00328 F459 BNE 0x0334
(0069) write_com12864(0x06);
00329 E006 LDI R16,6
0032A DDD2 RCALL _write_com12864
(0070) delay(5);
0032B E005 LDI R16,5
0032C E010 LDI R17,0
0032D DD65 RCALL _delay
(0071) lcd_pos12864(0,0);
0032E 2722 CLR R18
0032F 2700 CLR R16
00330 DDF8 RCALL _lcd_pos12864
(0072) writeString12864("再入新密码");
00331 EE01 LDI R16,0xE1
00332 E010 LDI R17,0
00333 DE1C RCALL _writeString12864
(0073) }
(0074) if(xg==2){
00334 9180 0063 LDS R24,xg
00336 9190 0064 LDS R25,xg+1
00338 3082 CPI R24,2
00339 E0E0 LDI R30,0
0033A 079E CPC R25,R30
0033B F459 BNE 0x0347
(0075) write_com12864(0x06);
0033C E006 LDI R16,6
0033D DDBF RCALL _write_com12864
(0076) delay(5);
0033E E005 LDI R16,5
0033F E010 LDI R17,0
00340 DD52 RCALL _delay
(0077) lcd_pos12864(0,0);
00341 2722 CLR R18
00342 2700 CLR R16
00343 DDE5 RCALL _lcd_pos12864
(0078) writeString12864("输入新密码");
00344 ED06 LDI R16,0xD6
00345 E010 LDI R17,0
00346 DE09 RCALL _writeString12864
(0079) }
(0080) if(xg==1){
00347 9180 0063 LDS R24,xg
00349 9190 0064 LDS R25,xg+1
0034B 3081 CPI R24,1
0034C E0E0 LDI R30,0
0034D 079E CPC R25,R30
0034E F459 BNE 0x035A
(0081) write_com12864(0x06);
0034F E006 LDI R16,6
00350 DDAC RCALL _write_com12864
(0082) delay(5);
00351 E005 LDI R16,5
00352 E010 LDI R17,0
00353 DD3F RCALL _delay
(0083) lcd_pos12864(0,0);
00354 2722 CLR R18
00355 2700 CLR R16
00356 DDD2 RCALL _lcd_pos12864
(0084) writeString12864("输入原密码");
00357 EC0B LDI R16,0xCB
00358 E010 LDI R17,0
00359 DDF6 RCALL _writeString12864
(0085) }
(0086) if(xg==0){
0035A 9020 0063 LDS R2,xg
0035C 9030 0064 LDS R3,xg+1
0035E 2022 TST R2
0035F F009 BEQ 0x0361
00360 CF9B RJMP 0x02FC
00361 2033 TST R3
00362 F009 BEQ 0x0364
00363 CF98 RJMP 0x02FC
(0087) write_com12864(0x06);
00364 E006 LDI R16,6
00365 DD97 RCALL _write_com12864
(0088) delay(5);
00366 E005 LDI R16,5
00367 E010 LDI R17,0
00368 DD2A RCALL _delay
(0089) lcd_pos12864(0,0);
00369 2722 CLR R18
0036A 2700 CLR R16
0036B DDBD RCALL _lcd_pos12864
(0090) writeString12864("请输入密码");
0036C EC00 LDI R16,0xC0
0036D E010 LDI R17,0
0036E DDE1 RCALL _writeString12864
(0091) }
(0092) break;}
0036F CF8C RJMP 0x02FC
(0093) case 1:
(0094) {lcd_pos12864(0,5);
00370 E025 LDI R18,5
00371 2700 CLR R16
00372 DDB6 RCALL _lcd_pos12864
(0095) write_dat12864(0X0f);
00373 E00F LDI R16,0xF
00374 DD9E RCALL _write_dat12864
(0096) break;}
00375 CF86 RJMP 0x02FC
(0097) case 2:
(0098) {lcd_pos12864(0,5);
00376 E025 LDI R18,5
00377 2700 CLR R16
00378 DDB0 RCALL _lcd_pos12864
(0099) write_dat12864(0X0f);
00379 E00F LDI R16,0xF
0037A DD98 RCALL _write_dat12864
(0100) write_dat12864(0X0f);
0037B E00F LDI R16,0xF
0037C DD96 RCALL _write_dat12864
(0101) break;}
0037D CF7E RJMP 0x02FC
(0102) case 3:
(0103) {lcd_pos12864(0,6);
0037E E026 LDI R18,6
0037F 2700 CLR R16
00380 DDA8 RCALL _lcd_pos12864
(0104) write_dat12864(0X0f);
00381 E00F LDI R16,0xF
00382 DD90 RCALL _write_dat12864
(0105) break;}
00383 CF78 RJMP 0x02FC
(0106) case 4:
(0107) {lcd_pos12864(0,6);
00384 E026 LDI R18,6
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?