?? lesson5.s
字號:
.module lesson5.c
.area code(ram, con, rel)
.area lit(rom, con, rel)
_table::
.word 63
.word 6
.word 91
.word 79
.word 102
.word 109
.word 125
.word 7
.word 127
.word 111
.word 119
.word 124
.word 57
.word 94
.word 121
.word 113
.word 0
.dbfile I:\AVR視頻教程\視頻教程\lesson5\chengxu\lesson5\lesson5.c
.dbsym e table _table A[34:17]I
.area text(rom, con, rel)
.dbfile I:\AVR視頻教程\視頻教程\lesson5\chengxu\lesson5\lesson5.c
.dbfunc e delay _delay fV
; i -> R20,R21
; j -> R22,R23
; ms -> R16,R17
.even
_delay::
rcall push_gset2
.dbline -1
.dbline 9
; #include <iom16v.h>
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; #pragma data:code
; const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0};
; void delay(uint ms)
; {
.dbline 11
; uint i,j;
; for(i=0;i<ms;i++)
clr R20
clr R21
rjmp L5
L2:
.dbline 12
; {
.dbline 13
clr R22
clr R23
rjmp L9
L6:
.dbline 13
L7:
.dbline 13
subi R22,255 ; offset = 1
sbci R23,255
L9:
.dbline 13
cpi R22,117
ldi R30,4
cpc R23,R30
brlo L6
.dbline 14
L3:
.dbline 11
subi R20,255 ; offset = 1
sbci R21,255
L5:
.dbline 11
cp R20,R16
cpc R21,R17
brlo L2
.dbline -2
.dbline 15
; for(j=0;j<1141;j++);
; }
; }
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 show _show fV
; k -> R20
; j -> R22
.even
_show::
rcall push_gset2
mov R20,R18
mov R22,R16
.dbline -1
.dbline 17
; void show(uchar j,uchar k)
; {
.dbline 18
; PORTA|=BIT(3);
sbi 0x1b,3
.dbline 19
; PORTB=table[j];
ldi R24,<_table
ldi R25,>_table
mov R16,R22
clr R17
lsl R16
rol R17
add R16,R24
adc R17,R25
rcall lpm16
out 0x18,R16
.dbline 20
; PORTA&=~BIT(3);
cbi 0x1b,3
.dbline 22
;
; PORTB=0XFF;
ldi R24,255
out 0x18,R24
.dbline 23
; PORTB&=~BIT(k);
ldi R16,1
mov R17,R20
rcall lsl8
mov R2,R16
com R2
in R3,0x18
and R3,R2
out 0x18,R3
.dbline 24
; PORTA|=BIT(4);
sbi 0x1b,4
.dbline 25
; PORTA&=~BIT(4);
cbi 0x1b,4
.dbline 26
; delay(1);
ldi R16,1
ldi R17,0
rcall _delay
.dbline -2
.dbline 27
; }
L10:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r k 20 c
.dbsym r j 22 c
.dbend
.dbfunc e key_press _key_press fc
; j -> R16
.even
_key_press::
.dbline -1
.dbline 30
;
; uchar key_press()
; {
.dbline 32
; uchar j;
; DDRD|=0X0F;
in R24,0x11
ori R24,15
out 0x11,R24
.dbline 33
; PORTD|=0X0F;
in R24,0x12
ori R24,15
out 0x12,R24
.dbline 35
;
; DDRD&=0XF0;
in R24,0x11
andi R24,240
out 0x11,R24
.dbline 37
;
; j=PIND;
in R16,0x10
.dbline 38
; j=j&0X0F;//00001111
andi R16,15
.dbline 39
; if(j==0X0F)
cpi R16,15
brne L12
.dbline 40
; {
.dbline 41
; return 0;
clr R16
rjmp L11
L12:
.dbline 44
; }
; else
; {
.dbline 45
; return 1;
ldi R16,1
.dbline -2
L11:
.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 51
; }
;
; }
;
; uchar key_scan()
; {
.dbline 53
; uchar key;
; delay(10);
ldi R16,10
ldi R17,0
rcall _delay
.dbline 54
; if(key_press())
rcall _key_press
tst R16
breq L15
.dbline 55
; {
.dbline 56
; key=PIND;
in R20,0x10
.dbline 57
; key&=0X0F;
andi R20,15
.dbline 58
; switch(key)
mov R22,R20
clr R23
cpi R22,7
ldi R30,0
cpc R23,R30
breq L23
cpi R22,11
ldi R30,0
cpc R23,R30
breq L22
cpi R22,13
ldi R30,0
cpc R23,R30
breq L21
cpi R22,14
ldi R30,0
cpc R23,R30
breq L20
rjmp L17
X0:
.dbline 59
; {
L20:
.dbline 61
; case 0X0E:
; key=1;
ldi R20,1
.dbline 62
; break;
rjmp L25
L21:
.dbline 64
; case 0X0D:
; key=2;
ldi R20,2
.dbline 65
; break;
rjmp L25
L22:
.dbline 67
; case 0X0B:
; key=3;
ldi R20,3
.dbline 68
; break;
rjmp L25
L23:
.dbline 70
; case 0X07:
; key=4;
ldi R20,4
.dbline 71
; break;
rjmp L25
L17:
.dbline 73
; default:
; key=16;
ldi R20,16
.dbline 74
; }
L24:
.dbline 75
L25:
.dbline 75
; while(key_press());
rcall _key_press
tst R16
brne L24
.dbline 76
; }
rjmp L16
L15:
.dbline 78
; else
; {
.dbline 79
; key=16;
ldi R20,16
.dbline 80
; }
L16:
.dbline 81
; return key;
mov R16,R20
.dbline -2
L14:
rcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r key 20 c
.dbend
.dbfunc e main _main fV
; l -> R20
; i -> R22
.even
_main::
.dbline -1
.dbline 84
; }
; void main()
; {
.dbline 86
; uchar i,l;
; DDRA|=0X18;//0001 1000
in R24,0x1a
ori R24,24
out 0x1a,R24
.dbline 87
; DDRB=0XFF;
ldi R24,255
out 0x17,R24
rjmp L29
L28:
.dbline 89
; while(1)
; {
.dbline 90
; i=key_press();
rcall _key_press
mov R22,R16
.dbline 91
; if(i)
tst R16
breq L31
.dbline 92
; {
.dbline 93
; l=key_scan();
rcall _key_scan
mov R20,R16
.dbline 94
; show(l,0);
clr R18
rcall _show
.dbline 95
; }
L31:
.dbline 96
L29:
.dbline 88
rjmp L28
X1:
.dbline -2
.dbline 97
; }
; }
L27:
.dbline 0 ; func end
ret
.dbsym r l 20 c
.dbsym r i 22 c
.dbend
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -