📄 key_scan.s
字号:
.module Key_Scan.C
.area text(rom, con, rel)
.dbfile D:\PROGRA~1\ICC\Pro(AVR)\环保型IC卡门禁系统\Key_Scan.C
.dbfunc e Key_Scan _Key_Scan fc
; Key_1 -> R22
; Key_2 -> R20
.even
_Key_Scan::
rcall push_gset2
.dbline -1
.dbline 6
; #include <iom8v.h>
; #include <macros.h>
; #include "lcd1602.h"
;
; unsigned char Key_Scan(void)
; {
.dbline 7
; unsigned char Key_1 = 0 , Key_2 = 0 ;
clr R22
.dbline 7
clr R20
.dbline 11
;
; //CLI();
;
; if((PIND&0x04)==0)
sbic 0x10,2
rjmp L2
.dbline 12
; Key_1 = 1 ;
ldi R22,1
rjmp L3
L2:
.dbline 13
; else if((PIND&0x02)==0)
sbic 0x10,1
rjmp L4
.dbline 14
; Key_1 = 2 ;
ldi R22,2
rjmp L5
L4:
.dbline 15
; else if((PIND&0x01)==0)
sbic 0x10,0
rjmp L6
.dbline 16
; Key_1 = 3 ;
ldi R22,3
L6:
L5:
L3:
.dbline 18
;
; PORTD = 0xf0 ;
ldi R24,240
out 0x12,R24
.dbline 19
; DDRD = 0x0f ;
ldi R24,15
out 0x11,R24
.dbline 21
;
; if((PIND&0x80)==0)
sbic 0x10,7
rjmp L8
.dbline 22
; Key_1 += 0 ;
rjmp L9
L8:
.dbline 23
; else if((PIND&0x40)==0)
sbic 0x10,6
rjmp L10
.dbline 24
; Key_1 += 3 ;
subi R22,253 ; addi 3
rjmp L11
L10:
.dbline 25
; else if((PIND&0x20)==0)
sbic 0x10,5
rjmp L12
.dbline 26
; Key_1 += 6 ;
subi R22,250 ; addi 6
rjmp L13
L12:
.dbline 27
; else if((PIND&0x10)==0)
sbic 0x10,4
rjmp L14
.dbline 28
; Key_1 += 9 ;
subi R22,247 ; addi 9
L14:
L13:
L11:
L9:
.dbline 30
;
; PORTD = 0x0f ; // 要先写 PORT , 后写 DDR
ldi R24,15
out 0x12,R24
.dbline 31
; DDRD = 0xf0 ;
ldi R24,240
out 0x11,R24
.dbline 33
;
; delay_nms(80);
ldi R16,80
ldi R17,0
rcall _delay_nms
.dbline 35
;
; if((PIND&0x04)==0)
sbic 0x10,2
rjmp L16
.dbline 36
; Key_2 = 1 ;
ldi R20,1
rjmp L17
L16:
.dbline 37
; else if((PIND&0x02)==0)
sbic 0x10,1
rjmp L18
.dbline 38
; Key_2 = 2 ;
ldi R20,2
rjmp L19
L18:
.dbline 39
; else if((PIND&0x01)==0)
sbic 0x10,0
rjmp L20
.dbline 40
; Key_2 = 3 ;
ldi R20,3
L20:
L19:
L17:
.dbline 42
;
; PORTD = 0xf0 ;
ldi R24,240
out 0x12,R24
.dbline 43
; DDRD = 0x0f ;
ldi R24,15
out 0x11,R24
.dbline 45
;
; if((PIND&0x80)==0)
sbic 0x10,7
rjmp L22
.dbline 46
; Key_2 += 0 ;
rjmp L23
L22:
.dbline 47
; else if((PIND&0x40)==0)
sbic 0x10,6
rjmp L24
.dbline 48
; Key_2 += 3 ;
subi R20,253 ; addi 3
rjmp L25
L24:
.dbline 49
; else if((PIND&0x20)==0)
sbic 0x10,5
rjmp L26
.dbline 50
; Key_2 += 6 ;
subi R20,250 ; addi 6
rjmp L27
L26:
.dbline 51
; else if((PIND&0x10)==0)
sbic 0x10,4
rjmp L28
.dbline 52
; Key_2 += 9 ;
subi R20,247 ; addi 9
L28:
L27:
L25:
L23:
.dbline 54
;
; PORTD = 0x0f ; // 要先写 PORT , 后写 DDR
ldi R24,15
out 0x12,R24
.dbline 55
; DDRD = 0xf0 ;
ldi R24,240
out 0x11,R24
.dbline 59
;
; //SEI();
;
; if(Key_1==Key_2)
cp R22,R20
brne L30
.dbline 60
; {
.dbline 61
; return Key_2 ;
mov R16,R20
rjmp L1
L30:
.dbline 64
; }
; else
; {
.dbline 65
; return 0 ;
clr R16
.dbline -2
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Key_1 22 c
.dbsym r Key_2 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -