📄 key.s
字号:
.module key.c
.area vector(rom, abs)
.org 40
jmp _Read_Keybroad
.area data(ram, con, rel)
L2:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.area text(rom, con, rel)
.dbfile E:\software\MP3程序\Keyboard\key.c
.dbfunc e Read_Keybroad _Read_Keybroad fV
.dbsym s push L2 c
.even
_Read_Keybroad::
st -y,R2
st -y,R16
st -y,R17
st -y,R24
st -y,R25
st -y,R30
in R2,0x3f
st -y,R2
.dbline -1
.dbline 17
; #include <iom64v.h>
; #include <macros.h>
; #include "key.h"
; #define uchar unsigned char
; #define uint unsigned int
;
; #define key1 BIT(4)
; #define key2 BIT(5)
; #define key3 BIT(6)
; #define key4 BIT(7)
;
; uchar keybuf;
;
; #pragma interrupt_handler Read_Keybroad:11
; /******************************************************************************/
; void Read_Keybroad(void)
; {
.dbline 19
; static uchar push = 0;
; TCCR2 = 0X00;
clr R2
out 0x25,R2
.dbline 20
; DDRF &= 0x0f;
lds R24,97
andi R24,15
sts 97,R24
.dbline 21
; PORTF |= 0xf0;
lds R24,98
ori R24,240
sts 98,R24
.dbline 22
; NOP();
nop
.dbline 23
; NOP();
nop
.dbline 25
; // Print_str("I,am herer\r\n");
; if((PINF & 0xf0) == 0xf0){
in R24,0x0
andi R24,240
cpi R24,240
breq X2
xjmp L3
X2:
.dbline 25
.dbline 26
; DDRF |= 0x80;
lds R24,97
ori R24,128
sts 97,R24
.dbline 27
; PORTF &= 0x7f; //输出0
lds R24,98
andi R24,127
sts 98,R24
.dbline 28
; NOP();
nop
.dbline 29
; NOP();
nop
.dbline 30
; if((PINF & 0x70) == 0x70){//这里表示S2、S3、S7没有按下
in R24,0x0
andi R24,112
cpi R24,112
brne L5
.dbline 30
.dbline 31
; push = 0;
sts L2,R2
.dbline 32
; TCCR2 = 0X05;
ldi R24,5
out 0x25,R24
.dbline 33
; return;
xjmp L1
L5:
.dbline 35
; }
; if(push){//键没有释放
lds R2,L2
tst R2
breq L7
.dbline 35
.dbline 36
; TCCR2 = 0X05;
ldi R24,5
out 0x25,R24
.dbline 37
; return;
xjmp L1
L7:
.dbline 39
; }
; switch(PINF & 0x70)
in R16,0x0
clr R17
andi R16,112
andi R17,0
cpi R16,80
ldi R30,0
cpc R17,R30
breq L13
ldi R24,80
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L16
L15:
cpi R16,48
ldi R30,0
cpc R17,R30
breq L14
xjmp L9
L16:
cpi R16,96
ldi R30,0
cpc R17,R30
breq L12
xjmp L9
X0:
.dbline 40
; {
L12:
.dbline 41
; case 0b01100000: keybuf = UP; push=1; break;//s1
ldi R24,4
sts _keybuf,R24
.dbline 41
ldi R24,1
sts L2,R24
.dbline 41
xjmp L10
L13:
.dbline 42
; case 0b01010000: keybuf = DOWN; push=1; break;//s6
ldi R24,5
sts _keybuf,R24
.dbline 42
ldi R24,1
sts L2,R24
.dbline 42
xjmp L10
L14:
.dbline 43
; case 0b00110000: keybuf = LIFT; push=1; break;//s6
ldi R24,6
sts _keybuf,R24
.dbline 43
ldi R24,1
sts L2,R24
.dbline 43
xjmp L10
L9:
.dbline 44
; default : KEYBUF_NULL;
clr R2
sts _keybuf,R2
.dbline 44
.dbline 45
; }
L10:
.dbline 46
; TCCR2 = 0X05;
ldi R24,5
out 0x25,R24
.dbline 47
; return;
xjmp L1
L3:
.dbline 49
; }// if((PINF & 0xf0) == 0xf0)
; if(push){TCCR2 = 0X05;return;}//键没有释放
lds R2,L2
tst R2
breq L17
.dbline 49
.dbline 49
ldi R24,5
out 0x25,R24
.dbline 49
xjmp L1
L17:
.dbline 50
; switch(PINF & 0x70)
in R16,0x0
clr R17
andi R16,112
andi R17,0
cpi R16,80
ldi R30,0
cpc R17,R30
breq L23
ldi R24,80
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L26
L25:
cpi R16,48
ldi R30,0
cpc R17,R30
breq L24
xjmp L19
L26:
cpi R16,96
ldi R30,0
cpc R17,R30
breq L22
xjmp L19
X1:
.dbline 51
; {
L22:
.dbline 52
; case 0b01100000: keybuf = RIFT; push=1; break;//s4
ldi R24,3
sts _keybuf,R24
.dbline 52
ldi R24,1
sts L2,R24
.dbline 52
xjmp L20
L23:
.dbline 53
; case 0b01010000: keybuf = ESC; push=1; break;//s5
ldi R24,1
sts _keybuf,R24
.dbline 53
sts L2,R24
.dbline 53
xjmp L20
L24:
.dbline 54
; case 0b00110000: keybuf = ENTER;push=1; break;//s8
ldi R24,2
sts _keybuf,R24
.dbline 54
ldi R24,1
sts L2,R24
.dbline 54
xjmp L20
L19:
.dbline 55
; default : KEYBUF_NULL;
clr R2
sts _keybuf,R2
.dbline 55
.dbline 56
; }
L20:
.dbline 57
; TCCR2 = 0X05;
ldi R24,5
out 0x25,R24
.dbline 58
; return;
.dbline -2
L1:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R25,y+
ld R24,y+
ld R17,y+
ld R16,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e key_init _key_init fV
.even
_key_init::
.dbline -1
.dbline 62
; }
;
; void key_init(void)
; {
.dbline 63
; TCCR2 = 0x00; //stop
clr R2
out 0x25,R2
.dbline 64
; TCNT2 = 0x00; //set count
out 0x24,R2
.dbline 65
; TIMSK |= 1<<TOIE2;
in R24,0x37
ori R24,64
out 0x37,R24
.dbline 66
; TCCR2 = 0x05; //stop
ldi R24,5
out 0x25,R24
.dbline 67
; SEI();
sei
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile E:\software\MP3程序\Keyboard\key.c
_keybuf::
.blkb 1
.dbsym e keybuf _keybuf c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -