⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 card_verify.lis

📁 环保型IC卡门禁系统的C程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -