📄 card_verify.lis
字号:
.module Card_Verify.C
.area data(ram, con, rel)
0000 _Card_ID::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Card_Verify.C
0001 .dbsym e Card_ID _Card_ID c
.area lit(rom, con, rel)
0000 L2:
0000 00 .byte 0
0001 000000 .byte 0,0,0
.area text(rom, con, rel)
0000 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Card_Verify.C
0000 .dbfunc e Balance_dis _Balance_dis fV
0000 ; Balance -> R20,R21
0000 ; IC_Balance -> y+0
0000 ; j -> R22
0000 ; i -> R10
0000 ; flag -> R12
.even
0000 _Balance_dis::
0000 00D0 rcall push_gset4
0002 2497 sbiw R28,4
0004 .dbline -1
0004 .dbline 9
0004 ;
0004 ; #include <iom8v.h>
0004 ; #include <macros.h>
0004 ; #include "lcd1602.h"
0004 ;
0004 ; unsigned char Card_ID = 0 ;
0004 ;
0004 ; void Balance_dis(void)
0004 ; {
0004 .dbline 10
0004 ; unsigned char i = 0 , j = 0 , flag = 0 , IC_Balance[4] = { 0 } ;
0004 AA24 clr R10
0006 .dbline 10
0006 6627 clr R22
0008 .dbline 10
0008 CC24 clr R12
000A .dbline 10
000A 80E0 ldi R24,<L2
000C 90E0 ldi R25,>L2
000E FE01 movw R30,R28
0010 04E0 ldi R16,4
0012 10E0 ldi R17,0
0014 FA93 st -y,R31
0016 EA93 st -y,R30
0018 9A93 st -y,R25
001A 8A93 st -y,R24
001C 00D0 rcall asgncblk
001E .dbline 12
001E ;
001E ; unsigned int Balance = 0 ; // 余额变量
001E 4427 clr R20
0020 5527 clr R21
0022 .dbline 14
0022 ;
0022 ; for(i=0;i<4;i++)
0022 1BC0 rjmp L6
0024 L3:
0024 .dbline 15
0024 ; {
0024 .dbline 16
0024 ; flag=0x01 ;
0024 CC24 clr R12
0026 C394 inc R12
0028 .dbline 17
0028 ; for(j=0;j<8;j++)
0028 6627 clr R22
002A 14C0 rjmp L10
002C L7:
002C .dbline 18
002C ; { // 计算出IC_Value[4]中每个字节中有多少位为1
002C .dbline 19
002C ; if((IC_Codes_8[9+i]&flag)!=0) // 并记在IC_Balance[4]数组中
002C 80E0 ldi R24,<_IC_Codes_8+9
002E 90E0 ldi R25,>_IC_Codes_8+9
0030 EA2D mov R30,R10
0032 FF27 clr R31
0034 E80F add R30,R24
0036 F91F adc R31,R25
0038 2080 ldd R2,z+0
003A 2C20 and R2,R12
003C 49F0 breq L11
003E .dbline 20
003E ; {
003E .dbline 21
003E ; IC_Balance[i]++ ;
003E CE01 movw R24,R28
0040 2A2C mov R2,R10
0042 3324 clr R3
0044 280E add R2,R24
0046 391E adc R3,R25
0048 F101 movw R30,R2
004A 8081 ldd R24,z+0
004C 8F5F subi R24,255 ; addi 1
004E 8083 std z+0,R24
0050 .dbline 22
0050 ; }
0050 L11:
0050 .dbline 23
0050 CC0C lsl R12
0052 .dbline 24
0052 L8:
0052 .dbline 17
0052 6395 inc R22
0054 L10:
0054 .dbline 17
0054 6830 cpi R22,8
0056 50F3 brlo L7
0058 .dbline 25
0058 L4:
0058 .dbline 14
0058 A394 inc R10
005A L6:
005A .dbline 14
005A 8A2D mov R24,R10
005C 8430 cpi R24,4
005E 10F3 brlo L3
0060 .dbline 28
0060 ; flag=flag<<1;
0060 ; }
0060 ; }
0060 ;
0060 ; /**************计算出卡内金钱的单元数(一个单元对应0.1元)********************/
0060 ; Balance = IC_Balance[0]*512 + IC_Balance[1]*64 + IC_Balance[2]*8 +IC_Balance[3] ;
0060 2980 ldd R2,y+1
0062 80E4 ldi R24,64
0064 829D mul R24,R2
0066 1001 movw R2,R0
0068 2881 ldd R18,y+0
006A 3327 clr R19
006C 00E0 ldi R16,512
006E 12E0 ldi R17,2
0070 00D0 rcall empy16s
0072 A801 movw R20,R16
0074 420D add R20,R2
0076 531D adc R21,R3
0078 2A80 ldd R2,y+2
007A 88E0 ldi R24,8
007C 829D mul R24,R2
007E 400D add R20,R0
0080 511D adc R21,R1
0082 2B80 ldd R2,y+3
0084 3324 clr R3
0086 420D add R20,R2
0088 531D adc R21,R3
008A .dbline 29
008A ; IC_Balance[0] = Balance / 1000 ; // 计算出卡内金钱的单元数的千位
008A 28EE ldi R18,1000
008C 33E0 ldi R19,3
008E 8A01 movw R16,R20
0090 00D0 rcall div16u
0092 0883 std y+0,R16
0094 .dbline 30
0094 ; IC_Balance[1] = ( Balance / 100 ) % 10 ; // 计算出卡内金钱的单元数的百位
0094 24E6 ldi R18,100
0096 30E0 ldi R19,0
0098 8A01 movw R16,R20
009A 00D0 rcall div16u
009C 2AE0 ldi R18,10
009E 30E0 ldi R19,0
00A0 00D0 rcall mod16u
00A2 0983 std y+1,R16
00A4 .dbline 31
00A4 ; IC_Balance[2] = ( Balance / 10 ) % 10 ; // 计算出卡内金钱的单元数的十位
00A4 2AE0 ldi R18,10
00A6 30E0 ldi R19,0
00A8 8A01 movw R16,R20
00AA 00D0 rcall div16u
00AC 2AE0 ldi R18,10
00AE 30E0 ldi R19,0
00B0 00D0 rcall mod16u
00B2 0A83 std y+2,R16
00B4 .dbline 32
00B4 ; IC_Balance[3] = Balance % 10 ; // 计算出卡内金钱的单元数的个位
00B4 2AE0 ldi R18,10
00B6 30E0 ldi R19,0
00B8 8A01 movw R16,R20
00BA 00D0 rcall mod16u
00BC 0B83 std y+3,R16
00BE .dbline 34
00BE ;
00BE ; for(i=0;i<3;i++)
00BE AA24 clr R10
00C0 0AC0 rjmp L23
00C2 L20:
00C2 .dbline 35
00C2 .dbline 36
00C2 2A2D mov R18,R10
00C4 255E subi R18,229 ; addi 27
00C6 CE01 movw R24,R28
00C8 EA2D mov R30,R10
00CA FF27 clr R31
00CC E80F add R30,R24
00CE F91F adc R31,R25
00D0 0081 ldd R16,z+0
00D2 00D0 rcall _display
00D4 .dbline 37
00D4 L21:
00D4 .dbline 34
00D4 A394 inc R10
00D6 L23:
00D6 .dbline 34
00D6 8A2D mov R24,R10
00D8 8330 cpi R24,3
00DA 98F3 brlo L20
00DC .dbline 38
00DC ; {
00DC ; display(IC_Balance[i] , 27+i); // 显示卡内金额
00DC ; }
00DC ; display(IC_Balance[3] , 31);
00DC 2FE1 ldi R18,31
00DE 0B81 ldd R16,y+3
00E0 00D0 rcall _display
00E2 .dbline -2
00E2 L1:
00E2 2496 adiw R28,4
00E4 00D0 rcall pop_gset4
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbsym r Balance 20 i
00E8 .dbsym l IC_Balance 0 A[4:4]c
00E8 .dbsym r j 22 c
00E8 .dbsym r i 10 c
00E8 .dbsym r flag 12 c
00E8 .dbend
00E8 .dbfunc e Right_Card _Right_Card fV
00E8 ; Card_ID_ge -> R12
00E8 ; Card_ID_shi -> R14
00E8 ; tem -> R10
00E8 ; Key -> R20
00E8 ; i -> R22
.even
00E8 _Right_Card::
00E8 00D0 rcall push_gset5
00EA 2297 sbiw R28,2
00EC .dbline -1
00EC .dbline 42
00EC ; }
00EC ;
00EC ; void Right_Card(void)
00EC ; {
00EC .dbline 43
00EC ; unsigned char Card_ID_shi = 0 , Card_ID_ge = 0 , Key = 0 , i = 0 , tem = 0 ;
00EC EE24 clr R14
00EE .dbline 43
00EE CC24 clr R12
00F0 .dbline 43
00F0 4427 clr R20
00F2 .dbline 43
00F2 6627 clr R22
00F4 .dbline 43
00F4 AA24 clr R10
00F6 .dbline 45
00F6 ;
00F6 ; LCD_write_char(0x01,0); //清屏
00F6 2227 clr R18
00F8 3327 clr R19
00FA 01E0 ldi R16,1
00FC 10E0 ldi R17,0
00FE 00D0 rcall _LCD_write_char
0100 .dbline 46
0100 ; delay_nms(2);
0100 02E0 ldi R16,2
0102 10E0 ldi R17,0
0104 00D0 rcall _delay_nms
0106 .dbline 48
0106 ;
0106 ; Card_ID_shi = ( Card_ID / 10 ) ;
0106 1AE0 ldi R17,10
0108 00910000 lds R16,_Card_ID
010C 00D0 rcall div8u
010E E02E mov R14,R16
0110 .dbline 49
0110 ; Card_ID_ge = ( Card_ID % 10 ) ;
0110 1AE0 ldi R17,10
0112 00910000 lds R16,_Card_ID
0116 00D0 rcall mod8u
0118 C02E mov R12,R16
011A .dbline 51
011A ;
011A ; LCD_write_string(2,0,"Card_ID : ");
011A 80E0 ldi R24,<L26
011C 90E0 ldi R25,>L26
011E 9983 std y+1,R25
0120 8883 std y+0,R24
0122 2227 clr R18
0124 02E0 ldi R16,2
0126 00D0 rcall _LCD_write_string
0128 .dbline 53
0128 ;
0128 ; if(Menu_flag==1)
0128 80910000 lds R24,_Menu_flag
012C 8130 cpi R24,1
012E 41F4 brne L27
0130 .dbline 54
0130 ; {
0130 .dbline 55
0130 ; LCD_write_string(0,1,"Del this Card ?");
0130 80E0 ldi R24,<L29
0132 90E0 ldi R25,>L29
0134 9983 std y+1,R25
0136 8883 std y+0,R24
0138 21E0 ldi R18,1
013A 0027 clr R16
013C 00D0 rcall _LCD_write_string
013E .dbline 56
013E ; }
013E 09C0 rjmp L28
0140 L27:
0140 .dbline 58
0140 ; else
0140 ; {
0140 .dbline 59
0140 ; LCD_write_string(0,1,"Welcome! $: . ");
0140 80E0 ldi R24,<L30
0142 90E0 ldi R25,>L30
0144 9983 std y+1,R25
0146 8883 std y+0,R24
0148 21E0 ldi R18,1
014A 0027 clr R16
014C 00D0 rcall _LCD_write_string
014E .dbline 60
014E ; Balance_dis();
014E 58DF rcall _Balance_dis
0150 .dbline 61
0150 ; LED_ON ;
0150 C09A sbi 0x18,0
0152 .dbline 62
0152 ; }
0152 L28:
0152 .dbline 63
0152 ; display( Card_ID_shi , 12 );
0152 2CE0 ldi R18,12
0154 0E2D mov R16,R14
0156 00D0 rcall _display
0158 .dbline 64
0158 ; display( Card_ID_ge , 13 );
0158 2DE0 ldi R18,13
015A 0C2D mov R16,R12
015C 00D0 rcall _display
015E .dbline 66
015E ;
015E ; if(Menu_flag==1)
015E 80910000 lds R24,_Menu_flag
0162 8130 cpi R24,1
0164 09F0 breq X3
0166 54C0 rjmp L53
0168 X3:
0168 .dbline 67
0168 ; {
0168 .dbline 68
0168 ; Menu_flag=0;
0168 2224 clr R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -