📄 ic_card.lst
字号:
(0119)
(0120) if(Key == 12)
0295 300C CPI R16,0xC
0296 F409 BNE 0x0298
(0121) {
(0122) Write_Card_Value();
0297 D79D RCALL _Write_Card_Value
0298 CFE9 RJMP 0x0282
0299 9622 ADIW R28,2
029A D831 RCALL pop_gset5
029B 9508 RET
_Wrong_Card:
Key --> R20
029C D839 RCALL push_gset1
029D 9722 SBIW R28,2
(0123) }
(0124) }
(0125) }
(0126)
(0127) void Wrong_Card(void)
(0128) {
(0129) unsigned char Key = 0 ;
029E 2744 CLR R20
(0130)
(0131) LCD_write_char(0x01,0); //清屏
029F 2722 CLR R18
02A0 2733 CLR R19
02A1 E001 LDI R16,1
02A2 E010 LDI R17,0
02A3 D2F3 RCALL _LCD_write_char
(0132) delay_nms(2);
02A4 E002 LDI R16,2
02A5 E010 LDI R17,0
02A6 D0F0 RCALL _delay_nms
(0133)
(0134) LCD_write_string(3,0,"Wrong Card");
02A7 E888 LDI R24,0x88
02A8 E090 LDI R25,0
02A9 8399 STD Y+1,R25
02AA 8388 STD Y+0,R24
02AB 2722 CLR R18
02AC E003 LDI R16,3
02AD D2BB RCALL _LCD_write_string
(0135) if ( (Menu_flag==1) || (Wrong_flag==1) )
02AE 91800112 LDS R24,Menu_flag
02B0 3081 CPI R24,1
02B1 F021 BEQ 0x02B6
02B2 91800239 LDS R24,Wrong_flag
02B4 3081 CPI R24,1
02B5 F441 BNE 0x02BE
(0136) {
(0137) LCD_write_string(4,1,"Sorry !!");
02B6 E78F LDI R24,0x7F
02B7 E090 LDI R25,0
02B8 8399 STD Y+1,R25
02B9 8388 STD Y+0,R24
02BA E021 LDI R18,1
02BB E004 LDI R16,4
02BC D2AC RCALL _LCD_write_string
(0138) }
02BD C032 RJMP 0x02F0
(0139) else
(0140) {
(0141) LCD_write_string(0,1," Sorry! $: . ");
02BE E68E LDI R24,0x6E
02BF E090 LDI R25,0
02C0 8399 STD Y+1,R25
02C1 8388 STD Y+0,R24
02C2 E021 LDI R18,1
02C3 2700 CLR R16
02C4 D2A4 RCALL _LCD_write_string
(0142) Balance_dis();
02C5 DECA RCALL _Balance_dis
(0143) }
02C6 C029 RJMP 0x02F0
(0144)
(0145) while(1)
(0146) {
(0147) if(IC_SW!=0)
02C7 B380 IN R24,0x10
02C8 7088 ANDI R24,0x8
02C9 BB80 OUT 0x10,R24
02CA 2388 TST R24
02CB F0D9 BEQ 0x02E7
(0148) {
(0149) delay_nms(50); // 检测是否有卡插入
02CC E302 LDI R16,0x32
02CD E010 LDI R17,0
02CE D0C8 RCALL _delay_nms
(0150) if(IC_SW!=0)
02CF B380 IN R24,0x10
02D0 7088 ANDI R24,0x8
02D1 BB80 OUT 0x10,R24
02D2 2388 TST R24
02D3 F099 BEQ 0x02E7
(0151) {
(0152) if (Menu_flag==1)
02D4 91800112 LDS R24,Menu_flag
02D6 3081 CPI R24,1
02D7 F431 BNE 0x02DE
(0153) {
(0154) Menu_flag=0;
02D8 2422 CLR R2
02D9 92200112 STS Menu_flag,R2
(0155) Wrong_flag=0;
02DB 92200239 STS Wrong_flag,R2
(0156) Menu_0();
02DD D547 RCALL _Menu_0
(0157) }
(0158)
(0159) if(Wrong_flag==1)
02DE 91800239 LDS R24,Wrong_flag
02E0 3081 CPI R24,1
02E1 F421 BNE 0x02E6
(0160) {
(0161) Wrong_flag=0;
02E2 2422 CLR R2
02E3 92200239 STS Wrong_flag,R2
(0162) menu_Init();
02E5 D30E RCALL _menu_Init
(0163) }
(0164)
(0165) menu_Init();
02E6 D30D RCALL _menu_Init
(0166) }
(0167) }
(0168)
(0169) if(Menu_flag==0)
02E7 90200112 LDS R2,Menu_flag
02E9 2022 TST R2
02EA F429 BNE 0x02F0
(0170) {
(0171) Key = Key_Scan() ;
02EB D21B RCALL _Key_Scan
02EC 2F40 MOV R20,R16
(0172)
(0173) if(Key == 12)
02ED 300C CPI R16,0xC
02EE F409 BNE 0x02F0
(0174) {
(0175) Write_Card_Value();
02EF D745 RCALL _Write_Card_Value
02F0 CFD6 RJMP 0x02C7
02F1 9622 ADIW R28,2
02F2 D7E6 RCALL pop_gset1
02F3 9508 RET
_Card_Verify:
i --> R20
02F4 D7E1 RCALL push_gset1
02F5 9722 SBIW R28,2
(0176) }
(0177) }
(0178) }
(0179) }
(0180)
(0181) void Card_Verify(void)
(0182) {
(0183) unsigned char i = 0 ;
02F6 2744 CLR R20
(0184)
(0185) for(Card_ID=0;Card_ID<83;Card_ID++)
02F7 2422 CLR R2
02F8 92200060 STS Card_ID,R2
02FA C06D RJMP 0x0368
(0186) {
(0187) if ( IC_Codes_8[2] == EEPROM_read(i) )
02FB 2F04 MOV R16,R20
02FC 2711 CLR R17
02FD D15E RCALL _EEPROM_read
02FE 9020022B LDS R2,IC_Codes_8+2
0300 1620 CP R2,R16
0301 F009 BEQ 0x0303
0302 C05F RJMP 0x0362
(0188) {
(0189) if ( IC_Codes_8[3] == EEPROM_read(1+i) )
0303 2F04 MOV R16,R20
0304 2711 CLR R17
0305 5F0F SUBI R16,0xFF
0306 4F1F SBCI R17,0xFF
0307 D154 RCALL _EEPROM_read
0308 9020022C LDS R2,IC_Codes_8+3
030A 1620 CP R2,R16
030B F009 BEQ 0x030D
030C C055 RJMP 0x0362
(0190) {
(0191) if ( IC_Codes_8[4] == EEPROM_read(2+i) )
030D 2F04 MOV R16,R20
030E 2711 CLR R17
030F 5F0E SUBI R16,0xFE
0310 4F1F SBCI R17,0xFF
0311 D14A RCALL _EEPROM_read
0312 9020022D LDS R2,0x22D
0314 1620 CP R2,R16
0315 F009 BEQ 0x0317
0316 C04B RJMP 0x0362
(0192) {
(0193) if ( IC_Codes_8[5] == EEPROM_read(3+i) )
0317 2F04 MOV R16,R20
0318 2711 CLR R17
0319 5F0D SUBI R16,0xFD
031A 4F1F SBCI R17,0xFF
031B D140 RCALL _EEPROM_read
031C 9020022E LDS R2,0x22E
031E 1620 CP R2,R16
031F F009 BEQ 0x0321
0320 C041 RJMP 0x0362
(0194) {
(0195) if ( IC_Codes_8[6] == EEPROM_read(4+i) )
0321 2F04 MOV R16,R20
0322 2711 CLR R17
0323 5F0C SUBI R16,0xFC
0324 4F1F SBCI R17,0xFF
0325 D136 RCALL _EEPROM_read
0326 9020022F LDS R2,0x22F
0328 1620 CP R2,R16
0329 F009 BEQ 0x032B
032A C037 RJMP 0x0362
(0196) {
(0197) if ( IC_Codes_8[7] == EEPROM_read(5+i) )
032B 2F04 MOV R16,R20
032C 2711 CLR R17
032D 5F0B SUBI R16,0xFB
032E 4F1F SBCI R17,0xFF
032F D12C RCALL _EEPROM_read
0330 90200230 LDS R2,0x230
0332 1620 CP R2,R16
0333 F571 BNE 0x0362
(0198) {
(0199) if( Exist_flag == 1)
0334 91800113 LDS R24,Exist_flag
0336 3081 CPI R24,1
0337 F549 BNE 0x0361
(0200) {
(0201) Exist_flag = 0 ;
0338 2422 CLR R2
0339 92200113 STS Exist_flag,R2
(0202)
(0203) LCD_write_char(0x01,0); //清屏
033B 2722 CLR R18
033C 2733 CLR R19
033D E001 LDI R16,1
033E E010 LDI R17,0
033F D257 RCALL _LCD_write_char
(0204) delay_nms(2);
0340 E002 LDI R16,2
0341 E010 LDI R17,0
0342 D054 RCALL _delay_nms
(0205) LCD_write_string(2,0,"Card Existed");
0343 E681 LDI R24,0x61
0344 E090 LDI R25,0
0345 8399 STD Y+1,R25
0346 8388 STD Y+0,R24
0347 2722 CLR R18
0348 E002 LDI R16,2
0349 D21F RCALL _LCD_write_string
(0206) LCD_write_string(4,1,"Sorry !!");
034A E78F LDI R24,0x7F
034B E090 LDI R25,0
034C 8399 STD Y+1,R25
034D 8388 STD Y+0,R24
034E E021 LDI R18,1
034F E004 LDI R16,4
0350 D218 RCALL _LCD_write_string
0351 C00E RJMP 0x0360
(0207)
(0208) while(1)
(0209) {
(0210) if(IC_SW!=0)
0352 B380 IN R24,0x10
0353 7088 ANDI R24,0x8
0354 BB80 OUT 0x10,R24
0355 2388 TST R24
0356 F049 BEQ 0x0360
(0211) {
(0212) delay_nms(50); // 检测是否有卡插入
0357 E302 LDI R16,0x32
0358 E010 LDI R17,0
0359 D03D RCALL _delay_nms
(0213) if(IC_SW!=0)
035A B380 IN R24,0x10
035B 7088 ANDI R24,0x8
035C BB80 OUT 0x10,R24
035D 2388 TST R24
035E F009 BEQ 0x0360
(0214) {
(0215) Menu_0();
035F D4C5 RCALL _Menu_0
0360 CFF1 RJMP 0x0352
(0216) }
(0217) }
(0218) }
(0219) }
(0220)
(0221) Right_Card();
0361 DEA2 RCALL _Right_Card
(0222) }
(0223) }
(0224) }
(0225) }
(0226) }
(0227) }
(0228)
(0229) i = i + 6 ;
0362 5F4A SUBI R20,0xFA
0363 91800060 LDS R24,Card_ID
0365 5F8F SUBI R24,0xFF
0366 93800060 STS Card_ID,R24
0368 91800060 LDS R24,Card_ID
036A 3583 CPI R24,0x53
036B F408 BCC 0x036D
036C CF8E RJMP 0x02FB
(0230) }
(0231)
(0232) if( Exist_flag == 0)
036D 90200113 LDS R2,Exist_flag
036F 2022 TST R2
0370 F409 BNE 0x0372
(0233) {
(0234) Wrong_Card();
0371 DF2A RCALL _Wrong_Card
(0235) }
0372 9622 ADIW R28,2
0373 D765 RCALL pop_gset1
0374 9508 RET
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\delay.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void) //1us延时函数
(0006) {
(0007) unsigned int i=0;
_delay_1us:
i --> R16
0375 2700 CLR R16
0376 2711 CLR R17
(0008) for (i=0;i<8;i++)
0377 C003 RJMP 0x037B
(0009) {
(0010) asm("nop");
0378 0000 NOP
0379 5F0F SUBI R16,0xFF
037A 4F1F SBCI R17,0xFF
037B 3008 CPI R16,0x8
037C E0E0 LDI R30,0
037D 071E CPC R17,R30
037E F3C8 BCS 0x0378
037F 9508 RET
_delay_nus:
i --> R20
n --> R22
0380 D753 RCALL push_gset2
0381 01B8 MOVW R22,R16
(0011) }
(0012) }
(0013)
(0014) void delay_nus(unsigned int n) //N us延时函数
(0015) {
(0016) unsigned int i=0;
0382 2744 CLR R20
0383 2755 CLR R21
(0017) for (i=0;i<n;i++)
0384 C003 RJMP 0x0388
(0018) delay_1us();
0385 DFEF RCALL _delay_1us
0386 5F4F SUBI R20,0xFF
0387 4F5F SBCI R21,0xFF
0388 1746 CP R20,R22
0389 0757 CPC R21,R23
038A F3D0 BCS 0x0385
038B D73A RCALL pop_gset2
038C 9508 RET
(0019) }
(0020)
(0021) void delay_1ms(void) //1ms延时函数
(0022) {
(0023) unsigned int i;
(0024) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
038D 2700 CLR R16
038E 2711 CLR R17
038F C002 RJMP 0x0392
0390 5F0F SUBI R16,0xFF
0391 4F1F SBCI R17,0xFF
0392 3704 CPI R16,0x74
0393 E0E4 LDI R30,4
0394 071E CPC R17,R30
0395 F3D0 BCS 0x0390
0396 9508 RET
_delay_nms:
i --> R20
n --> R22
0397 D73C RCALL push_gset2
0398 01B8 MOVW R22,R16
(0025) }
(0026)
(0027) void delay_nms(unsigned int n) //N ms延时函数
(0028) {
(0029) unsigned int i=0;
0399 2744 CLR R20
039A 2755 CLR R21
(0030) for (i=0;i<n;i++)
039B C003 RJMP 0x039F
(0031) delay_1ms();
039C DFF0 RCALL _delay_1ms
039D 5F4F SUBI R20,0xFF
039E 4F5F SBCI R21,0xFF
039F 1746 CP R20,R22
03A0 0757 CPC R21,R23
03A1 F3D0 BCS 0x039C
03A2 D723 RCALL pop_gset2
03A3 9508 RET
_display:
line --> R22
position --> R20
Num --> R10
03A4 D72D RCALL push_gset3
03A5 2F42 MOV R20,R18
03A6 2EA0 MOV R10,R16
03A7 9722 SBIW R28,2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -