📄 ic_card.lst
字号:
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 + -