📄 keyboard_driver.s
字号:
.module keyboard_Driver.c
.area text(rom, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\keyboard_Driver.c
.dbfunc e key _key fi
; pb -> R22
; a -> R20
.even
_key::
rcall push_gset2
mov R20,R16
.dbline -1
.dbline 7
; #include <iom8v.h>
; #include <macros.h>
; #include "discharge.h"
; unsigned char key_old;
; unsigned char key_time;
; unsigned int key(unsigned char a)
; {
.dbline 8
; unsigned char pb=0;
clr R22
.dbline 9
; if(a==0)
tst R20
brne L2
.dbline 10
; {
.dbline 11
; delay_nms(1);
ldi R16,1
ldi R17,0
rcall _delay_nms
.dbline 12
; pb=(~PINB)&0x39;
in R22,0x16
com R22
andi R22,57
.dbline 13
; a=(pb>>2)|(pb&0x01);
mov R24,R22
andi R24,1
mov R20,R22
lsr R20
lsr R20
or R20,R24
.dbline 14
; if(a==key_old)
lds R2,_key_old
cp R20,R2
brne L4
.dbline 15
; {
.dbline 16
; key_time++;
lds R24,_key_time
subi R24,255 ; addi 1
sts _key_time,R24
.dbline 17
; if(key_time==20)
cpi R24,20
brne L6
.dbline 18
; {a|=0x10;key_old=a;key_time=0;return a;}
.dbline 18
ori R20,16
.dbline 18
sts _key_old,R20
.dbline 18
clr R2
sts _key_time,R2
.dbline 18
mov R16,R20
clr R17
rjmp L1
L6:
.dbline 20
; else
; return 0;
clr R16
clr R17
rjmp L1
L4:
.dbline 23
; }
; else
; {
.dbline 24
; if(a==(key_old&~0x10)){return 0;}
lds R24,_key_old
andi R24,239
cp R20,R24
brne L8
.dbline 24
.dbline 24
clr R16
clr R17
rjmp L1
L8:
.dbline 25
; else key_old=a;key_time=0;return a;
sts _key_old,R20
.dbline 25
clr R2
sts _key_time,R2
.dbline 25
mov R16,R20
clr R17
rjmp L1
L2:
.dbline 28
; }
; }
; return a;
mov R16,R20
clr R17
.dbline -2
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r pb 22 c
.dbsym r a 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\刻录的\电子技术\项目\电池放电器\软件V2.0\keyboard_Driver.c
_key_time::
.blkb 1
.dbsym e key_time _key_time c
_key_old::
.blkb 1
.dbsym e key_old _key_old c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -