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

📄 menus.s

📁 环保型IC卡门禁系统的C程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module Menus.C
	.area data(ram, con, rel)
_Menu_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Menus.C
	.dbsym e Menu_flag _Menu_flag c
_Exist_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Menus.C
	.dbsym e Exist_flag _Exist_flag c
	.area text(rom, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Menus.C
	.dbfunc e Menu_Add _Menu_Add fV
;          Total -> R14
;              i -> R20
;            tem -> R22
;              j -> R10
;              k -> R12
	.even
_Menu_Add::
	rcall push_gset5
	sbiw R28,2
	.dbline -1
	.dbline 9
; 
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
; 
; unsigned char Menu_flag = 0 , Exist_flag = 0 ;
; 
; void Menu_Add(void)
; {
	.dbline 10
;   unsigned char Total = 0 , i = 0 , j = 0 , k = 0 , tem = 0 ;
	clr R14
	.dbline 10
	clr R20
	.dbline 10
	clr R10
	.dbline 10
	clr R12
	.dbline 10
	clr R22
	.dbline 12
; 
;   LCD_write_char(0x01,0);  //清屏
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 13
;   delay_nms(2);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 15
;   
;   Total = EEPROM_read(511) ;
	ldi R16,511
	ldi R17,1
	rcall _EEPROM_read
	mov R14,R16
	.dbline 16
;   if(Total==83)
	cpi R16,83
	brne L2
	.dbline 17
;   {
	.dbline 18
;     LCD_write_string(0,0,"83 Cards Existed");
	ldi R24,<L4
	ldi R25,>L4
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 19
; 	LCD_write_string(3,1,"Is Full !!");
	ldi R24,<L5
	ldi R25,>L5
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,3
	rcall _LCD_write_string
	.dbline 20
; 	delay_nms(2000);
	ldi R16,2000
	ldi R17,7
	rcall _delay_nms
	.dbline 21
; 	Menu_0() ;
	rcall _Menu_0
	.dbline 22
;   }
L2:
	.dbline 24
;   
;   LCD_write_string(0,0,"Menu1 : Add Card");
	ldi R24,<L6
	ldi R25,>L6
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 25
;   LCD_write_string(2,1,"Insert  Card");
	ldi R24,<L7
	ldi R25,>L7
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,2
	rcall _LCD_write_string
	rjmp L9
L8:
	.dbline 28
;   
;   while(1)
;   {
	.dbline 29
;     if(IC_SW==0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	breq X2
	rjmp L11
X2:
	.dbline 30
;     {
	.dbline 31
;       delay_nms(50);               //   检测是否有卡插入
	ldi R16,50
	ldi R17,0
	rcall _delay_nms
	.dbline 32
; 	  if(IC_SW==0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	breq X3
	rjmp L13
X3:
	.dbline 33
; 	  {
	.dbline 34
; 	    Menu_flag = 1 ;
	ldi R24,1
	sts _Menu_flag,R24
	.dbline 35
; 		Exist_flag = 1 ;
	sts _Exist_flag,R24
	.dbline 36
;         Read_Card();      //  读IC-Card 函数
	rcall _Read_Card
	.dbline 37
; 		Card_Verify();
	rcall _Card_Verify
	.dbline 39
; 	  
; 	    for(i=0;i<83;i++)
	clr R20
	rjmp L18
L15:
	.dbline 40
; 	    {
	.dbline 41
; 	      tem = EEPROM_read(j);
	mov R16,R10
	clr R17
	rcall _EEPROM_read
	mov R22,R16
	.dbline 43
; 		
; 	      if(tem==0)
	tst R16
	breq X4
	rjmp L19
X4:
	.dbline 44
; 		  {
	.dbline 45
; 		    for(k=0;k<6;k++)
	clr R12
	rjmp L24
L21:
	.dbline 46
; 		    {
	.dbline 47
; 		      EEPROM_write(j+k, IC_Codes_8[2+k]);
	ldi R24,<_IC_Codes_8+2
	ldi R25,>_IC_Codes_8+2
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R18,z+0
	mov R2,R12
	clr R3
	mov R16,R10
	clr R17
	add R16,R2
	adc R17,R3
	rcall _EEPROM_write
	.dbline 48
; 			  if(k==5)
	mov R24,R12
	cpi R24,5
	brne L26
	.dbline 49
; 			  {
	.dbline 50
; 			    tem =  EEPROM_read(511) + 1 ;
	ldi R16,511
	ldi R17,1
	rcall _EEPROM_read
	mov R22,R16
	subi R22,255    ; addi 1
	.dbline 51
; 				EEPROM_write(511, tem);
	mov R18,R22
	ldi R16,511
	ldi R17,1
	rcall _EEPROM_write
	.dbline 53
; 			  
; 			    LCD_write_string(0,1,"Add Successfully");
	ldi R24,<L28
	ldi R25,>L28
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	rjmp L30
L29:
	.dbline 56
; 			  
; 			    while(1)
; 			    {
	.dbline 57
; 			      if(IC_SW!=0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	breq L32
	.dbline 58
; 	              {
	.dbline 59
;                     delay_nms(50);               //   检测是否有卡插入
	ldi R16,50
	ldi R17,0
	rcall _delay_nms
	.dbline 60
; 	                if(IC_SW!=0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	breq L34
	.dbline 61
; 	                {
	.dbline 62
;                       Menu_0();
	rcall _Menu_0
	.dbline 63
;                     }
L34:
	.dbline 64
; 	              }
L32:
	.dbline 65
L30:
	.dbline 55
	rjmp L29
X0:
	.dbline 66
; 			    }
; 			  }
L26:
	.dbline 67
L22:
	.dbline 45
	inc R12
L24:
	.dbline 45
	mov R24,R12
	cpi R24,6
	brsh X5
	rjmp L21
X5:
	.dbline 68
; 		    }
; 		  }
L19:
	.dbline 70
	mov R24,R10
	subi R24,250    ; addi 6
	mov R10,R24
	.dbline 71
L16:
	.dbline 39
	inc R20
L18:
	.dbline 39
	cpi R20,83
	brsh X6
	rjmp L15
X6:
	.dbline 72
; 		
; 		  j = j + 6 ;
; 	    }	
; 	  }
L13:
	.dbline 73
; 	}
L11:
	.dbline 74
L9:
	.dbline 27
	rjmp L8
X1:
	.dbline -2
L1:
	adiw R28,2
	rcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r Total 14 c
	.dbsym r i 20 c
	.dbsym r tem 22 c
	.dbsym r j 10 c
	.dbsym r k 12 c
	.dbend
	.dbfunc e Menu_Del _Menu_Del fV
;            tem -> R22
;              k -> R22
;              j -> R22
;              i -> R22
;          Total -> R20
	.even
_Menu_Del::
	rcall push_gset2
	sbiw R28,2
	.dbline -1
	.dbline 78
;   }
; }
; 
; void Menu_Del(void)
; {
	.dbline 79
;   unsigned char Total = 0 , i = 0 , j = 0 , k = 0 , tem = 0 ;
	clr R20
	.dbline 79
	clr R22
	.dbline 79
	.dbline 79
	.dbline 79
	.dbline 81
; 
;   LCD_write_char(0x01,0);  //清屏
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 82
;   delay_nms(2);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 84
;   
;   Total = EEPROM_read(511) ;
	ldi R16,511
	ldi R17,1
	rcall _EEPROM_read
	mov R20,R16
	.dbline 85
;   if(Total==0)
	tst R16
	brne L37
	.dbline 86
;   {
	.dbline 87
; 	LCD_write_string(0,0,"No Card Existed");
	ldi R24,<L39
	ldi R25,>L39
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 88
; 	LCD_write_string(2,1,"Is  Empty !!");
	ldi R24,<L40
	ldi R25,>L40
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,2
	rcall _LCD_write_string
	.dbline 89
; 	delay_nms(2000);
	ldi R16,2000
	ldi R17,7
	rcall _delay_nms
	.dbline 90
; 	Menu_0() ;
	rcall _Menu_0
	.dbline 91
;   }
L37:
	.dbline 93
;   
;   LCD_write_string(0,0,"Menu1 : Del Card");
	ldi R24,<L41
	ldi R25,>L41
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	rcall _LCD_write_string
	.dbline 94
;   LCD_write_string(2,1,"Insert  Card");
	ldi R24,<L7
	ldi R25,>L7
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,2
	rcall _LCD_write_string
	rjmp L43
L42:
	.dbline 97
;   
;   while(1)
;   {
	.dbline 98
;     if(IC_SW==0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	brne L45
	.dbline 99
;     {
	.dbline 100
;       delay_nms(50);               //   检测是否有卡插入
	ldi R16,50
	ldi R17,0
	rcall _delay_nms
	.dbline 101
; 	  if(IC_SW==0)
	in R24,0x10
	andi R24,8
	out 0x10,R24
	tst R24
	brne L47
	.dbline 102
; 	  {
	.dbline 103
; 	    Menu_flag = 1 ;
	ldi R24,1
	sts _Menu_flag,R24
	.dbline 104
;         Read_Card();      //  读IC-Card 函数
	rcall _Read_Card
	.dbline 105
; 		Card_Verify();
	rcall _Card_Verify
	.dbline 106
; 	  }
L47:
	.dbline 107
; 	}
L45:
	.dbline 108
L43:
	.dbline 96
	rjmp L42
X7:
	.dbline -2
L36:
	adiw R28,2
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r tem 22 c
	.dbsym r k 22 c
	.dbsym r j 22 c
	.dbsym r i 22 c
	.dbsym r Total 20 c
	.dbend
	.area lit(rom, con, rel)
L50:
	.byte 0
	.byte 0,0,0,0,0,0,0
L51:
	.byte 0
	.byte 0,0,0,0,0,0,0
	.area text(rom, con, rel)
	.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Menus.C
	.dbfunc e Menu_PSW _Menu_PSW fV
;          PSW_1 -> y+10
;          PSW_2 -> y+2
;              i -> R20
;            Key -> R22
	.even
_Menu_PSW::
	rcall push_gset2
	sbiw R28,18
	.dbline -1
	.dbline 112
;   }
; }
; 
; void Menu_PSW(void)
; {
	.dbline 113
;   unsigned char Key = 0 , i = 0 , PSW_1[8] = { 0 } , PSW_2[8] = { 0 } ;
	clr R22
	.dbline 113
	clr R20
	.dbline 113
	ldi R24,<L50
	ldi R25,>L50
	movw R30,R28
	adiw R30,10
	ldi R16,8
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 113
	ldi R24,<L51
	ldi R25,>L51
	movw R30,R28
	adiw R30,2
	ldi R16,8
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 115
;   
;   LCD_write_char(0x01,0);  //清屏
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 116
;   delay_nms(2);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 117
;   LCD_write_char(0x0f,0);   // 显示光标
	clr R18
	clr R19
	ldi R16,15
	ldi R17,0
	rcall _LCD_write_char
	.dbline 119
;   
;   LCD_write_string(1,0,"Insert New PSW");
	ldi R24,<L52
	ldi R25,>L52
	std y+1,R25
	std y+0,R24
	clr R18
	ldi R16,1
	rcall _LCD_write_string
	.dbline 120
;   LCD_write_string(0,1,"New PSW:");
	ldi R24,<L53
	ldi R25,>L53
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	rjmp L55
L54:
	.dbline 124
;   
;   
;   while(1)
;   {
	.dbline 125
;     Key = Key_Scan() ;
	rcall _Key_Scan
	mov R22,R16
	.dbline 127
; 	
; 	if ( (Key>0) && (i<8) && (Key<11) )
	clr R2
	cp R2,R16
	brsh L57
	cpi R20,8
	brsh L57
	cpi R16,11
	brsh L57
	.dbline 128
; 	{
	.dbline 129
; 	  if(i>0)
	cp R2,R20
	brsh L59
	.dbline 130
;       {
	.dbline 131
; 		display(16 , 23+i);
	mov R18,R20
	subi R18,233    ; addi 23
	ldi R16,16
	rcall _display
	.dbline 132
; 	  }
L59:
	.dbline 134
; 	  
; 	  if (Key==10)
	cpi R22,10
	brne L61
	.dbline 135
; 	  {
	.dbline 136
; 	    Key = 0;
	clr R22
	.dbline 137
; 	  }
L61:
	.dbline 139
; 	  
; 	  display(Key , 24+i);
	mov R18,R20
	subi R18,232    ; addi 24
	mov R16,R22
	rcall _display
	.dbline 141
; 	  
; 	  PSW_1[i] = Key ;
	movw R24,R28
	adiw R24,10
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
	.dbline 142
; 	  i++ ;
	inc R20
	.dbline 143
;     }
L57:
	.dbline 145
; 	  
; 	if ( Key==11 )
	cpi R22,11
	brne L63
	.dbline 146
; 	{
	.dbline 147
; 	  Menu_0();
	rcall _Menu_0
	.dbline 148
; 	}
L63:
	.dbline 150
; 	
; 	if ( (Key==12) && (i==8) )
	cpi R22,12
	breq X10
	rjmp L65
X10:
	cpi R20,8
	breq X11
	rjmp L65
X11:
	.dbline 151
; 	{
	.dbline 152
; 	  LCD_write_char(0x01,0);  //清屏
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 153
;       delay_nms(2);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 155
;   
;       LCD_write_string(2,0,"Insert Again");
	ldi R24,<L67
	ldi R25,>L67
	std y+1,R25
	std y+0,R24
	clr R18
	ldi R16,2
	rcall _LCD_write_string
	.dbline 156
;       LCD_write_string(0,1,"New PSW:");
	ldi R24,<L53
	ldi R25,>L53
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	rcall _LCD_write_string
	.dbline 158
; 	  
; 	  i = 0 ;
	clr R20
	rjmp L69
L68:
	.dbline 160
; 	  while(1)
;       {
	.dbline 161
;         Key = Key_Scan() ;
	rcall _Key_Scan
	mov R22,R16
	.dbline 163
; 	
; 	    if ( (Key>0) && (i<8) && (Key<11) )
	clr R2
	cp R2,R16
	brsh L71
	cpi R20,8
	brsh L71
	cpi R16,11
	brsh L71
	.dbline 164
; 	    {
	.dbline 165
; 	      if(i>0)
	cp R2,R20
	brsh L73
	.dbline 166
;           {
	.dbline 167
; 		    display(16 , 23+i);
	mov R18,R20
	subi R18,233    ; addi 23
	ldi R16,16
	rcall _display
	.dbline 168
; 	      }
L73:
	.dbline 170
; 	  
; 	      if (Key==0)
	tst R22
	brne L75
	.dbline 171
; 	      {
	.dbline 172
; 	        Key = 0;
	clr R22
	.dbline 173
; 	      }
L75:
	.dbline 175
; 		  
; 		  display(Key , 24+i);
	mov R18,R20
	subi R18,232    ; addi 24
	mov R16,R22
	rcall _display
	.dbline 177
; 	  
; 	      PSW_2[i] = Key ;
	movw R24,R28
	adiw R24,2
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R22
	.dbline 178
; 	      i++ ;
	inc R20
	.dbline 179
;         }
L71:
	.dbline 181
; 	  
; 	    if ( Key==11 )
	cpi R22,11
	brne L77
	.dbline 182
; 	    {
	.dbline 183
; 	      Menu_0();
	rcall _Menu_0
	.dbline 184
; 	    }
L77:
	.dbline 186
; 		
; 		if ( (Key==12) && (i==8) )
	cpi R22,12
	breq X12
	rjmp L79
X12:
	cpi R20,8
	breq X13
	rjmp L79
X13:
	.dbline 187
; 		{
	.dbline 188
; 		  LCD_write_char(0x01,0);  //清屏
	clr R18
	clr R19
	ldi R16,1
	ldi R17,0
	rcall _LCD_write_char
	.dbline 189
;           delay_nms(2);
	ldi R16,2
	ldi R17,0
	rcall _delay_nms
	.dbline 190
; 		  LCD_write_char(0x0c,0);  //关光标
	clr R18
	clr R19

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -