📄 keyboard.s
字号:
.module keyboard.c
.area data(ram, con, rel)
L2:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
L3:
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.area lit(rom, con, rel)
L4:
.byte 'R,'U,'N
L5:
.byte 32,32,32
.area text(rom, con, rel)
.dbfile G:\Acceleratoion\Acceleration\keyboard.c
.dbfunc e keyboardRead _keyboardRead fV
.dbsym s stringBlank3 L5 A[3:3]kc
.dbsym s stringRUN L4 A[3:3]kc
.dbsym s keyPressed0 L3 c
.dbsym s keyPressed00 L2 c
; keyPressed -> R22
; keyDetected -> R20
.even
_keyboardRead::
xcall push_gset2
sbiw R28,4
.dbline -1
.dbline 11
; //Keyboard.c
;
; #include "keyboard.h"
;
; //Controlled state
; extern char mute;
; extern char mainState;
; extern unsigned short idleTime;
;
; void keyboardRead(void)
; {
.dbline 20
; static char keyPressed00 = 0x00;
; static char keyPressed0 = 0x00;
; char keyPressed;
; char keyDetected;
; static const char stringRUN[3] = "RUN";
; static const char stringBlank3[3] = " ";
;
; //1. Read PORTB
; keyPressed = ~PINB&(PB_MUTE|PB_START|PB_CLR|PB_OFF);//Invert
in R22,0x16
com R22
andi R22,7
.dbline 22
; //2. Key Detect
; keyDetected = keyPressed&keyPressed0&(~keyPressed00);
lds R2,L3
mov R20,R22
and R20,R2
lds R2,L2
com R2
and R20,R2
.dbline 23
; keyPressed00 = keyPressed0;
lds R2,L3
sts L2,R2
.dbline 24
; keyPressed0 = keyPressed;
sts L3,R22
.dbline 26
; //3. Classify
; if(keyDetected)
tst R20
brne X0
xjmp L6
X0:
.dbline 27
; {
.dbline 28
; idleTime = 0; //clear idle timer when key Pressed
clr R2
clr R3
sts _idleTime+1,R3
sts _idleTime,R2
.dbline 29
; if(keyDetected&PB_MUTE)
sbrs R20,0
rjmp L8
.dbline 30
; {
.dbline 31
; mute = !mute;
lds R2,_mute
tst R2
brne L10
ldi R22,1
ldi R23,0
xjmp L11
L10:
clr R22
clr R23
L11:
sts _mute,R22
.dbline 32
; if(mute)
tst R22
breq L12
.dbline 33
; lcdWriteChar(1,0,0xf8);
ldi R24,248
std y+0,R24
clr R18
ldi R16,1
xcall _lcdWriteChar
xjmp L13
L12:
.dbline 35
; else
; lcdWriteChar(1,0,' ');
ldi R24,32
std y+0,R24
clr R18
ldi R16,1
xcall _lcdWriteChar
L13:
.dbline 36
; }
L8:
.dbline 37
; if(keyDetected&PB_START)
sbrs R20,2
rjmp L14
.dbline 38
; {
.dbline 39
; if(mainState==0)
lds R2,_mainState
tst R2
brne L16
.dbline 40
; {
.dbline 41
; mainState = 1;
ldi R24,1
sts _mainState,R24
.dbline 42
; lcdWriteString(0,0,3,stringRUN);
ldi R24,<L4
ldi R25,>L4
std y+3,R25
std y+2,R24
ldi R24,3
std y+0,R24
clr R18
clr R16
xcall _lcdWriteString
.dbline 43
; }
xjmp L17
L16:
.dbline 45
; else
; {
.dbline 46
; mainState = 0;
clr R2
sts _mainState,R2
.dbline 47
; lcdWriteString(0,0,3,stringBlank3);
ldi R24,<L5
ldi R25,>L5
std y+3,R25
std y+2,R24
ldi R24,3
std y+0,R24
clr R18
clr R16
xcall _lcdWriteString
.dbline 48
; }
L17:
.dbline 49
; }
L14:
.dbline 50
; if(keyDetected&PB_CLR)
sbrs R20,1
rjmp L18
.dbline 51
; {
.dbline 52
; }
L18:
.dbline 53
; if(keyDetected&PB_OFF)
sbrs R20,0
rjmp L20
.dbline 54
; {
.dbline 55
; powerOff();
xcall _powerOff
.dbline 56
; }
L20:
.dbline 57
L6:
.dbline -2
L1:
adiw R28,4
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r keyPressed 22 c
.dbsym r keyDetected 20 c
.dbend
.dbfunc e powerOff _powerOff fV
.even
_powerOff::
.dbline -1
.dbline 62
; }//if keyDetected
; }
;
;
; void powerOff(void)
; {
.dbline 63
; mainState = 0;//-->IDLE
clr R2
sts _mainState,R2
.dbline 65
; //Save SD card
; PORT_POWER &= ~BIT_POWER;
cbi 0x1b,5
.dbline -2
L22:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -