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

📄 card_verify.s

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