📄 xkey.s
字号:
.module XKEY.C
.area text(rom, con, rel)
.dbfile I:\AVR视频教程\视频教程\lesson7\XKEY/lesson5.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; ms -> R16,R17
.even
_delay::
rcall push_gset2
.dbline -1
.dbline 7
; #include <iom16v.h>
; #include <macros.h>
; #include "lesson5.c"
; void main()
; {
; uchar i;
; DDRD|=0X30;
.dbline 9
;
; TCCR1A=0X63;
clr R20
clr R21
rjmp L5
L2:
.dbline 10
; TCCR1B=0X13;
.dbline 11
clr R22
clr R23
rjmp L9
L6:
.dbline 11
L7:
.dbline 11
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 11
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L6
.dbline 12
L3:
.dbline 9
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 9
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
.dbline 13
;
; OCR1A=1249;
; OCR1B=31;
L1:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r ms 16 i
.dbend
.dbfunc e key_press _key_press fc
; j -> R16
.even
_key_press::
.dbline -1
.dbline 16
;
; while(1)
; {
.dbline 18
; if(key_press())
; {
in R24,0x11
ori R24,15
out 0x11,R24
.dbline 19
; i=key_scan();
in R24,0x12
ori R24,15
out 0x12,R24
.dbline 21
; switch(i)
; {
in R24,0x11
andi R24,240
out 0x11,R24
.dbline 23
; case 1:
; OCR1B=31;
in R16,0x10
.dbline 24
; break;
andi R16,15
.dbline 25
; case 2:
cpi R16,15
brne L11
.dbline 26
; OCR1B=62;
.dbline 27
; break;
clr R16
rjmp L10
L11:
.dbline 30
; case 3:
; OCR1B=93;
; break;
.dbline 31
; case 4:
ldi R16,1
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r j 16 c
.dbend
.dbfunc e key_scan _key_scan fc
; key -> R20
.even
_key_scan::
rcall push_gset2
.dbline -1
.dbline 37
; OCR1B=124;
; break;
; default:
; OCR1B=31;
; }
; }
.dbline 39
; }
; }
ldi R16,10
ldi R17,0
rcall _delay
.dbline 40
; }
rcall _key_press
tst R16
breq L14
.dbline 41
; }
.dbline 42
; }
in R20,0x10
.dbline 43
; }
andi R20,15
.dbline 44
; }
mov R22,R20
clr R23
cpi R22,7
ldi R30,0
cpc R23,R30
breq L22
cpi R22,11
ldi R30,0
cpc R23,R30
breq L21
cpi R22,13
ldi R30,0
cpc R23,R30
breq L20
cpi R22,14
ldi R30,0
cpc R23,R30
breq L19
rjmp L16
X0:
.dbline 45
; }
L19:
.dbline 47
; }
; }
ldi R20,1
.dbline 48
; }
rjmp L24
L20:
.dbline 50
; }
; }
ldi R20,2
.dbline 51
; }
rjmp L24
L21:
.dbline 53
; }
; }
ldi R20,3
.dbline 54
; }
rjmp L24
L22:
.dbline 56
; }
; }
ldi R20,4
.dbline 57
; }
rjmp L24
L16:
.dbline 59
; }
; }
ldi R20,16
.dbline 60
; }
L23:
.dbline 61
L24:
.dbline 61
; }
rcall _key_press
tst R16
brne L23
.dbline 62
; }
rjmp L15
L14:
.dbline 64
; }
; }
.dbline 65
; }
ldi R20,16
.dbline 66
; }
L15:
.dbline 67
; }
mov R16,R20
.dbline -2
L13:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r key 20 c
.dbend
.dbfile I:\AVR视频教程\视频教程\lesson7\XKEY\XKEY.C
.dbfunc e main _main fV
; i -> R22
.even
_main::
.dbline -1
.dbline 5
.dbline 7
in R24,0x11
ori R24,48
out 0x11,R24
.dbline 9
ldi R24,99
out 0x2f,R24
.dbline 10
ldi R24,19
out 0x2e,R24
.dbline 12
ldi R24,1249
ldi R25,4
sts 74+1,R25
sts 74,R24
.dbline 13
ldi R24,31
ldi R25,0
sts 72+1,R25
sts 72,R24
rjmp L28
L27:
.dbline 16
.dbline 17
rcall _key_press
tst R16
breq L30
.dbline 18
.dbline 19
rcall _key_scan
mov R22,R16
.dbline 20
mov R20,R22
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L35
cpi R20,2
ldi R30,0
cpc R21,R30
breq L36
cpi R20,3
ldi R30,0
cpc R21,R30
breq L37
cpi R20,4
ldi R30,0
cpc R21,R30
breq L38
rjmp L32
X1:
.dbline 21
L35:
.dbline 23
ldi R24,31
ldi R25,0
sts 72+1,R25
sts 72,R24
.dbline 24
rjmp L33
L36:
.dbline 26
ldi R24,62
ldi R25,0
sts 72+1,R25
sts 72,R24
.dbline 27
rjmp L33
L37:
.dbline 29
ldi R24,93
ldi R25,0
sts 72+1,R25
sts 72,R24
.dbline 30
rjmp L33
L38:
.dbline 32
ldi R24,124
ldi R25,0
sts 72+1,R25
sts 72,R24
.dbline 33
rjmp L33
L32:
.dbline 35
ldi R24,31
ldi R25,0
sts 72+1,R25
sts 72,R24
.dbline 36
L33:
.dbline 37
L30:
.dbline 38
L28:
.dbline 15
rjmp L27
X2:
.dbline -2
.dbline 39
L26:
.dbline 0 ; func end
ret
.dbsym r i 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -