📄 key.s
字号:
.module Key.C
.area code(ram, con, rel)
.area lit(rom, con, rel)
_keyset::
.byte 12,13
.byte 14,15
.byte 8,9
.byte 10,11
.byte 4,5
.byte 6,7
.byte 0,1
.byte 2,3
.dbfile C:\DOCUME~1\Administrator\桌面\Car&Lcd\Key.C
.dbsym e keyset _keyset A[16:16]kc
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\Car&Lcd\Key.C
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\Car&Lcd\Key.C
.dbfunc e key_init _key_init fV
.even
_key_init::
.dbline -1
.dbline 23
; /********************************************
; /* 键盘扫描函数
; /* PROTC口用于扫描键盘
; /* 函数返回键值,无按键时返回0x7F
; /* 在其他文件中调用函数时应做以下说明
; /* extern unsigned char scan_key(void);
; /* extern unsigned char keypad(void);
; ********************************************/
; #include <io8515v.h>
; #include <Key.h>
;
; #pragma data:code
; const char keyset[]=
; {
; 12,13,14,15,
; 8, 9, 10,11,
; 4, 5, 6, 7,
; 0, 1, 2, 3
; };
; #pragma data:data
;
; void key_init(void)
; {
.dbline 24
; JP = 0xFF;
ldi R24,255
out 0x15,R24
.dbline 25
; JP_FX = 0x00;
clr R2
out 0x14,R2
.dbline -2
.dbline 26
; }
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e scan_key _scan_key fc
; i -> R22
; temp -> R10
.even
_scan_key::
rcall push_gset3
.dbline -1
.dbline 29
;
; unsigned char scan_key(void)
; {
.dbline 31
; unsigned char i,temp;
; JP_FX=0x0F;
ldi R24,15
out 0x14,R24
.dbline 32
; JP=0xFF;
ldi R24,255
out 0x15,R24
.dbline 33
; for(i=0;i<4;i++)
clr R22
rjmp L6
L3:
.dbline 34
; {
.dbline 35
; JP=~(1<<i);
ldi R16,1
mov R17,R22
rcall lsl8
mov R2,R16
com R2
out 0x15,R2
.dbline 36
; delay_nus(100);
ldi R16,100
ldi R17,0
rcall _delay_nus
.dbline 37
; temp=JP_IN&0xF0;
in R24,0x13
andi R24,240
mov R10,R24
.dbline 38
; if(temp!=0xF0)
cpi R24,240
brne X1
rjmp L7
X1:
.dbline 39
; {
.dbline 40
; delay_nms(15);
ldi R16,15
ldi R17,0
rcall _delay_nms
.dbline 41
; temp=JP_IN&0xF0;
in R24,0x13
andi R24,240
mov R10,R24
.dbline 42
; if(temp!=0xF0)
cpi R24,240
brne X2
rjmp L9
X2:
.dbline 43
; {
.dbline 44
; temp&=0xF0;
andi R24,240
mov R10,R24
.dbline 45
; switch(temp)
mov R20,R24
clr R21
cpi R20,176
ldi R30,0
cpc R21,R30
breq L15
ldi R24,176
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L19
L18:
cpi R20,112
ldi R30,0
cpc R21,R30
breq L14
rjmp L11
L19:
cpi R20,208
ldi R30,0
cpc R21,R30
breq L16
cpi R20,208
ldi R30,0
cpc R21,R30
brge X3
rjmp L11
X3:
L20:
cpi R20,224
ldi R30,0
cpc R21,R30
breq L17
rjmp L11
X0:
.dbline 46
; {
L14:
.dbline 47
; case 0x70:temp=15-(3-i)*4;break;
ldi R24,3
sub R24,R22
lsl R24
lsl R24
ldi R25,15
mov R10,R25
sub R10,R24
.dbline 47
rjmp L12
L15:
.dbline 48
; case 0xb0:temp=14-(3-i)*4;break;
ldi R24,3
sub R24,R22
lsl R24
lsl R24
ldi R25,14
mov R10,R25
sub R10,R24
.dbline 48
rjmp L12
L16:
.dbline 49
; case 0xd0:temp=13-(3-i)*4;break;
ldi R24,3
sub R24,R22
lsl R24
lsl R24
ldi R25,13
mov R10,R25
sub R10,R24
.dbline 49
rjmp L12
L17:
.dbline 50
; case 0xe0:temp=12-(3-i)*4;break;
ldi R24,3
sub R24,R22
lsl R24
lsl R24
ldi R25,12
mov R10,R25
sub R10,R24
.dbline 50
rjmp L12
L11:
.dbline 51
; default:temp=0x7F;
ldi R24,127
mov R10,R24
.dbline 52
; }
L12:
.dbline 53
; temp=keyset[temp];
ldi R24,<_keyset
ldi R25,>_keyset
mov R2,R10
clr R3
add R2,R24
adc R3,R25
mov R30,R2
mov R31,R3
lpm
mov R10,R0
.dbline 54
; return temp;
mov R16,R10
rjmp L2
L9:
.dbline 56
; }
; }
L7:
.dbline 57
ldi R24,127
out 0x15,R24
.dbline 58
L4:
.dbline 33
inc R22
L6:
.dbline 33
cpi R22,4
brsh X4
rjmp L3
X4:
.dbline 59
; JP=0x7F;
; }
; return 0x7F;
ldi R16,127
.dbline -2
L2:
rcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r i 22 c
.dbsym r temp 10 c
.dbend
.dbfunc e keypad _keypad fc
; temp1 -> R20
; temp2 -> R22
.even
_keypad::
rcall push_gset2
.dbline -1
.dbline 62
; }
; unsigned char keypad(void)
; {
.dbline 64
; unsigned char temp1,temp2;
; temp1=scan_key();
rcall _scan_key
mov R20,R16
.dbline 65
; if(temp1==0x7F)
cpi R16,127
brne L22
.dbline 66
; return 0x7F;
ldi R16,127
rjmp L21
L22:
L24:
.dbline 68
; do
; temp2=scan_key();
rcall _scan_key
mov R22,R16
L25:
.dbline 69
; while(temp1==temp2);
cp R20,R22
breq L24
.dbline 70
; return temp1;
mov R16,R20
.dbline -2
L21:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r temp1 20 c
.dbsym r temp2 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -