📄 键盘.s
字号:
.module _键盘.c
.area text(rom, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
_A::
.blkb 2
.area idata
.byte 63,6
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 91,'O
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 'f,'m
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 125,7
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 127,'o
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 'w,127
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 57,63
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.blkb 2
.area idata
.byte 'y,'q
.area data(ram, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.dbsym e A _A A[16:16]c
.area text(rom, con, rel)
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; x -> R16,R17
.even
_delay::
xcall push_xgsetF000
.dbline -1
.dbline 10
; //ICC-AVR application builder : 2008-10-16 19:41:41
; // Target : M16
; // Crystal: 8.0000Mhz
;
; #include <iom16v.h>
; #include <macros.h>
; unsigned char A[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7f,0x39,0x3f,0x79,0x71};
;
; void delay(unsigned int x)
; {
.dbline 12
; int i,j;
; for(i=0;i<x;i++)
clr R20
clr R21
xjmp L5
L2:
.dbline 13
; for(j=0;j<8000;j++)
clr R22
clr R23
L6:
.dbline 14
; ;
L7:
.dbline 13
subi R22,255 ; offset = 1
sbci R23,255
.dbline 13
cpi R22,64
ldi R30,31
cpc R23,R30
brlt L6
X0:
L3:
.dbline 12
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 12
cp R20,R16
cpc R21,R17
brlo L2
X1:
.dbline -2
L1:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r i 20 I
.dbsym r j 22 I
.dbsym r x 16 i
.dbend
.dbfunc e read_key _read_key fc
; l -> <dead>
; k -> <dead>
; key_value -> R10
; j -> R22
; i -> R20
.even
_read_key::
xcall push_xgsetF00C
mov R20,R16
.dbline -1
.dbline 18
; }
;
; unsigned char read_key(unsigned char i)
; {
.dbline 19
; unsigned char j,k,l,key_value=0;
clr R10
.dbline 20
; PORTD=0x0F;
ldi R24,15
out 0x12,R24
.dbline 22
; //DDRD=0xF0;
; if((PIND&0X0f)==0x0f) return 0xff;
in R24,0x10
andi R24,15
cpi R24,15
brne L11
X2:
.dbline 22
ldi R16,255
xjmp L10
L11:
.dbline 24
; else
; {delay(5);
.dbline 24
ldi R16,5
ldi R17,0
xcall _delay
.dbline 25
; if((PIND&0x0f)==0x0f) return 0xff;
in R24,0x10
andi R24,15
cpi R24,15
brne L13
X3:
.dbline 25
ldi R16,255
xjmp L10
L13:
.dbline 27
; else
; for(i=4;i<8;i++)
ldi R20,4
xjmp L18
L15:
.dbline 28
; {
.dbline 29
; PORTD=~(1<<i)| 0x0f;
ldi R16,1
mov R17,R20
xcall lsl8
mov R24,R16
com R24
ori R24,15
out 0x12,R24
.dbline 30
; for(j=0;j<4;j++)
clr R22
xjmp L22
L19:
.dbline 31
; {
.dbline 32
; if((PIND&(1<<j))==0)
ldi R16,1
mov R17,R22
xcall lsl8
in R2,0x10
and R2,R16
brne L23
X4:
.dbline 33
; key_value=(i-4)*4+j;
mov R24,R20
subi R24,4
mov R10,R24
lsl R10
lsl R10
add R10,R22
L23:
.dbline 34
; }
L20:
.dbline 30
inc R22
L22:
.dbline 30
cpi R22,4
brlo L19
X5:
.dbline 35
; }
L16:
.dbline 27
inc R20
L18:
.dbline 27
cpi R20,8
brlo L15
X6:
.dbline 36
; return key_value;
mov R16,R10
.dbline -2
L10:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym l l 1 c
.dbsym l k 1 c
.dbsym r key_value 10 c
.dbsym r j 22 c
.dbsym r i 20 c
.dbend
.dbfunc e main _main fV
.area func_lit(rom, con, rel)
L63:
.word `L32
.word `L33
.word `L35
.word `L37
.word `L39
.word `L41
.word `L43
.word `L45
.word `L47
.word `L49
.word `L51
.word `L53
.word `L55
.word `L57
.word `L59
.word `L61
.area text(rom, con, rel)
; m -> R10
.even
_main::
.dbline -1
.dbline 40
; }
; }
; void main()
; {
.dbline 42
; unsigned char m;
; PORTA=0xFF;
ldi R24,255
out 0x1b,R24
.dbline 43
; DDRA=0xFF;
out 0x1a,R24
.dbline 44
; PORTD=0x0F;
ldi R24,15
out 0x12,R24
.dbline 45
; DDRD=0xF0;
ldi R24,240
out 0x11,R24
xjmp L27
L26:
.dbline 47
; while(1)
; {
.dbline 48
; m=read_key(4);
ldi R16,4
xcall _read_key
mov R10,R16
.dbline 49
; switch(m)
mov R20,R10
clr R21
cpi R20,0
ldi R30,0
cpc R21,R30
brge X11
xjmp L29
X11:
X7:
ldi R24,15
ldi R25,0
cp R24,R20
cpc R25,R21
brge X12
xjmp L29
X12:
X8:
ldi R24,<L63
ldi R25,>L63
movw R30,R20
lsl R30
rol R31
add R30,R24
adc R31,R25
lpm R2,Z+
lpm R3,Z
movw R30,R2
ijmp
X9:
.dbfile D:\学习工具\单片机程序\键盘\键盘.c
.dbline 50
; {
L32:
.dbline 52
;
; case 0:PORTA=A[0];break;
lds R2,_A
out 0x1b,R2
.dbline 52
xjmp L30
L33:
.dbline 53
; case 1:PORTA=A[1];break;
lds R2,_A+1
out 0x1b,R2
.dbline 53
xjmp L30
L35:
.dbline 54
; case 2:PORTA=A[2];break;
lds R2,_A+2
out 0x1b,R2
.dbline 54
xjmp L30
L37:
.dbline 55
; case 3:PORTA=A[3];break;
lds R2,_A+3
out 0x1b,R2
.dbline 55
xjmp L30
L39:
.dbline 56
; case 4:PORTA=A[4];break;
lds R2,_A+4
out 0x1b,R2
.dbline 56
xjmp L30
L41:
.dbline 57
; case 5:PORTA=A[5];break;
lds R2,_A+5
out 0x1b,R2
.dbline 57
xjmp L30
L43:
.dbline 58
; case 6:PORTA=A[6];break;
lds R2,_A+6
out 0x1b,R2
.dbline 58
xjmp L30
L45:
.dbline 59
; case 7:PORTA=A[7];break;
lds R2,_A+7
out 0x1b,R2
.dbline 59
xjmp L30
L47:
.dbline 60
; case 8:PORTA=A[8];break;
lds R2,_A+8
out 0x1b,R2
.dbline 60
xjmp L30
L49:
.dbline 61
; case 9:PORTA=A[9];break;
lds R2,_A+9
out 0x1b,R2
.dbline 61
xjmp L30
L51:
.dbline 62
; case 10:PORTA=A[10];break;
lds R2,_A+10
out 0x1b,R2
.dbline 62
xjmp L30
L53:
.dbline 63
; case 11:PORTA=A[11];break;
lds R2,_A+11
out 0x1b,R2
.dbline 63
xjmp L30
L55:
.dbline 64
; case 12:PORTA=A[12];break;
lds R2,_A+12
out 0x1b,R2
.dbline 64
xjmp L30
L57:
.dbline 65
; case 13:PORTA=A[13];break;
lds R2,_A+13
out 0x1b,R2
.dbline 65
xjmp L30
L59:
.dbline 66
; case 14:PORTA=A[14];break;
lds R2,_A+14
out 0x1b,R2
.dbline 66
xjmp L30
L61:
.dbline 67
; case 15:PORTA=A[15];break;
lds R2,_A+15
out 0x1b,R2
.dbline 67
L29:
L30:
.dbline 69
; }
; }
L27:
.dbline 46
xjmp L26
X10:
.dbline -2
L25:
.dbline 0 ; func end
ret
.dbsym r m 10 c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -