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

📄 ic_card.lst

📁 环保型IC卡门禁系统的C程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0119) 		  
(0120) 	if(Key == 12)
    0295 300C      CPI	R16,0xC
    0296 F409      BNE	0x0298
(0121) 	{
(0122) 	  Write_Card_Value();
    0297 D79D      RCALL	_Write_Card_Value
    0298 CFE9      RJMP	0x0282
    0299 9622      ADIW	R28,2
    029A D831      RCALL	pop_gset5
    029B 9508      RET
_Wrong_Card:
  Key                  --> R20
    029C D839      RCALL	push_gset1
    029D 9722      SBIW	R28,2
(0123) 	}
(0124)   }
(0125) }
(0126) 
(0127) void Wrong_Card(void)
(0128) {
(0129)   unsigned char Key = 0 ;
    029E 2744      CLR	R20
(0130) 
(0131)   LCD_write_char(0x01,0);  //清屏
    029F 2722      CLR	R18
    02A0 2733      CLR	R19
    02A1 E001      LDI	R16,1
    02A2 E010      LDI	R17,0
    02A3 D2F3      RCALL	_LCD_write_char
(0132)   delay_nms(2);
    02A4 E002      LDI	R16,2
    02A5 E010      LDI	R17,0
    02A6 D0F0      RCALL	_delay_nms
(0133)   
(0134)   LCD_write_string(3,0,"Wrong Card");
    02A7 E888      LDI	R24,0x88
    02A8 E090      LDI	R25,0
    02A9 8399      STD	Y+1,R25
    02AA 8388      STD	Y+0,R24
    02AB 2722      CLR	R18
    02AC E003      LDI	R16,3
    02AD D2BB      RCALL	_LCD_write_string
(0135)   if ( (Menu_flag==1) || (Wrong_flag==1) )
    02AE 91800112  LDS	R24,Menu_flag
    02B0 3081      CPI	R24,1
    02B1 F021      BEQ	0x02B6
    02B2 91800239  LDS	R24,Wrong_flag
    02B4 3081      CPI	R24,1
    02B5 F441      BNE	0x02BE
(0136)   {
(0137)     LCD_write_string(4,1,"Sorry !!");
    02B6 E78F      LDI	R24,0x7F
    02B7 E090      LDI	R25,0
    02B8 8399      STD	Y+1,R25
    02B9 8388      STD	Y+0,R24
    02BA E021      LDI	R18,1
    02BB E004      LDI	R16,4
    02BC D2AC      RCALL	_LCD_write_string
(0138)   }
    02BD C032      RJMP	0x02F0
(0139)   else
(0140)   {
(0141)     LCD_write_string(0,1," Sorry!  $:   . ");
    02BE E68E      LDI	R24,0x6E
    02BF E090      LDI	R25,0
    02C0 8399      STD	Y+1,R25
    02C1 8388      STD	Y+0,R24
    02C2 E021      LDI	R18,1
    02C3 2700      CLR	R16
    02C4 D2A4      RCALL	_LCD_write_string
(0142)     Balance_dis();
    02C5 DECA      RCALL	_Balance_dis
(0143)   }
    02C6 C029      RJMP	0x02F0
(0144) 
(0145)   while(1)
(0146)   {
(0147)     if(IC_SW!=0)
    02C7 B380      IN	R24,0x10
    02C8 7088      ANDI	R24,0x8
    02C9 BB80      OUT	0x10,R24
    02CA 2388      TST	R24
    02CB F0D9      BEQ	0x02E7
(0148) 	{
(0149)       delay_nms(50);               //   检测是否有卡插入
    02CC E302      LDI	R16,0x32
    02CD E010      LDI	R17,0
    02CE D0C8      RCALL	_delay_nms
(0150) 	  if(IC_SW!=0)
    02CF B380      IN	R24,0x10
    02D0 7088      ANDI	R24,0x8
    02D1 BB80      OUT	0x10,R24
    02D2 2388      TST	R24
    02D3 F099      BEQ	0x02E7
(0151) 	  {
(0152) 	    if (Menu_flag==1)
    02D4 91800112  LDS	R24,Menu_flag
    02D6 3081      CPI	R24,1
    02D7 F431      BNE	0x02DE
(0153) 		{
(0154) 		  Menu_flag=0;
    02D8 2422      CLR	R2
    02D9 92200112  STS	Menu_flag,R2
(0155) 		  Wrong_flag=0;
    02DB 92200239  STS	Wrong_flag,R2
(0156) 		  Menu_0();
    02DD D547      RCALL	_Menu_0
(0157) 		}
(0158) 	  
(0159) 	    if(Wrong_flag==1)
    02DE 91800239  LDS	R24,Wrong_flag
    02E0 3081      CPI	R24,1
    02E1 F421      BNE	0x02E6
(0160) 		{
(0161) 		  Wrong_flag=0;
    02E2 2422      CLR	R2
    02E3 92200239  STS	Wrong_flag,R2
(0162) 		  menu_Init();
    02E5 D30E      RCALL	_menu_Init
(0163) 		}
(0164) 		
(0165) 		menu_Init();
    02E6 D30D      RCALL	_menu_Init
(0166)       }
(0167) 	}
(0168) 	
(0169) 	if(Menu_flag==0)
    02E7 90200112  LDS	R2,Menu_flag
    02E9 2022      TST	R2
    02EA F429      BNE	0x02F0
(0170) 	{
(0171) 	  Key = Key_Scan() ;
    02EB D21B      RCALL	_Key_Scan
    02EC 2F40      MOV	R20,R16
(0172) 		  
(0173) 	  if(Key == 12)
    02ED 300C      CPI	R16,0xC
    02EE F409      BNE	0x02F0
(0174) 	  {
(0175) 	    Write_Card_Value();
    02EF D745      RCALL	_Write_Card_Value
    02F0 CFD6      RJMP	0x02C7
    02F1 9622      ADIW	R28,2
    02F2 D7E6      RCALL	pop_gset1
    02F3 9508      RET
_Card_Verify:
  i                    --> R20
    02F4 D7E1      RCALL	push_gset1
    02F5 9722      SBIW	R28,2
(0176) 	  }
(0177) 	}
(0178)   }
(0179) }
(0180) 
(0181) void Card_Verify(void)
(0182) {
(0183)   unsigned char i = 0  ;
    02F6 2744      CLR	R20
(0184)   
(0185)   for(Card_ID=0;Card_ID<83;Card_ID++)
    02F7 2422      CLR	R2
    02F8 92200060  STS	Card_ID,R2
    02FA C06D      RJMP	0x0368
(0186)   {
(0187)     if ( IC_Codes_8[2] == EEPROM_read(i) )
    02FB 2F04      MOV	R16,R20
    02FC 2711      CLR	R17
    02FD D15E      RCALL	_EEPROM_read
    02FE 9020022B  LDS	R2,IC_Codes_8+2
    0300 1620      CP	R2,R16
    0301 F009      BEQ	0x0303
    0302 C05F      RJMP	0x0362
(0188) 	{
(0189) 	  if ( IC_Codes_8[3] == EEPROM_read(1+i) )
    0303 2F04      MOV	R16,R20
    0304 2711      CLR	R17
    0305 5F0F      SUBI	R16,0xFF
    0306 4F1F      SBCI	R17,0xFF
    0307 D154      RCALL	_EEPROM_read
    0308 9020022C  LDS	R2,IC_Codes_8+3
    030A 1620      CP	R2,R16
    030B F009      BEQ	0x030D
    030C C055      RJMP	0x0362
(0190) 	  {
(0191) 	    if ( IC_Codes_8[4] == EEPROM_read(2+i) )
    030D 2F04      MOV	R16,R20
    030E 2711      CLR	R17
    030F 5F0E      SUBI	R16,0xFE
    0310 4F1F      SBCI	R17,0xFF
    0311 D14A      RCALL	_EEPROM_read
    0312 9020022D  LDS	R2,0x22D
    0314 1620      CP	R2,R16
    0315 F009      BEQ	0x0317
    0316 C04B      RJMP	0x0362
(0192) 		{
(0193) 		  if ( IC_Codes_8[5] == EEPROM_read(3+i) )
    0317 2F04      MOV	R16,R20
    0318 2711      CLR	R17
    0319 5F0D      SUBI	R16,0xFD
    031A 4F1F      SBCI	R17,0xFF
    031B D140      RCALL	_EEPROM_read
    031C 9020022E  LDS	R2,0x22E
    031E 1620      CP	R2,R16
    031F F009      BEQ	0x0321
    0320 C041      RJMP	0x0362
(0194) 		  {
(0195) 		    if ( IC_Codes_8[6] == EEPROM_read(4+i) )
    0321 2F04      MOV	R16,R20
    0322 2711      CLR	R17
    0323 5F0C      SUBI	R16,0xFC
    0324 4F1F      SBCI	R17,0xFF
    0325 D136      RCALL	_EEPROM_read
    0326 9020022F  LDS	R2,0x22F
    0328 1620      CP	R2,R16
    0329 F009      BEQ	0x032B
    032A C037      RJMP	0x0362
(0196) 			{
(0197) 			  if ( IC_Codes_8[7] == EEPROM_read(5+i) )
    032B 2F04      MOV	R16,R20
    032C 2711      CLR	R17
    032D 5F0B      SUBI	R16,0xFB
    032E 4F1F      SBCI	R17,0xFF
    032F D12C      RCALL	_EEPROM_read
    0330 90200230  LDS	R2,0x230
    0332 1620      CP	R2,R16
    0333 F571      BNE	0x0362
(0198) 			  {
(0199) 			    if( Exist_flag == 1)
    0334 91800113  LDS	R24,Exist_flag
    0336 3081      CPI	R24,1
    0337 F549      BNE	0x0361
(0200) 				{
(0201) 				  Exist_flag = 0 ;
    0338 2422      CLR	R2
    0339 92200113  STS	Exist_flag,R2
(0202) 				  
(0203) 				  LCD_write_char(0x01,0);  //清屏
    033B 2722      CLR	R18
    033C 2733      CLR	R19
    033D E001      LDI	R16,1
    033E E010      LDI	R17,0
    033F D257      RCALL	_LCD_write_char
(0204)                   delay_nms(2);
    0340 E002      LDI	R16,2
    0341 E010      LDI	R17,0
    0342 D054      RCALL	_delay_nms
(0205) 				  LCD_write_string(2,0,"Card Existed");
    0343 E681      LDI	R24,0x61
    0344 E090      LDI	R25,0
    0345 8399      STD	Y+1,R25
    0346 8388      STD	Y+0,R24
    0347 2722      CLR	R18
    0348 E002      LDI	R16,2
    0349 D21F      RCALL	_LCD_write_string
(0206) 				  LCD_write_string(4,1,"Sorry !!");
    034A E78F      LDI	R24,0x7F
    034B E090      LDI	R25,0
    034C 8399      STD	Y+1,R25
    034D 8388      STD	Y+0,R24
    034E E021      LDI	R18,1
    034F E004      LDI	R16,4
    0350 D218      RCALL	_LCD_write_string
    0351 C00E      RJMP	0x0360
(0207) 				  
(0208) 				  while(1)
(0209) 			      {
(0210) 			        if(IC_SW!=0)
    0352 B380      IN	R24,0x10
    0353 7088      ANDI	R24,0x8
    0354 BB80      OUT	0x10,R24
    0355 2388      TST	R24
    0356 F049      BEQ	0x0360
(0211) 	                {
(0212)                       delay_nms(50);               //   检测是否有卡插入
    0357 E302      LDI	R16,0x32
    0358 E010      LDI	R17,0
    0359 D03D      RCALL	_delay_nms
(0213) 	                  if(IC_SW!=0)
    035A B380      IN	R24,0x10
    035B 7088      ANDI	R24,0x8
    035C BB80      OUT	0x10,R24
    035D 2388      TST	R24
    035E F009      BEQ	0x0360
(0214) 	                  {
(0215)                         Menu_0();
    035F D4C5      RCALL	_Menu_0
    0360 CFF1      RJMP	0x0352
(0216)                       }
(0217) 	                }
(0218) 			      }
(0219) 				}
(0220) 			  
(0221) 			    Right_Card();
    0361 DEA2      RCALL	_Right_Card
(0222) 			  }
(0223) 			}
(0224) 		  }
(0225) 		}
(0226) 	  }
(0227) 	}
(0228) 	
(0229) 	i = i + 6 ;
    0362 5F4A      SUBI	R20,0xFA
    0363 91800060  LDS	R24,Card_ID
    0365 5F8F      SUBI	R24,0xFF
    0366 93800060  STS	Card_ID,R24
    0368 91800060  LDS	R24,Card_ID
    036A 3583      CPI	R24,0x53
    036B F408      BCC	0x036D
    036C CF8E      RJMP	0x02FB
(0230)   }
(0231)   
(0232)   if( Exist_flag == 0)
    036D 90200113  LDS	R2,Exist_flag
    036F 2022      TST	R2
    0370 F409      BNE	0x0372
(0233)   {
(0234)     Wrong_Card();
    0371 DF2A      RCALL	_Wrong_Card
(0235)   }
    0372 9622      ADIW	R28,2
    0373 D765      RCALL	pop_gset1
    0374 9508      RET
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\delay.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    unsigned int i=0;
_delay_1us:
  i                    --> R16
    0375 2700      CLR	R16
    0376 2711      CLR	R17
(0008)    for (i=0;i<8;i++)
    0377 C003      RJMP	0x037B
(0009)    {
(0010)      asm("nop");
    0378 0000      NOP
    0379 5F0F      SUBI	R16,0xFF
    037A 4F1F      SBCI	R17,0xFF
    037B 3008      CPI	R16,0x8
    037C E0E0      LDI	R30,0
    037D 071E      CPC	R17,R30
    037E F3C8      BCS	0x0378
    037F 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    0380 D753      RCALL	push_gset2
    0381 01B8      MOVW	R22,R16
(0011)    }
(0012)   }
(0013) 
(0014) void delay_nus(unsigned int n)       //N us延时函数
(0015)   {
(0016)    unsigned int i=0;
    0382 2744      CLR	R20
    0383 2755      CLR	R21
(0017)    for (i=0;i<n;i++)
    0384 C003      RJMP	0x0388
(0018)    delay_1us();
    0385 DFEF      RCALL	_delay_1us
    0386 5F4F      SUBI	R20,0xFF
    0387 4F5F      SBCI	R21,0xFF
    0388 1746      CP	R20,R22
    0389 0757      CPC	R21,R23
    038A F3D0      BCS	0x0385
    038B D73A      RCALL	pop_gset2
    038C 9508      RET
(0019)   }
(0020)   
(0021) void delay_1ms(void)                 //1ms延时函数
(0022)   {
(0023)    unsigned int i;
(0024)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    038D 2700      CLR	R16
    038E 2711      CLR	R17
    038F C002      RJMP	0x0392
    0390 5F0F      SUBI	R16,0xFF
    0391 4F1F      SBCI	R17,0xFF
    0392 3704      CPI	R16,0x74
    0393 E0E4      LDI	R30,4
    0394 071E      CPC	R17,R30
    0395 F3D0      BCS	0x0390
    0396 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0397 D73C      RCALL	push_gset2
    0398 01B8      MOVW	R22,R16
(0025)   }
(0026)   
(0027) void delay_nms(unsigned int n)       //N ms延时函数
(0028)   {
(0029)    unsigned int i=0;
    0399 2744      CLR	R20
    039A 2755      CLR	R21
(0030)    for (i=0;i<n;i++)
    039B C003      RJMP	0x039F
(0031)    delay_1ms();
    039C DFF0      RCALL	_delay_1ms
    039D 5F4F      SUBI	R20,0xFF
    039E 4F5F      SBCI	R21,0xFF
    039F 1746      CP	R20,R22
    03A0 0757      CPC	R21,R23
    03A1 F3D0      BCS	0x039C
    03A2 D723      RCALL	pop_gset2
    03A3 9508      RET
_display:
  line                 --> R22
  position             --> R20
  Num                  --> R10
    03A4 D72D      RCALL	push_gset3
    03A5 2F42      MOV	R20,R18
    03A6 2EA0      MOV	R10,R16
    03A7 9722      SBIW	R28,2

⌨️ 快捷键说明

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