⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lesson5.lis

📁 用单片机对键盘按键进行扫描检测。可以扫描出具体按下的哪个键子
💻 LIS
字号:
                        .module lesson5.c
                        .area code(ram, con, rel)
                        .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 0000              .word 0
 0022                   .dbfile I:\AVR视频教程\视频教程\lesson5\chengxu\lesson5\lesson5.c
 0022                   .dbsym e table _table A[34:17]I
                        .area text(rom, con, rel)
 0000                   .dbfile I:\AVR视频教程\视频教程\lesson5\chengxu\lesson5\lesson5.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_gset2
 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,0};
 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 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                   .dbline 14
 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                   .dbline -2
 0024                   .dbline 15
 0024           ;          for(j=0;j<1141;j++);
 0024           ;        }
 0024           ; }
 0024           L1:
 0024 00D0              rcall pop_gset2
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbsym r i 20 i
 0028                   .dbsym r j 22 i
 0028                   .dbsym r ms 16 i
 0028                   .dbend
 0028                   .dbfunc e show _show fV
 0028           ;              k -> R20
 0028           ;              j -> R22
                        .even
 0028           _show::
 0028 00D0              rcall push_gset2
 002A 422F              mov R20,R18
 002C 602F              mov R22,R16
 002E                   .dbline -1
 002E                   .dbline 17
 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 062F              mov R16,R22
 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 lpm16
 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 142F              mov R17,R20
 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                   .dbline 27
 0064           ; }
 0064           L10:
 0064 00D0              rcall pop_gset2
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r k 20 c
 0068                   .dbsym r j 22 c
 0068                   .dbend
 0068                   .dbfunc e key_press _key_press fc
 0068           ;              j -> R16
                        .even
 0068           _key_press::
 0068                   .dbline -1
 0068                   .dbline 30
 0068           ; 
 0068           ; uchar key_press()
 0068           ; {
 0068                   .dbline 32
 0068           ;     uchar j;
 0068           ;     DDRD|=0X0F;
 0068 81B3              in R24,0x11
 006A 8F60              ori R24,15
 006C 81BB              out 0x11,R24
 006E                   .dbline 33
 006E           ;       PORTD|=0X0F;
 006E 82B3              in R24,0x12
 0070 8F60              ori R24,15
 0072 82BB              out 0x12,R24
 0074                   .dbline 35
 0074           ;       
 0074           ;       DDRD&=0XF0;
 0074 81B3              in R24,0x11
 0076 807F              andi R24,240
 0078 81BB              out 0x11,R24
 007A                   .dbline 37
 007A           ;       
 007A           ;       j=PIND;
 007A 00B3              in R16,0x10
 007C                   .dbline 38
 007C           ;       j=j&0X0F;//00001111
 007C 0F70              andi R16,15
 007E                   .dbline 39
 007E           ;       if(j==0X0F)
 007E 0F30              cpi R16,15
 0080 11F4              brne L12
 0082                   .dbline 40
 0082           ;       {
 0082                   .dbline 41
 0082           ;         return 0;
 0082 0027              clr R16
 0084 01C0              rjmp L11
 0086           L12:
 0086                   .dbline 44
 0086           ;       }
 0086           ;       else
 0086           ;       {
 0086                   .dbline 45
 0086           ;        return 1;
 0086 01E0              ldi R16,1
 0088                   .dbline -2
 0088           L11:
 0088                   .dbline 0 ; func end
 0088 0895              ret
 008A                   .dbsym r j 16 c
 008A                   .dbend
 008A                   .dbfunc e key_scan _key_scan fc
 008A           ;            key -> R20
                        .even
 008A           _key_scan::
 008A 00D0              rcall push_gset2
 008C                   .dbline -1
 008C                   .dbline 51
 008C           ;       }
 008C           ;       
 008C           ; }
 008C           ; 
 008C           ; uchar key_scan()
 008C           ; {
 008C                   .dbline 53
 008C           ;     uchar key;
 008C           ;     delay(10);
 008C 0AE0              ldi R16,10
 008E 10E0              ldi R17,0
 0090 B7DF              rcall _delay
 0092                   .dbline 54
 0092           ;       if(key_press())
 0092 EADF              rcall _key_press
 0094 0023              tst R16
 0096 11F1              breq L15
 0098                   .dbline 55
 0098           ;       {
 0098                   .dbline 56
 0098           ;       key=PIND;
 0098 40B3              in R20,0x10
 009A                   .dbline 57
 009A           ;       key&=0X0F;
 009A 4F70              andi R20,15
 009C                   .dbline 58
 009C           ;       switch(key)
 009C 642F              mov R22,R20
 009E 7727              clr R23
 00A0 6730              cpi R22,7
 00A2 E0E0              ldi R30,0
 00A4 7E07              cpc R23,R30
 00A6 99F0              breq L23
 00A8 6B30              cpi R22,11
 00AA E0E0              ldi R30,0
 00AC 7E07              cpc R23,R30
 00AE 69F0              breq L22
 00B0 6D30              cpi R22,13
 00B2 E0E0              ldi R30,0
 00B4 7E07              cpc R23,R30
 00B6 39F0              breq L21
 00B8 6E30              cpi R22,14
 00BA E0E0              ldi R30,0
 00BC 7E07              cpc R23,R30
 00BE 09F0              breq L20
 00C0 08C0              rjmp L17
 00C2           X0:
 00C2                   .dbline 59
 00C2           ;       {
 00C2           L20:
 00C2                   .dbline 61
 00C2           ;          case 0X0E: 
 00C2           ;              key=1;
 00C2 41E0              ldi R20,1
 00C4                   .dbline 62
 00C4           ;                  break;
 00C4 07C0              rjmp L25
 00C6           L21:
 00C6                   .dbline 64
 00C6           ;          case 0X0D:
 00C6           ;              key=2;
 00C6 42E0              ldi R20,2
 00C8                   .dbline 65
 00C8           ;                  break;
 00C8 05C0              rjmp L25
 00CA           L22:
 00CA                   .dbline 67
 00CA           ;                case 0X0B: 
 00CA           ;              key=3;
 00CA 43E0              ldi R20,3
 00CC                   .dbline 68
 00CC           ;                  break;
 00CC 03C0              rjmp L25
 00CE           L23:
 00CE                   .dbline 70
 00CE           ;          case 0X07:
 00CE           ;              key=4;
 00CE 44E0              ldi R20,4
 00D0                   .dbline 71
 00D0           ;                  break; 
 00D0 01C0              rjmp L25
 00D2           L17:
 00D2                   .dbline 73
 00D2           ;          default:     
 00D2           ;              key=16;             
 00D2 40E1              ldi R20,16
 00D4                   .dbline 74
 00D4           ;       }
 00D4           L24:
 00D4                   .dbline 75
 00D4           L25:
 00D4                   .dbline 75
 00D4           ;         while(key_press());
 00D4 C9DF              rcall _key_press
 00D6 0023              tst R16
 00D8 E9F7              brne L24
 00DA                   .dbline 76
 00DA           ;       }
 00DA 01C0              rjmp L16
 00DC           L15:
 00DC                   .dbline 78
 00DC           ;       else
 00DC           ;       {
 00DC                   .dbline 79
 00DC           ;         key=16;
 00DC 40E1              ldi R20,16
 00DE                   .dbline 80
 00DE           ;       }
 00DE           L16:
 00DE                   .dbline 81
 00DE           ;       return key;
 00DE 042F              mov R16,R20
 00E0                   .dbline -2
 00E0           L14:
 00E0 00D0              rcall pop_gset2
 00E2                   .dbline 0 ; func end
 00E2 0895              ret
 00E4                   .dbsym r key 20 c
 00E4                   .dbend
 00E4                   .dbfunc e main _main fV
 00E4           ;              l -> R20
 00E4           ;              i -> R22
                        .even
 00E4           _main::
 00E4                   .dbline -1
 00E4                   .dbline 84
 00E4           ; }
 00E4           ; void main()
 00E4           ; {
 00E4                   .dbline 86
 00E4           ;     uchar i,l;
 00E4           ;     DDRA|=0X18;//0001 1000
 00E4 8AB3              in R24,0x1a
 00E6 8861              ori R24,24
 00E8 8ABB              out 0x1a,R24
 00EA                   .dbline 87
 00EA           ;       DDRB=0XFF;
 00EA 8FEF              ldi R24,255
 00EC 87BB              out 0x17,R24
 00EE 08C0              rjmp L29
 00F0           L28:
 00F0                   .dbline 89
 00F0           ;       while(1)
 00F0           ;       {
 00F0                   .dbline 90
 00F0           ;         i=key_press();
 00F0 BBDF              rcall _key_press
 00F2 602F              mov R22,R16
 00F4                   .dbline 91
 00F4           ;         if(i)
 00F4 0023              tst R16
 00F6 21F0              breq L31
 00F8                   .dbline 92
 00F8           ;         {
 00F8                   .dbline 93
 00F8           ;            l=key_scan();
 00F8 C8DF              rcall _key_scan
 00FA 402F              mov R20,R16
 00FC                   .dbline 94
 00FC           ;                show(l,0);
 00FC 2227              clr R18
 00FE 94DF              rcall _show
 0100                   .dbline 95
 0100           ;         }
 0100           L31:
 0100                   .dbline 96
 0100           L29:
 0100                   .dbline 88
 0100 F7CF              rjmp L28
 0102           X1:
 0102                   .dbline -2
 0102                   .dbline 97
 0102           ;       }
 0102           ; }
 0102           L27:
 0102                   .dbline 0 ; func end
 0102 0895              ret
 0104                   .dbsym r l 20 c
 0104                   .dbsym r i 22 c
 0104                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -