📄 ic_card.lst
字号:
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\display.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include "lcd1602.h"
(0004)
(0005) void display(unsigned char Num , unsigned char position)
(0006) {
(0007) unsigned char line=0 ;
03A8 2766 CLR R22
(0008)
(0009) if(position<16) { line=0; }
03A9 3140 CPI R20,0x10
03AA F408 BCC 0x03AC
03AB C002 RJMP 0x03AE
(0010) else { position -= 16 ; line=1; }
03AC 5140 SUBI R20,0x10
03AD E061 LDI R22,1
(0011)
(0012) switch (Num)
03AE 24BB CLR R11
03AF 01C5 MOVW R24,R10
03B0 3080 CPI R24,0
03B1 E0E0 LDI R30,0
03B2 079E CPC R25,R30
03B3 F40C BGE 0x03B5
03B4 C099 RJMP 0x044E
03B5 E180 LDI R24,0x10
03B6 158A CP R24,R10
03B7 059B CPC R25,R11
03B8 F40C BGE 0x03BA
03B9 C094 RJMP 0x044E
03BA E002 LDI R16,2
03BB E010 LDI R17,0
03BC 0195 MOVW R18,R10
03BD D6F8 RCALL empy16s
03BE 01F8 MOVW R30,R16
03BF E286 LDI R24,0x26
03C0 E090 LDI R25,0
03C1 0FE8 ADD R30,R24
03C2 1FF9 ADC R31,R25
03C3 9005 LPM R0,Z+
03C4 9014 LPM R1,0(Z)
03C5 01F0 MOVW R30,R0
03C6 9409 IJMP
(0013) {
(0014) case 0 : LCD_write_string(position,line,"0");
03C7 EF82 LDI R24,0xF2
03C8 E090 LDI R25,0
03C9 8399 STD Y+1,R25
03CA 8388 STD Y+0,R24
03CB 2F26 MOV R18,R22
03CC 2F04 MOV R16,R20
03CD D19B RCALL _LCD_write_string
(0015) break ;
03CE C07F RJMP 0x044E
(0016) case 1 : LCD_write_string(position,line,"1");
03CF EF80 LDI R24,0xF0
03D0 E090 LDI R25,0
03D1 8399 STD Y+1,R25
03D2 8388 STD Y+0,R24
03D3 2F26 MOV R18,R22
03D4 2F04 MOV R16,R20
03D5 D193 RCALL _LCD_write_string
(0017) break ;
03D6 C077 RJMP 0x044E
(0018) case 2 : LCD_write_string(position,line,"2");
03D7 EE8E LDI R24,0xEE
03D8 E090 LDI R25,0
03D9 8399 STD Y+1,R25
03DA 8388 STD Y+0,R24
03DB 2F26 MOV R18,R22
03DC 2F04 MOV R16,R20
03DD D18B RCALL _LCD_write_string
(0019) break ;
03DE C06F RJMP 0x044E
(0020) case 3 : LCD_write_string(position,line,"3");
03DF EE8C LDI R24,0xEC
03E0 E090 LDI R25,0
03E1 8399 STD Y+1,R25
03E2 8388 STD Y+0,R24
03E3 2F26 MOV R18,R22
03E4 2F04 MOV R16,R20
03E5 D183 RCALL _LCD_write_string
(0021) break ;
03E6 C067 RJMP 0x044E
(0022) case 4 : LCD_write_string(position,line,"4");
03E7 EE8A LDI R24,0xEA
03E8 E090 LDI R25,0
03E9 8399 STD Y+1,R25
03EA 8388 STD Y+0,R24
03EB 2F26 MOV R18,R22
03EC 2F04 MOV R16,R20
03ED D17B RCALL _LCD_write_string
(0023) break ;
03EE C05F RJMP 0x044E
(0024) case 5 : LCD_write_string(position,line,"5");
03EF EE88 LDI R24,0xE8
03F0 E090 LDI R25,0
03F1 8399 STD Y+1,R25
03F2 8388 STD Y+0,R24
03F3 2F26 MOV R18,R22
03F4 2F04 MOV R16,R20
03F5 D173 RCALL _LCD_write_string
(0025) break ;
03F6 C057 RJMP 0x044E
(0026) case 6 : LCD_write_string(position,line,"6");
03F7 EE86 LDI R24,0xE6
03F8 E090 LDI R25,0
03F9 8399 STD Y+1,R25
03FA 8388 STD Y+0,R24
03FB 2F26 MOV R18,R22
03FC 2F04 MOV R16,R20
03FD D16B RCALL _LCD_write_string
(0027) break ;
03FE C04F RJMP 0x044E
(0028) case 7 : LCD_write_string(position,line,"7");
03FF EE84 LDI R24,0xE4
0400 E090 LDI R25,0
0401 8399 STD Y+1,R25
0402 8388 STD Y+0,R24
0403 2F26 MOV R18,R22
0404 2F04 MOV R16,R20
0405 D163 RCALL _LCD_write_string
(0029) break ;
0406 C047 RJMP 0x044E
(0030) case 8 : LCD_write_string(position,line,"8");
0407 EE82 LDI R24,0xE2
0408 E090 LDI R25,0
0409 8399 STD Y+1,R25
040A 8388 STD Y+0,R24
040B 2F26 MOV R18,R22
040C 2F04 MOV R16,R20
040D D15B RCALL _LCD_write_string
(0031) break ;
040E C03F RJMP 0x044E
(0032) case 9 : LCD_write_string(position,line,"9");
040F EE80 LDI R24,0xE0
0410 E090 LDI R25,0
0411 8399 STD Y+1,R25
0412 8388 STD Y+0,R24
0413 2F26 MOV R18,R22
0414 2F04 MOV R16,R20
0415 D153 RCALL _LCD_write_string
(0033) break ;
0416 C037 RJMP 0x044E
(0034) case 10 : LCD_write_string(position,line,"a");
0417 ED8E LDI R24,0xDE
0418 E090 LDI R25,0
0419 8399 STD Y+1,R25
041A 8388 STD Y+0,R24
041B 2F26 MOV R18,R22
041C 2F04 MOV R16,R20
041D D14B RCALL _LCD_write_string
(0035) break ;
041E C02F RJMP 0x044E
(0036) case 11 : LCD_write_string(position,line,"b");
041F ED8C LDI R24,0xDC
0420 E090 LDI R25,0
0421 8399 STD Y+1,R25
0422 8388 STD Y+0,R24
0423 2F26 MOV R18,R22
0424 2F04 MOV R16,R20
0425 D143 RCALL _LCD_write_string
(0037) break ;
0426 C027 RJMP 0x044E
(0038) case 12 : LCD_write_string(position,line,"c");
0427 ED8A LDI R24,0xDA
0428 E090 LDI R25,0
0429 8399 STD Y+1,R25
042A 8388 STD Y+0,R24
042B 2F26 MOV R18,R22
042C 2F04 MOV R16,R20
042D D13B RCALL _LCD_write_string
(0039) break ;
042E C01F RJMP 0x044E
(0040) case 13 : LCD_write_string(position,line,"d");
042F ED88 LDI R24,0xD8
0430 E090 LDI R25,0
0431 8399 STD Y+1,R25
0432 8388 STD Y+0,R24
0433 2F26 MOV R18,R22
0434 2F04 MOV R16,R20
0435 D133 RCALL _LCD_write_string
(0041) break ;
0436 C017 RJMP 0x044E
(0042) case 14 : LCD_write_string(position,line,"e");
0437 ED86 LDI R24,0xD6
0438 E090 LDI R25,0
0439 8399 STD Y+1,R25
043A 8388 STD Y+0,R24
043B 2F26 MOV R18,R22
043C 2F04 MOV R16,R20
043D D12B RCALL _LCD_write_string
(0043) break ;
043E C00F RJMP 0x044E
(0044) case 15 : LCD_write_string(position,line,"f");
043F ED84 LDI R24,0xD4
0440 E090 LDI R25,0
0441 8399 STD Y+1,R25
0442 8388 STD Y+0,R24
0443 2F26 MOV R18,R22
0444 2F04 MOV R16,R20
0445 D123 RCALL _LCD_write_string
(0045) break ;
0446 C007 RJMP 0x044E
(0046) case 16 : LCD_write_string(position,line,"*");
0447 ED82 LDI R24,0xD2
0448 E090 LDI R25,0
0449 8399 STD Y+1,R25
044A 8388 STD Y+0,R24
044B 2F26 MOV R18,R22
044C 2F04 MOV R16,R20
044D D11B RCALL _LCD_write_string
(0047) break ;
(0048) }
(0049) delay_nms(2);
044E E002 LDI R16,2
044F E010 LDI R17,0
0450 DF46 RCALL _delay_nms
0451 9622 ADIW R28,2
0452 D675 RCALL pop_gset3
0453 9508 RET
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\EEPROM_R_W.C
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003)
(0004) void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
(0005) {
(0006) /* 等待上一次写操作结束 */
(0007) while(EECR & (1<<EEWE))
_EEPROM_write:
ucData --> R18
uiAddress --> R16
0454 99E1 SBIC 0x1C,1
0455 CFFE RJMP _EEPROM_write
(0008) ;
(0009) /* 设置地址和数据寄存器 */
(0010) EEAR = uiAddress;
0456 BB1F OUT 0x1F,R17
0457 BB0E OUT 0x1E,R16
(0011) EEDR = ucData;
0458 BB2D OUT 0x1D,R18
(0012) /* 置位EEMWE */
(0013) EECR |= (1<<EEMWE);
0459 9AE2 SBI 0x1C,2
(0014) /* 置位EEWE以启动写操作 */
(0015) EECR |= (1<<EEWE);
045A 9AE1 SBI 0x1C,1
045B 9508 RET
(0016) }
(0017)
(0018) unsigned char EEPROM_read(unsigned int uiAddress)
(0019) {
(0020) /* 等待上一次写操作结束 */
(0021) while(EECR & (1<<EEWE))
_EEPROM_read:
uiAddress --> R16
045C 99E1 SBIC 0x1C,1
045D CFFE RJMP _EEPROM_read
(0022) ;
(0023) /* 设置地址寄存器 */
(0024) EEAR = uiAddress;
045E BB1F OUT 0x1F,R17
045F BB0E OUT 0x1E,R16
(0025) /* 设置EERE以启动读操作 */
(0026) EECR |= (1<<EERE);
0460 9AE0 SBI 0x1C,0
(0027) /* 自数据寄存器返回数据 */
(0028) return EEDR;
0461 B30D IN R16,0x1D
0462 9508 RET
_Erase_bit:
i --> R20
Erase_flag --> R22
0463 D670 RCALL push_gset2
0464 2F60 MOV R22,R16
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Erase_Card.c
(0001) /*******************************************************************************
(0002)
(0003) 擦除高字节 函数
(0004)
(0005) *******************************************************************************/
(0006)
(0007) #include <iom8v.h>
(0008) #include <macros.h>
(0009) #include "lcd1602.h"
(0010)
(0011) unsigned char Erase_IC_FLAG=0 ; // 擦除高位标志
(0012)
(0013) void Erase_bit(unsigned char Erase_flag) // 擦除位函数
(0014) {
(0015) unsigned char i=0 ;
0465 2744 CLR R20
(0016)
(0017) Reset_0 ;
0466 B388 IN R24,0x18
0467 7B8F ANDI R24,0xBF
0468 BB88 OUT 0x18,R24
(0018) CLK_0 ; // IC_Card 卡复位
0469 B388 IN R24,0x18
046A 778F ANDI R24,0x7F
046B BB88 OUT 0x18,R24
(0019) delay_nms(10);
046C E00A LDI R16,0xA
046D E010 LDI R17,0
046E DF28 RCALL _delay_nms
(0020)
(0021) Reset_1 ; // 把
046F 9AC6 SBI 0x18,6
(0022) delay_nus(8) ;
0470 E008 LDI R16,0x8
0471 E010 LDI R17,0
0472 DF0D RCALL _delay_nus
(0023) CLK_1 ; // 地
0473 9AC7 SBI 0x18,7
(0024) delay_nus(44) ;
0474 E20C LDI R16,0x2C
0475 E010 LDI R17,0
0476 DF09 RCALL _delay_nus
(0025) CLK_0 ; // 址
0477 B388 IN R24,0x18
0478 778F ANDI R24,0x7F
0479 BB88 OUT 0x18,R24
(0026) delay_nus(8) ;
047A E008 LDI R16,0x8
047B E010 LDI R17,0
047C DF03 RCALL _delay_nus
(0027) Reset_0 ; // 加
047D B388 IN R24,0x18
047E 7B8F ANDI R24,0xBF
047F BB88 OUT 0x18,R24
(0028) delay_nus(10) ;
0480 E00A LDI R16,0xA
0481 E010 LDI R17,0
0482 DEFD RCALL _delay_nus
(0029) delay_nus(27) ; // 到
0483 E10B LDI R16,0x1B
0484 E010 LDI R17,0
0485 DEFA RCALL _delay_nus
(0030)
(0031) for (i=0;i<Erase_flag;i++) // 要
0486 C00E RJMP 0x0495
(0032) {
(0033) CLK_1 ; // 擦
0487 9AC7 SBI 0x18,7
(0034) delay_nus(40) ;
0488 E208 LDI R16,0x28
0489 E010 LDI R17,0
048A DEF5 RCALL _delay_nus
(0035) CLK_0 ; // 的
048B B388 IN R24,0x18
048C 778F ANDI R24,0x7F
048D BB88 OUT 0x18,R24
(0036) delay_nus(25) ;
048E E109 LDI R16,0x19
048F E010 LDI R17,0
0490 DEEF RCALL _delay_nus
(0037) delay_nus(20) ; // 位
0491 E104 LDI R16,0x14
0492 E010 LDI R17,0
0493 DEEC RCALL _delay_nus
0494 9543 INC R20
0495 1746 CP R20,R22
0496 F380 BCS 0x0487
(0038) }
(0039)
(0040) Reset_1 ; // 擦
0497 9AC6 SBI 0x18,6
(0041) delay_nus(50) ;
0498 E302 LDI R16,0x32
0499 E010 LDI R17,0
049A DEE5 RCALL _delay_nus
(0042) Reset_0 ; // 除
049B B388 IN R24,0x18
049C 7B8F ANDI R24,0xBF
049D BB88 OUT 0x18,R24
(0043) delay_nus(10) ;
049E E00A LDI R16,0xA
049F E010 LDI R17,0
04A0 DEDF RCALL _delay_nus
(0044) CLK_1 ; // 字
04A1 9AC7 SBI 0x18,7
(0045) delay_nus(15000) ;
04A2 E908 LDI R16,0x98
04A3 E31A LDI R17,0x3A
04A4 DEDB RCALL _delay_nus
(0046) CLK_0 ; // 节
04A5 B388 IN R24,0x18
04A6 778F ANDI R24,0x7F
04A7 BB88 OUT 0x18,R24
(0047) delay_nus(50) ;
04A8 E302 LDI R16,0x32
04A9 E010 LDI R17,0
04AA DED5 RCALL _delay_nus
(0048) Reset_1 ; //
04AB 9AC6 SBI 0x18,6
(0049) delay_nus(50) ;
04AC E302 LDI R16,0x32
04AD E010 LDI R17,0
04AE DED1 RCALL _delay_nus
(0050) Reset_0 ; // 时
04AF B388 IN R24,0x18
04B0 7B8F ANDI R24,0xBF
04B1 BB88 OUT 0x18,R24
(0051) delay_nus(100) ;
04B2 E604 LDI R16,0x64
04B3 E010 LDI R17,0
04B4 DECB RCALL _delay_nus
(0052) CLK_1 ; //
04B5 9AC7 SBI 0x18,7
(0053) delay_nus(50000) ;
04B6 E500 LDI R16,0x50
04B7 EC13 LDI R17,0xC3
04B8 DEC7 RCALL _delay_nus
(0054) CLK_0 ; // 序
04B9 B388 IN R24,0x18
04BA 778F ANDI R24,0x7F
04BB BB88 OUT 0x18,R24
(0055)
(0056) Read_Card();
04BC D45A RCALL _Read_Card
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -