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

📄 ic_card.lst

📁 环保型IC卡门禁系统的C程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
    059F 3040      CPI	R20,0
    05A0 0745      CPC	R20,R21
    05A1 F511      BNE	0x05C4
(0053)  {
(0054)   LCD_RS_PORT|=LCD_RS;  //RS=1
    05A2 9AAD      SBI	0x15,5
(0055)   LCD_DATA_PORT&=0Xf0;
    05A3 B385      IN	R24,0x15
    05A4 7F80      ANDI	R24,0xF0
    05A5 BB85      OUT	0x15,R24
(0056)   LCD_DATA_PORT|=((data_temp&0xf0)>>4);  //写高四位
    05A6 01CB      MOVW	R24,R22
    05A7 7F80      ANDI	R24,0xF0
    05A8 7090      ANDI	R25,0
    05A9 9596      LSR	R25
    05AA 9587      ROR	R24
    05AB 9596      LSR	R25
    05AC 9587      ROR	R24
    05AD 9596      LSR	R25
    05AE 9587      ROR	R24
    05AF 9596      LSR	R25
    05B0 9587      ROR	R24
    05B1 B225      IN	R2,0x15
    05B2 2433      CLR	R3
    05B3 2A28      OR	R2,R24
    05B4 2A39      OR	R3,R25
    05B5 BA25      OUT	0x15,R2
(0057)   LCD_en_write(); 
    05B6 DFDA      RCALL	_LCD_en_write
(0058)   LCD_DATA_PORT&=0Xf0;
    05B7 B385      IN	R24,0x15
    05B8 7F80      ANDI	R24,0xF0
    05B9 BB85      OUT	0x15,R24
(0059)   LCD_DATA_PORT|=data_temp&0x0f;   //写低四位
    05BA 01CB      MOVW	R24,R22
    05BB 708F      ANDI	R24,0xF
    05BC 7090      ANDI	R25,0
    05BD B225      IN	R2,0x15
    05BE 2433      CLR	R3
    05BF 2A28      OR	R2,R24
    05C0 2A39      OR	R3,R25
    05C1 BA25      OUT	0x15,R2
(0060)   LCD_en_write();
    05C2 DFCE      RCALL	_LCD_en_write
(0061)  }
    05C3 C021      RJMP	0x05E5
(0062)  else
(0063)  {
(0064)   LCD_RS_PORT&=~LCD_RS;   //RS=0
    05C4 98AD      CBI	0x15,5
(0065)   LCD_DATA_PORT&=0Xf0;
    05C5 B385      IN	R24,0x15
    05C6 7F80      ANDI	R24,0xF0
    05C7 BB85      OUT	0x15,R24
(0066)   LCD_DATA_PORT|=((command_temp&0xf0)>>4); //写高四位
    05C8 01CA      MOVW	R24,R20
    05C9 7F80      ANDI	R24,0xF0
    05CA 7090      ANDI	R25,0
    05CB 9596      LSR	R25
    05CC 9587      ROR	R24
    05CD 9596      LSR	R25
    05CE 9587      ROR	R24
    05CF 9596      LSR	R25
    05D0 9587      ROR	R24
    05D1 9596      LSR	R25
    05D2 9587      ROR	R24
    05D3 B225      IN	R2,0x15
    05D4 2433      CLR	R3
    05D5 2A28      OR	R2,R24
    05D6 2A39      OR	R3,R25
    05D7 BA25      OUT	0x15,R2
(0067)   LCD_en_write();
    05D8 DFB8      RCALL	_LCD_en_write
(0068)   LCD_DATA_PORT&=0xf0;
    05D9 B385      IN	R24,0x15
    05DA 7F80      ANDI	R24,0xF0
    05DB BB85      OUT	0x15,R24
(0069)   LCD_DATA_PORT|=command_temp&0x0f;  //写低四位
    05DC 01CA      MOVW	R24,R20
    05DD 708F      ANDI	R24,0xF
    05DE 7090      ANDI	R25,0
    05DF B225      IN	R2,0x15
    05E0 2433      CLR	R3
    05E1 2A28      OR	R2,R24
    05E2 2A39      OR	R3,R25
    05E3 BA25      OUT	0x15,R2
(0070)   LCD_en_write();
    05E4 DFAC      RCALL	_LCD_en_write
(0071)   }
    05E5 D4E4      RCALL	pop_gset4
    05E6 9508      RET
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\main.c
(0001) #include <iom8v.h>
(0002) #include <macros.h>
(0003) #include "lcd1602.h"
(0004) 
(0005) //端口初始化
(0006) void port_init(void)
(0007) {                    //  IR_receiver ----- PB0
(0008)  PORTB = 0x02;       //  LCD_D7~D4   ----- PB7~pB4
_port_init:
    05E7 E082      LDI	R24,2
    05E8 BB88      OUT	0x18,R24
(0009)  DDRB  = 0xfd;       //  LCD_EN      ----- PC0
    05E9 EF8D      LDI	R24,0xFD
    05EA BB87      OUT	0x17,R24
(0010)  PORTC = 0x00;       //  LCD_RS      ----- PC1
    05EB 2422      CLR	R2
    05EC BA25      OUT	0x15,R2
(0011)  DDRC  = 0xff;       //  SW1       ----- PD1
    05ED EF8F      LDI	R24,0xFF
    05EE BB84      OUT	0x14,R24
(0012)  PORTD = 0x0f;       //  SW2       ----- PD0
    05EF E08F      LDI	R24,0xF
    05F0 BB82      OUT	0x12,R24
(0013)  DDRD  = 0xf0;       //  LCD_RW      ----- GND      
    05F1 EF80      LDI	R24,0xF0
    05F2 BB81      OUT	0x11,R24
    05F3 9508      RET
_menu_Init:
  Total_ge             --> R20
  Total_shi            --> R22
  Total                --> R10
    05F4 D4DD      RCALL	push_gset3
    05F5 9722      SBIW	R28,2
(0014) }
(0015) 
(0016) void menu_Init(void)
(0017) {  
(0018)   unsigned char Total = 0 , Total_shi = 0 , Total_ge = 0 ;
    05F6 24AA      CLR	R10
    05F7 2766      CLR	R22
    05F8 2744      CLR	R20
(0019)   
(0020)   LCD_init();   //  液晶初始化
    05F9 DF5C      RCALL	_LCD_init
(0021)   delay_nms(2);
    05FA E002      LDI	R16,2
    05FB E010      LDI	R17,0
    05FC DD9A      RCALL	_delay_nms
(0022) 
(0023)   Total = EEPROM_read(511) ;
    05FD EF0F      LDI	R16,0xFF
    05FE E011      LDI	R17,1
    05FF DE5C      RCALL	_EEPROM_read
    0600 2EA0      MOV	R10,R16
(0024)   Total_shi = ( Total / 10 ) ;
    0601 E01A      LDI	R17,0xA
    0602 D49D      RCALL	div8u
    0603 2F60      MOV	R22,R16
(0025)   Total_ge  = ( Total % 10 ) ;
    0604 E01A      LDI	R17,0xA
    0605 2D0A      MOV	R16,R10
    0606 D497      RCALL	mod8u
    0607 2F40      MOV	R20,R16
(0026)   
(0027)   LCD_write_string(1,0,"Jason  Janitor");
    0608 E083      LDI	R24,3
    0609 E091      LDI	R25,1
    060A 8399      STD	Y+1,R25
    060B 8388      STD	Y+0,R24
    060C 2722      CLR	R18
    060D E001      LDI	R16,1
    060E DF5A      RCALL	_LCD_write_string
(0028)   LCD_write_string(2,1,"Total :   /83");
    060F EF85      LDI	R24,0xF5
    0610 E090      LDI	R25,0
    0611 8399      STD	Y+1,R25
    0612 8388      STD	Y+0,R24
    0613 E021      LDI	R18,1
    0614 E002      LDI	R16,2
    0615 DF53      RCALL	_LCD_write_string
(0029)   display( Total_shi , 26 );                                                                                                                                                            
    0616 E12A      LDI	R18,0x1A
    0617 2F06      MOV	R16,R22
    0618 DD8B      RCALL	_display
(0030)   display( Total_ge  , 27 );
    0619 E12B      LDI	R18,0x1B
    061A 2F04      MOV	R16,R20
    061B DD88      RCALL	_display
(0031)   
(0032)   Menu_flag  = 0 ; 
    061C 2422      CLR	R2
    061D 92200112  STS	Menu_flag,R2
(0033)   Wrong_flag  = 0 ; 
    061F 92200239  STS	Wrong_flag,R2
(0034)   Exist_flag  = 0 ;
    0621 92200113  STS	Exist_flag,R2
    0623 C010      RJMP	0x0634
(0035)   
(0036)   while(1)
(0037)   {
(0038)     if(IC_SW==0)
    0624 B380      IN	R24,0x10
    0625 7088      ANDI	R24,0x8
    0626 BB80      OUT	0x10,R24
    0627 2388      TST	R24
    0628 F451      BNE	0x0633
(0039) 	{
(0040)       delay_nms(50);               //   检测是否有卡插入
    0629 E302      LDI	R16,0x32
    062A E010      LDI	R17,0
    062B DD6B      RCALL	_delay_nms
(0041) 	  if(IC_SW==0)
    062C B380      IN	R24,0x10
    062D 7088      ANDI	R24,0x8
    062E BB80      OUT	0x10,R24
    062F 2388      TST	R24
    0630 F411      BNE	0x0633
(0042) 	  { 
(0043) 	    Read_Card();      //  读IC-Card 函数
    0631 D2E5      RCALL	_Read_Card
(0044) 		Card_Verify();
    0632 DCC1      RCALL	_Card_Verify
(0045)       }
(0046) 	}
(0047) 	
(0048) 	Menu();
    0633 D235      RCALL	_Menu
    0634 CFEF      RJMP	0x0624
    0635 9622      ADIW	R28,2
    0636 D491      RCALL	pop_gset3
    0637 9508      RET
(0049)   }
(0050) }
(0051) 
(0052) 
(0053) void main (void)
(0054) {
(0055)   port_init();   //  端口初始化
_main:
    0638 DFAE      RCALL	_port_init
(0056)   
(0057)   delay_nms(1);
    0639 E001      LDI	R16,1
    063A E010      LDI	R17,0
    063B DD5B      RCALL	_delay_nms
(0058)   
(0059)   menu_Init();
    063C DFB7      RCALL	_menu_Init
    063D 9508      RET
_Menu_Add:
  Total                --> R14
  i                    --> R20
  tem                  --> R22
  j                    --> R10
  k                    --> R12
    063E D48F      RCALL	push_gset5
    063F 9722      SBIW	R28,2
FILE: D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Menus.C
(0001) 
(0002) #include <iom8v.h>
(0003) #include <macros.h>
(0004) #include "lcd1602.h"
(0005) 
(0006) unsigned char Menu_flag = 0 , Exist_flag = 0 ;
(0007) 
(0008) void Menu_Add(void)
(0009) {
(0010)   unsigned char Total = 0 , i = 0 , j = 0 , k = 0 , tem = 0 ;
    0640 24EE      CLR	R14
    0641 2744      CLR	R20
    0642 24AA      CLR	R10
    0643 24CC      CLR	R12
    0644 2766      CLR	R22
(0011) 
(0012)   LCD_write_char(0x01,0);  //清屏
    0645 2722      CLR	R18
    0646 2733      CLR	R19
    0647 E001      LDI	R16,1
    0648 E010      LDI	R17,0
    0649 DF4D      RCALL	_LCD_write_char
(0013)   delay_nms(2);
    064A E002      LDI	R16,2
    064B E010      LDI	R17,0
    064C DD4A      RCALL	_delay_nms
(0014)   
(0015)   Total = EEPROM_read(511) ;
    064D EF0F      LDI	R16,0xFF
    064E E011      LDI	R17,1
    064F DE0C      RCALL	_EEPROM_read
    0650 2EE0      MOV	R14,R16
(0016)   if(Total==83)
    0651 3503      CPI	R16,0x53
    0652 F491      BNE	0x0665
(0017)   {
(0018)     LCD_write_string(0,0,"83 Cards Existed");
    0653 E188      LDI	R24,0x18
    0654 E092      LDI	R25,2
    0655 8399      STD	Y+1,R25
    0656 8388      STD	Y+0,R24
    0657 2722      CLR	R18
    0658 2700      CLR	R16
    0659 DF0F      RCALL	_LCD_write_string
(0019) 	LCD_write_string(3,1,"Is Full !!");
    065A E08D      LDI	R24,0xD
    065B E092      LDI	R25,2
    065C 8399      STD	Y+1,R25
    065D 8388      STD	Y+0,R24
    065E E021      LDI	R18,1
    065F E003      LDI	R16,3
    0660 DF08      RCALL	_LCD_write_string
(0020) 	delay_nms(2000);
    0661 ED00      LDI	R16,0xD0
    0662 E017      LDI	R17,7
    0663 DD33      RCALL	_delay_nms
(0021) 	Menu_0() ;
    0664 D1C0      RCALL	_Menu_0
(0022)   }
(0023)   
(0024)   LCD_write_string(0,0,"Menu1 : Add Card");
    0665 EF8C      LDI	R24,0xFC
    0666 E091      LDI	R25,1
    0667 8399      STD	Y+1,R25
    0668 8388      STD	Y+0,R24
    0669 2722      CLR	R18
    066A 2700      CLR	R16
    066B DEFD      RCALL	_LCD_write_string
(0025)   LCD_write_string(2,1,"Insert  Card");
    066C EE8F      LDI	R24,0xEF
    066D E091      LDI	R25,1
    066E 8399      STD	Y+1,R25
    066F 8388      STD	Y+0,R24
    0670 E021      LDI	R18,1
    0671 E002      LDI	R16,2
    0672 DEF6      RCALL	_LCD_write_string
    0673 C05E      RJMP	0x06D2
(0026)   
(0027)   while(1)
(0028)   {
(0029)     if(IC_SW==0)
    0674 B380      IN	R24,0x10
    0675 7088      ANDI	R24,0x8
    0676 BB80      OUT	0x10,R24
    0677 2388      TST	R24
    0678 F009      BEQ	0x067A
    0679 C058      RJMP	0x06D2
(0030)     {
(0031)       delay_nms(50);               //   检测是否有卡插入
    067A E302      LDI	R16,0x32
    067B E010      LDI	R17,0
    067C DD1A      RCALL	_delay_nms
(0032) 	  if(IC_SW==0)
    067D B380      IN	R24,0x10
    067E 7088      ANDI	R24,0x8
    067F BB80      OUT	0x10,R24
    0680 2388      TST	R24
    0681 F009      BEQ	0x0683
    0682 C04F      RJMP	0x06D2
(0033) 	  {
(0034) 	    Menu_flag = 1 ;
    0683 E081      LDI	R24,1
    0684 93800112  STS	Menu_flag,R24
(0035) 		Exist_flag = 1 ;
    0686 93800113  STS	Exist_flag,R24
(0036)         Read_Card();      //  读IC-Card 函数
    0688 D28E      RCALL	_Read_Card
(0037) 		Card_Verify();
    0689 DC6A      RCALL	_Card_Verify
(0038) 	  
(0039) 	    for(i=0;i<83;i++)
    068A 2744      CLR	R20
    068B C043      RJMP	0x06CF
(0040) 	    {
(0041) 	      tem = EEPROM_read(j);
    068C 2D0A      MOV	R16,R10
    068D 2711      CLR	R17
    068E DDCD      RCALL	_EEPROM_read
    068F 2F60      MOV	R22,R16
(0042) 		
(0043) 	      if(tem==0)
    0690 2300      TST	R16
    0691 F009      BEQ	0x0693
    0692 C038      RJMP	0x06CB
(0044) 		  {
(0045) 		    for(k=0;k<6;k++)
    0693 24CC      CLR	R12
    0694 C032      RJMP	0x06C7
(0046) 		    {
(0047) 		      EEPROM_write(j+k, IC_Codes_8[2+k]);
    0695 E28B      LDI	R24,0x2B
    0696 E092      LDI	R25,2
    0697 2DEC      MOV	R30,R12
    0698 27FF      CLR	R31
    0699 0FE8      ADD	R30,R24
    069A 1FF9      ADC	R31,R25
    069B 8120      LDD	R18,Z+0
    069C 2C2C      MOV	R2,R12
    069D 2433      CLR	R3
    069E 2D0A      MOV	R16,R10
    069F 2711      CLR	R17
    06A0 0D02      ADD	R16,R2
    06A1 1D13      ADC	R17,R3
    06A2 DDB1      RCALL	_EEPROM_write
(0048) 			  if(k==5)
    06A3 2D8C      MOV	R24,R12
    06A4 3085      CPI	R24,5
    06A5 F501      BNE	0x06C6
(0049) 			  {
(0050) 			    tem =  EEPROM_read(511) + 1 ;
    06A6 EF0F      LDI	R16,0xFF
    06A7 E011      LDI	R17,1
    06A8 DDB3      RCALL	_EEPROM_read
    06A9 2F60      MOV	R22,R16
    06AA 5F6F      SUBI	R22,0xFF
(0051) 				EEPROM_write(511, tem);
    06AB 2F26      MOV	R18,R22
    06AC EF0F      LDI	R16,0xFF
    06AD E011      LDI	R17,1
    06AE DDA5      RCALL	_EEPROM_write
(0052) 			  
(0053) 			    LCD_write_string(0,1,"Add Successfully");
    06AF ED8E      LDI	R24,0xDE
    06B0 E091      LDI	R25,1
    06B1 8399      STD	Y+1,R25
    06B2 8388      STD	Y+0,R24
    06B3 E021      LDI	R18,1
    06B4 2700      CLR	R16
    06B5 DEB3      RCALL	_LCD_write_string
    06B6 C00E      

⌨️ 快捷键说明

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