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

📄 mkey.lis

📁 AVR单片机C语言编程及应用实例 适合初学者的学习研究 其中包含Atmega16中文资料及Protel部分电路图
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .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 + -