📄 card_verify.s
字号:
.module Card_Verify.C
.area data(ram, con, rel)
_Card_ID::
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Card_Verify.C
.dbsym e Card_ID _Card_ID c
.area lit(rom, con, rel)
L2:
.byte 0
.byte 0,0,0
.area text(rom, con, rel)
.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Card_Verify.C
.dbfunc e Balance_dis _Balance_dis fV
; Balance -> R20,R21
; IC_Balance -> y+0
; j -> R22
; i -> R10
; flag -> R12
.even
_Balance_dis::
rcall push_gset4
sbiw R28,4
.dbline -1
.dbline 9
;
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
;
; unsigned char Card_ID = 0 ;
;
; void Balance_dis(void)
; {
.dbline 10
; unsigned char i = 0 , j = 0 , flag = 0 , IC_Balance[4] = { 0 } ;
clr R10
.dbline 10
clr R22
.dbline 10
clr R12
.dbline 10
ldi R24,<L2
ldi R25,>L2
movw R30,R28
ldi R16,4
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 12
;
; unsigned int Balance = 0 ; // 余额变量
clr R20
clr R21
.dbline 14
;
; for(i=0;i<4;i++)
rjmp L6
L3:
.dbline 15
; {
.dbline 16
; flag=0x01 ;
clr R12
inc R12
.dbline 17
; for(j=0;j<8;j++)
clr R22
rjmp L10
L7:
.dbline 18
; { // 计算出IC_Value[4]中每个字节中有多少位为1
.dbline 19
; if((IC_Codes_8[9+i]&flag)!=0) // 并记在IC_Balance[4]数组中
ldi R24,<_IC_Codes_8+9
ldi R25,>_IC_Codes_8+9
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R2,z+0
and R2,R12
breq L11
.dbline 20
; {
.dbline 21
; IC_Balance[i]++ ;
movw R24,R28
mov R2,R10
clr R3
add R2,R24
adc R3,R25
movw R30,R2
ldd R24,z+0
subi R24,255 ; addi 1
std z+0,R24
.dbline 22
; }
L11:
.dbline 23
lsl R12
.dbline 24
L8:
.dbline 17
inc R22
L10:
.dbline 17
cpi R22,8
brlo L7
.dbline 25
L4:
.dbline 14
inc R10
L6:
.dbline 14
mov R24,R10
cpi R24,4
brlo L3
.dbline 28
; flag=flag<<1;
; }
; }
;
; /**************计算出卡内金钱的单元数(一个单元对应0.1元)********************/
; Balance = IC_Balance[0]*512 + IC_Balance[1]*64 + IC_Balance[2]*8 +IC_Balance[3] ;
ldd R2,y+1
ldi R24,64
mul R24,R2
movw R2,R0
ldd R18,y+0
clr R19
ldi R16,512
ldi R17,2
rcall empy16s
movw R20,R16
add R20,R2
adc R21,R3
ldd R2,y+2
ldi R24,8
mul R24,R2
add R20,R0
adc R21,R1
ldd R2,y+3
clr R3
add R20,R2
adc R21,R3
.dbline 29
; IC_Balance[0] = Balance / 1000 ; // 计算出卡内金钱的单元数的千位
ldi R18,1000
ldi R19,3
movw R16,R20
rcall div16u
std y+0,R16
.dbline 30
; IC_Balance[1] = ( Balance / 100 ) % 10 ; // 计算出卡内金钱的单元数的百位
ldi R18,100
ldi R19,0
movw R16,R20
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
std y+1,R16
.dbline 31
; IC_Balance[2] = ( Balance / 10 ) % 10 ; // 计算出卡内金钱的单元数的十位
ldi R18,10
ldi R19,0
movw R16,R20
rcall div16u
ldi R18,10
ldi R19,0
rcall mod16u
std y+2,R16
.dbline 32
; IC_Balance[3] = Balance % 10 ; // 计算出卡内金钱的单元数的个位
ldi R18,10
ldi R19,0
movw R16,R20
rcall mod16u
std y+3,R16
.dbline 34
;
; for(i=0;i<3;i++)
clr R10
rjmp L23
L20:
.dbline 35
.dbline 36
mov R18,R10
subi R18,229 ; addi 27
movw R24,R28
mov R30,R10
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _display
.dbline 37
L21:
.dbline 34
inc R10
L23:
.dbline 34
mov R24,R10
cpi R24,3
brlo L20
.dbline 38
; {
; display(IC_Balance[i] , 27+i); // 显示卡内金额
; }
; display(IC_Balance[3] , 31);
ldi R18,31
ldd R16,y+3
rcall _display
.dbline -2
L1:
adiw R28,4
rcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r Balance 20 i
.dbsym l IC_Balance 0 A[4:4]c
.dbsym r j 22 c
.dbsym r i 10 c
.dbsym r flag 12 c
.dbend
.dbfunc e Right_Card _Right_Card fV
; Card_ID_ge -> R12
; Card_ID_shi -> R14
; tem -> R10
; Key -> R20
; i -> R22
.even
_Right_Card::
rcall push_gset5
sbiw R28,2
.dbline -1
.dbline 42
; }
;
; void Right_Card(void)
; {
.dbline 43
; unsigned char Card_ID_shi = 0 , Card_ID_ge = 0 , Key = 0 , i = 0 , tem = 0 ;
clr R14
.dbline 43
clr R12
.dbline 43
clr R20
.dbline 43
clr R22
.dbline 43
clr R10
.dbline 45
;
; LCD_write_char(0x01,0); //清屏
clr R18
clr R19
ldi R16,1
ldi R17,0
rcall _LCD_write_char
.dbline 46
; delay_nms(2);
ldi R16,2
ldi R17,0
rcall _delay_nms
.dbline 48
;
; Card_ID_shi = ( Card_ID / 10 ) ;
ldi R17,10
lds R16,_Card_ID
rcall div8u
mov R14,R16
.dbline 49
; Card_ID_ge = ( Card_ID % 10 ) ;
ldi R17,10
lds R16,_Card_ID
rcall mod8u
mov R12,R16
.dbline 51
;
; LCD_write_string(2,0,"Card_ID : ");
ldi R24,<L26
ldi R25,>L26
std y+1,R25
std y+0,R24
clr R18
ldi R16,2
rcall _LCD_write_string
.dbline 53
;
; if(Menu_flag==1)
lds R24,_Menu_flag
cpi R24,1
brne L27
.dbline 54
; {
.dbline 55
; LCD_write_string(0,1,"Del this Card ?");
ldi R24,<L29
ldi R25,>L29
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
rcall _LCD_write_string
.dbline 56
; }
rjmp L28
L27:
.dbline 58
; else
; {
.dbline 59
; LCD_write_string(0,1,"Welcome! $: . ");
ldi R24,<L30
ldi R25,>L30
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
rcall _LCD_write_string
.dbline 60
; Balance_dis();
rcall _Balance_dis
.dbline 61
; LED_ON ;
sbi 0x18,0
.dbline 62
; }
L28:
.dbline 63
; display( Card_ID_shi , 12 );
ldi R18,12
mov R16,R14
rcall _display
.dbline 64
; display( Card_ID_ge , 13 );
ldi R18,13
mov R16,R12
rcall _display
.dbline 66
;
; if(Menu_flag==1)
lds R24,_Menu_flag
cpi R24,1
breq X3
rjmp L53
X3:
.dbline 67
; {
.dbline 68
; Menu_flag=0;
clr R2
sts _Menu_flag,R2
rjmp L34
L33:
.dbline 71
;
; while(1)
; {
.dbline 72
; Key = Key_Scan() ;
rcall _Key_Scan
mov R20,R16
.dbline 74
;
; if(Key == 11)
cpi R16,11
brne L36
.dbline 75
; {
.dbline 76
; Menu_0();
rcall _Menu_0
.dbline 77
; }
L36:
.dbline 79
;
; if(Key == 12)
cpi R20,12
brne L38
.dbline 80
; {
.dbline 81
; for(i=0;i<6;i++)
clr R22
rjmp L43
L40:
.dbline 82
.dbline 83
clr R18
lds R2,_Card_ID
ldi R24,6
mul R24,R2
movw R16,R0
mov R2,R22
clr R3
add R16,R2
adc R17,R3
rcall _EEPROM_write
.dbline 84
L41:
.dbline 81
inc R22
L43:
.dbline 81
cpi R22,6
brlo L40
.dbline 86
; {
; EEPROM_write((Card_ID*6)+i, 0);
; }
;
; tem = EEPROM_read(511) - 1 ;
ldi R16,511
ldi R17,1
rcall _EEPROM_read
mov R24,R16
subi R24,1
mov R10,R24
.dbline 87
; EEPROM_write(511, tem);
mov R18,R24
ldi R16,511
ldi R17,1
rcall _EEPROM_write
.dbline 89
;
; LCD_write_string(0,1,"Del Successfully");
ldi R24,<L44
ldi R25,>L44
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
rcall _LCD_write_string
rjmp L46
L45:
.dbline 92
;
; while(1)
; {
.dbline 93
; if(IC_SW!=0)
in R24,0x10
andi R24,8
out 0x10,R24
tst R24
breq L48
.dbline 94
; {
.dbline 95
; delay_nms(50); // 检测是否有卡插入
ldi R16,50
ldi R17,0
rcall _delay_nms
.dbline 96
; if(IC_SW!=0)
in R24,0x10
andi R24,8
out 0x10,R24
tst R24
breq L50
.dbline 97
; {
.dbline 98
; Menu_0();
rcall _Menu_0
.dbline 99
; }
L50:
.dbline 100
; }
L48:
.dbline 101
L46:
.dbline 91
rjmp L45
X0:
.dbline 102
; }
; }
L38:
.dbline 103
L34:
.dbline 70
rjmp L33
X1:
.dbline 104
; }
; }
rjmp L53
L52:
.dbline 107
;
; while(1)
; {
.dbline 108
; if(IC_SW!=0)
in R24,0x10
andi R24,8
out 0x10,R24
tst R24
breq L55
.dbline 109
; {
.dbline 110
; delay_nms(50); // 检测是否有卡插入
ldi R16,50
ldi R17,0
rcall _delay_nms
.dbline 111
; if(IC_SW!=0)
in R24,0x10
andi R24,8
out 0x10,R24
tst R24
breq L57
.dbline 112
; {
.dbline 113
; LED_OFF ;
in R24,0x18
andi R24,254
out 0x18,R24
.dbline 114
; menu_Init();
rcall _menu_Init
.dbline 115
; }
L57:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -