📄 menus.s
字号:
.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 + -