📄 key_scan.lis
字号:
.module Key_Scan.C
.area text(rom, con, rel)
0000 .dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Key_Scan.C
0000 .dbfunc e Key_Scan _Key_Scan fc
0000 ; Key_1 -> R22
0000 ; Key_2 -> R20
.even
0000 _Key_Scan::
0000 00D0 rcall push_gset2
0002 .dbline -1
0002 .dbline 6
0002 ; #include <iom8v.h>
0002 ; #include <macros.h>
0002 ; #include "lcd1602.h"
0002 ;
0002 ; unsigned char Key_Scan(void)
0002 ; {
0002 .dbline 7
0002 ; unsigned char Key_1 = 0 , Key_2 = 0 ;
0002 6627 clr R22
0004 .dbline 7
0004 4427 clr R20
0006 .dbline 11
0006 ;
0006 ; //CLI();
0006 ;
0006 ; if((PIND&0x04)==0)
0006 8299 sbic 0x10,2
0008 02C0 rjmp L2
000A .dbline 12
000A ; Key_1 = 1 ;
000A 61E0 ldi R22,1
000C 07C0 rjmp L3
000E L2:
000E .dbline 13
000E ; else if((PIND&0x02)==0)
000E 8199 sbic 0x10,1
0010 02C0 rjmp L4
0012 .dbline 14
0012 ; Key_1 = 2 ;
0012 62E0 ldi R22,2
0014 03C0 rjmp L5
0016 L4:
0016 .dbline 15
0016 ; else if((PIND&0x01)==0)
0016 8099 sbic 0x10,0
0018 01C0 rjmp L6
001A .dbline 16
001A ; Key_1 = 3 ;
001A 63E0 ldi R22,3
001C L6:
001C L5:
001C L3:
001C .dbline 18
001C ;
001C ; PORTD = 0xf0 ;
001C 80EF ldi R24,240
001E 82BB out 0x12,R24
0020 .dbline 19
0020 ; DDRD = 0x0f ;
0020 8FE0 ldi R24,15
0022 81BB out 0x11,R24
0024 .dbline 21
0024 ;
0024 ; if((PIND&0x80)==0)
0024 8799 sbic 0x10,7
0026 01C0 rjmp L8
0028 .dbline 22
0028 ; Key_1 += 0 ;
0028 0BC0 rjmp L9
002A L8:
002A .dbline 23
002A ; else if((PIND&0x40)==0)
002A 8699 sbic 0x10,6
002C 02C0 rjmp L10
002E .dbline 24
002E ; Key_1 += 3 ;
002E 6D5F subi R22,253 ; addi 3
0030 07C0 rjmp L11
0032 L10:
0032 .dbline 25
0032 ; else if((PIND&0x20)==0)
0032 8599 sbic 0x10,5
0034 02C0 rjmp L12
0036 .dbline 26
0036 ; Key_1 += 6 ;
0036 6A5F subi R22,250 ; addi 6
0038 03C0 rjmp L13
003A L12:
003A .dbline 27
003A ; else if((PIND&0x10)==0)
003A 8499 sbic 0x10,4
003C 01C0 rjmp L14
003E .dbline 28
003E ; Key_1 += 9 ;
003E 675F subi R22,247 ; addi 9
0040 L14:
0040 L13:
0040 L11:
0040 L9:
0040 .dbline 30
0040 ;
0040 ; PORTD = 0x0f ; // 要先写 PORT , 后写 DDR
0040 8FE0 ldi R24,15
0042 82BB out 0x12,R24
0044 .dbline 31
0044 ; DDRD = 0xf0 ;
0044 80EF ldi R24,240
0046 81BB out 0x11,R24
0048 .dbline 33
0048 ;
0048 ; delay_nms(80);
0048 00E5 ldi R16,80
004A 10E0 ldi R17,0
004C 00D0 rcall _delay_nms
004E .dbline 35
004E ;
004E ; if((PIND&0x04)==0)
004E 8299 sbic 0x10,2
0050 02C0 rjmp L16
0052 .dbline 36
0052 ; Key_2 = 1 ;
0052 41E0 ldi R20,1
0054 07C0 rjmp L17
0056 L16:
0056 .dbline 37
0056 ; else if((PIND&0x02)==0)
0056 8199 sbic 0x10,1
0058 02C0 rjmp L18
005A .dbline 38
005A ; Key_2 = 2 ;
005A 42E0 ldi R20,2
005C 03C0 rjmp L19
005E L18:
005E .dbline 39
005E ; else if((PIND&0x01)==0)
005E 8099 sbic 0x10,0
0060 01C0 rjmp L20
0062 .dbline 40
0062 ; Key_2 = 3 ;
0062 43E0 ldi R20,3
0064 L20:
0064 L19:
0064 L17:
0064 .dbline 42
0064 ;
0064 ; PORTD = 0xf0 ;
0064 80EF ldi R24,240
0066 82BB out 0x12,R24
0068 .dbline 43
0068 ; DDRD = 0x0f ;
0068 8FE0 ldi R24,15
006A 81BB out 0x11,R24
006C .dbline 45
006C ;
006C ; if((PIND&0x80)==0)
006C 8799 sbic 0x10,7
006E 01C0 rjmp L22
0070 .dbline 46
0070 ; Key_2 += 0 ;
0070 0BC0 rjmp L23
0072 L22:
0072 .dbline 47
0072 ; else if((PIND&0x40)==0)
0072 8699 sbic 0x10,6
0074 02C0 rjmp L24
0076 .dbline 48
0076 ; Key_2 += 3 ;
0076 4D5F subi R20,253 ; addi 3
0078 07C0 rjmp L25
007A L24:
007A .dbline 49
007A ; else if((PIND&0x20)==0)
007A 8599 sbic 0x10,5
007C 02C0 rjmp L26
007E .dbline 50
007E ; Key_2 += 6 ;
007E 4A5F subi R20,250 ; addi 6
0080 03C0 rjmp L27
0082 L26:
0082 .dbline 51
0082 ; else if((PIND&0x10)==0)
0082 8499 sbic 0x10,4
0084 01C0 rjmp L28
0086 .dbline 52
0086 ; Key_2 += 9 ;
0086 475F subi R20,247 ; addi 9
0088 L28:
0088 L27:
0088 L25:
0088 L23:
0088 .dbline 54
0088 ;
0088 ; PORTD = 0x0f ; // 要先写 PORT , 后写 DDR
0088 8FE0 ldi R24,15
008A 82BB out 0x12,R24
008C .dbline 55
008C ; DDRD = 0xf0 ;
008C 80EF ldi R24,240
008E 81BB out 0x11,R24
0090 .dbline 59
0090 ;
0090 ; //SEI();
0090 ;
0090 ; if(Key_1==Key_2)
0090 6417 cp R22,R20
0092 11F4 brne L30
0094 .dbline 60
0094 ; {
0094 .dbline 61
0094 ; return Key_2 ;
0094 042F mov R16,R20
0096 01C0 rjmp L1
0098 L30:
0098 .dbline 64
0098 ; }
0098 ; else
0098 ; {
0098 .dbline 65
0098 ; return 0 ;
0098 0027 clr R16
009A .dbline -2
009A L1:
009A 00D0 rcall pop_gset2
009C .dbline 0 ; func end
009C 0895 ret
009E .dbsym r Key_1 22 c
009E .dbsym r Key_2 20 c
009E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -