📄 mkey.lis
字号:
.module mkey.c
.area text(rom, con, rel)
0000 .dbfile G:\学习\avr\天祥电子AVR视频教程\chengxu\mkey\mkey.c
.area code(ram, con, rel)
0000 .dbfile G:\学习\avr\天祥电子AVR视频教程\chengxu\mkey\mkey.c
.area lit(rom, con, rel)
0000 _table::
0000 3F00 .word 63
0002 0600 .word 6
0004 5B00 .word 91
0006 4F00 .word 79
0008 6600 .word 102
000A 6D00 .word 109
000C 7D00 .word 125
000E 0700 .word 7
0010 7F00 .word 127
0012 6F00 .word 111
0014 7700 .word 119
0016 7C00 .word 124
0018 3900 .word 57
001A 5E00 .word 94
001C 7900 .word 121
001E 7100 .word 113
0020 FF00 .word 255
0022 .dbsym e table _table A[34:17]kI
.area text(rom, con, rel)
0000 .dbfile G:\学习\avr\天祥电子AVR视频教程\chengxu\mkey\mkey.c
0000 .dbfunc e delay _delay fV
0000 ; i -> R20,R21
0000 ; j -> R22,R23
0000 ; ms -> R16,R17
.even
0000 _delay::
0000 00D0 rcall push_xgsetF000
0002 .dbline -1
0002 .dbline 9
0002 ; #include <iom16v.h>
0002 ; #include <macros.h>
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ; #pragma data:code
0002 ; const table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0002 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
0002 ; void delay(uint ms)
0002 ; {
0002 .dbline 11
0002 ; uint i,j;
0002 ; for(i=0;i<ms;i++)
0002 4427 clr R20
0004 5527 clr R21
0006 0BC0 rjmp L5
0008 L2:
0008 .dbline 12
0008 ; {
0008 .dbline 13
0008 ; for(j=0;j<1141;j++);
0008 6627 clr R22
000A 7727 clr R23
000C 02C0 rjmp L9
000E L6:
000E .dbline 13
000E L7:
000E .dbline 13
000E 6F5F subi R22,255 ; offset = 1
0010 7F4F sbci R23,255
0012 L9:
0012 .dbline 13
0012 6537 cpi R22,117
0014 E4E0 ldi R30,4
0016 7E07 cpc R23,R30
0018 D0F3 brlo L6
001A X0:
001A .dbline 14
001A ; }
001A L3:
001A .dbline 11
001A 4F5F subi R20,255 ; offset = 1
001C 5F4F sbci R21,255
001E L5:
001E .dbline 11
001E 4017 cp R20,R16
0020 5107 cpc R21,R17
0022 90F3 brlo L2
0024 X1:
0024 .dbline -2
0024 L1:
0024 .dbline 0 ; func end
0024 00C0 rjmp pop_xgsetF000
0026 .dbsym r i 20 i
0026 .dbsym r j 22 i
0026 .dbsym r ms 16 i
0026 .dbend
0026 .dbfunc e show _show fV
0026 ; k -> R10
0026 ; j -> R12
.even
0026 _show::
0026 AA92 st -y,R10
0028 CA92 st -y,R12
002A A22E mov R10,R18
002C C02E mov R12,R16
002E .dbline -1
002E .dbline 17
002E ; }
002E ; void show(uchar j,uchar k)
002E ; {
002E .dbline 18
002E ; PORTA|=BIT(3);
002E DB9A sbi 0x1b,3
0030 .dbline 19
0030 ; PORTB=table[j];
0030 80E0 ldi R24,<_table
0032 90E0 ldi R25,>_table
0034 0C2D mov R16,R12
0036 1127 clr R17
0038 000F lsl R16
003A 111F rol R17
003C 080F add R16,R24
003E 191F adc R17,R25
0040 00D0 rcall elpm16
0042 08BB out 0x18,R16
0044 .dbline 20
0044 ; PORTA&=~BIT(3);
0044 DB98 cbi 0x1b,3
0046 .dbline 22
0046 ;
0046 ; PORTB=0XFF;
0046 8FEF ldi R24,255
0048 88BB out 0x18,R24
004A .dbline 23
004A ; PORTB&=~BIT(k);
004A 01E0 ldi R16,1
004C 1A2D mov R17,R10
004E 00D0 rcall lsl8
0050 202E mov R2,R16
0052 2094 com R2
0054 38B2 in R3,0x18
0056 3220 and R3,R2
0058 38BA out 0x18,R3
005A .dbline 24
005A ; PORTA|=BIT(4);
005A DC9A sbi 0x1b,4
005C .dbline 25
005C ; PORTA&=~BIT(4);
005C DC98 cbi 0x1b,4
005E .dbline 26
005E ; delay(1);
005E 01E0 ldi R16,1
0060 10E0 ldi R17,0
0062 CEDF rcall _delay
0064 .dbline -2
0064 L10:
0064 .dbline 0 ; func end
0064 C990 ld R12,y+
0066 A990 ld R10,y+
0068 0895 ret
006A .dbsym r k 10 c
006A .dbsym r j 12 c
006A .dbend
006A .dbfunc e key_press _key_press fc
006A ; i -> R16
.even
006A _key_press::
006A .dbline -1
006A .dbline 29
006A ; }
006A ; uchar key_press()
006A ; {
006A .dbline 31
006A ; uchar i;
006A ; DDRD=0XFF;
006A 8FEF ldi R24,255
006C 81BB out 0x11,R24
006E .dbline 32
006E ; PORTD=0XF0;
006E 80EF ldi R24,240
0070 82BB out 0x12,R24
0072 .dbline 34
0072 ;
0072 ; DDRD=0X0F;
0072 8FE0 ldi R24,15
0074 81BB out 0x11,R24
0076 .dbline 36
0076 ;
0076 ; i=PIND;
0076 00B3 in R16,0x10
0078 .dbline 37
0078 ; if(i==0XF0)
0078 003F cpi R16,240
007A 21F4 brne L12
007C X2:
007C .dbline 38
007C ; {
007C .dbline 39
007C ; DDRD=0XFF;
007C 8FEF ldi R24,255
007E 81BB out 0x11,R24
0080 .dbline 40
0080 ; return 0;
0080 0027 clr R16
0082 03C0 rjmp L11
0084 L12:
0084 .dbline 43
0084 ; }
0084 ; else
0084 ; {
0084 .dbline 44
0084 ; DDRD=0XFF;
0084 8FEF ldi R24,255
0086 81BB out 0x11,R24
0088 .dbline 45
0088 ; return 1;
0088 01E0 ldi R16,1
008A .dbline -2
008A L11:
008A .dbline 0 ; func end
008A 0895 ret
008C .dbsym r i 16 c
008C .dbend
008C .dbfunc e key_scan _key_scan fc
008C ; j -> R10
008C ; key -> R20
008C ; i -> R22
.even
008C _key_scan::
008C 00D0 rcall push_xgsetF00C
008E .dbline -1
008E .dbline 50
008E ; }
008E ; }
008E ;
008E ; uchar key_scan()
008E ; {
008E .dbline 51
008E ; uchar key,i=0X7F,j;
008E 6FE7 ldi R22,127
0090 .dbline 52
0090 ; delay(10);
0090 0AE0 ldi R16,10
0092 10E0 ldi R17,0
0094 B5DF rcall _delay
0096 .dbline 53
0096 ; if(key_press())
0096 E9DF rcall _key_press
0098 0023 tst R16
009A 09F4 brne X24
009C 91C0 rjmp L15
009E X24:
009E X3:
009E .dbline 54
009E ; {
009E L17:
009E .dbline 56
009E ; do
009E ; {
009E .dbline 57
009E ; i=(i<<1|i>>7);
009E 262E mov R2,R22
00A0 2694 lsr R2
00A2 2694 lsr R2
00A4 2694 lsr R2
00A6 2694 lsr R2
00A8 2694 lsr R2
00AA 2694 lsr R2
00AC 2694 lsr R2
00AE 362E mov R3,R22
00B0 330C lsl R3
00B2 3228 or R3,R2
00B4 632D mov R22,R3
00B6 .dbline 58
00B6 ; PORTD=i;
00B6 32BA out 0x12,R3
00B8 .dbline 59
00B8 ; DDRD=0X0F;
00B8 8FE0 ldi R24,15
00BA 81BB out 0x11,R24
00BC .dbline 61
00BC ;
00BC ; key=PIND;
00BC 40B3 in R20,0x10
00BE .dbline 62
00BE ; j=key&0XF0;
00BE 842F mov R24,R20
00C0 807F andi R24,240
00C2 A82E mov R10,R24
00C4 .dbline 64
00C4 ;
00C4 ; }while(j==0XF0);
00C4 L18:
00C4 .dbline 64
00C4 8A2D mov R24,R10
00C6 803F cpi R24,240
00C8 51F3 breq L17
00CA X4:
00CA L20:
00CA .dbline 66
00CA ;
00CA ; while(key_press());
00CA L21:
00CA .dbline 66
00CA CFDF rcall _key_press
00CC 0023 tst R16
00CE E9F7 brne L20
00D0 X5:
00D0 .dbline 67
00D0 ; switch(key)
00D0 642F mov R22,R20
00D2 7727 clr R23
00D4 673B cpi R22,183
00D6 E0E0 ldi R30,0
00D8 7E07 cpc R23,R30
00DA 09F4 brne X25
00DC 6BC0 rjmp L40
00DE X25:
00DE X6:
00DE 6B3B cpi R22,187
00E0 E0E0 ldi R30,0
00E2 7E07 cpc R23,R30
00E4 09F4 brne X26
00E6 5EC0 rjmp L36
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -