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

📄 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 0E940000          xcall push_xgsetF000
 0004                   .dbline -1
 0004                   .dbline 9
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #define  uchar unsigned char
 0004           ; #define  uint  unsigned int
 0004           ; #pragma data:code 
 0004           ; const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
 0004           ;                          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
 0004           ; void delay(uint ms)
 0004           ; {
 0004                   .dbline 11
 0004           ;         uint i,j;
 0004           ;       for(i=0;i<ms;i++)
 0004 4427              clr R20
 0006 5527              clr R21
 0008 0BC0              xjmp L5
 000A           L2:
 000A                   .dbline 12
 000A           ;          {
 000A                   .dbline 13
 000A           ;          for(j=0;j<1141;j++);
 000A 6627              clr R22
 000C 7727              clr R23
 000E 02C0              xjmp L9
 0010           L6:
 0010                   .dbline 13
 0010           L7:
 0010                   .dbline 13
 0010 6F5F              subi R22,255  ; offset = 1
 0012 7F4F              sbci R23,255
 0014           L9:
 0014                   .dbline 13
 0014 6537              cpi R22,117
 0016 E4E0              ldi R30,4
 0018 7E07              cpc R23,R30
 001A D0F3              brlo L6
 001C           X0:
 001C                   .dbline 14
 001C           ;        }
 001C           L3:
 001C                   .dbline 11
 001C 4F5F              subi R20,255  ; offset = 1
 001E 5F4F              sbci R21,255
 0020           L5:
 0020                   .dbline 11
 0020 4017              cp R20,R16
 0022 5107              cpc R21,R17
 0024 90F3              brlo L2
 0026           X1:
 0026                   .dbline -2
 0026           L1:
 0026                   .dbline 0 ; func end
 0026 0C940000          xjmp pop_xgsetF000
 002A                   .dbsym r i 20 i
 002A                   .dbsym r j 22 i
 002A                   .dbsym r ms 16 i
 002A                   .dbend
 002A                   .dbfunc e show _show fV
 002A           ;              k -> R10
 002A           ;              j -> R12
                        .even
 002A           _show::
 002A AA92              st -y,R10
 002C CA92              st -y,R12
 002E A22E              mov R10,R18
 0030 C02E              mov R12,R16
 0032                   .dbline -1
 0032                   .dbline 17
 0032           ; }
 0032           ; void show(uchar j,uchar k)
 0032           ; {
 0032                   .dbline 18
 0032           ;         PORTA|=BIT(3);
 0032 DB9A              sbi 0x1b,3
 0034                   .dbline 19
 0034           ;       PORTB=table[j];
 0034 80E0              ldi R24,<_table
 0036 90E0              ldi R25,>_table
 0038 EC2D              mov R30,R12
 003A FF27              clr R31
 003C EE0F              lsl R30
 003E FF1F              rol R31
 0040 E80F              add R30,R24
 0042 F91F              adc R31,R25
 0044 2590              lpm R2,Z+
 0046 3490              lpm R3,Z
 0048 28BA              out 0x18,R2
 004A                   .dbline 20
 004A           ;       PORTA&=~BIT(3);
 004A DB98              cbi 0x1b,3
 004C                   .dbline 22
 004C           ;       
 004C           ;       PORTB=0XFF;
 004C 8FEF              ldi R24,255
 004E 88BB              out 0x18,R24
 0050                   .dbline 23
 0050           ;       PORTB&=~BIT(k);
 0050 01E0              ldi R16,1
 0052 1A2D              mov R17,R10
 0054 0E940000          xcall lsl8
 0058 202E              mov R2,R16
 005A 2094              com R2
 005C 38B2              in R3,0x18
 005E 3220              and R3,R2
 0060 38BA              out 0x18,R3
 0062                   .dbline 24
 0062           ;       PORTA|=BIT(4);
 0062 DC9A              sbi 0x1b,4
 0064                   .dbline 25
 0064           ;       PORTA&=~BIT(4);
 0064 DC98              cbi 0x1b,4
 0066                   .dbline 26
 0066           ;       delay(1);
 0066 01E0              ldi R16,1
 0068 10E0              ldi R17,0
 006A CADF              xcall _delay
 006C                   .dbline -2
 006C           L10:
 006C                   .dbline 0 ; func end
 006C C990              ld R12,y+
 006E A990              ld R10,y+
 0070 0895              ret
 0072                   .dbsym r k 10 c
 0072                   .dbsym r j 12 c
 0072                   .dbend
 0072                   .dbfunc e key_press _key_press fc
 0072           ;              i -> R16
                        .even
 0072           _key_press::
 0072                   .dbline -1
 0072                   .dbline 29
 0072           ; }
 0072           ; uchar key_press()
 0072           ; {
 0072                   .dbline 31
 0072           ;      uchar i;
 0072           ;      DDRD=0XFF;
 0072 8FEF              ldi R24,255
 0074 81BB              out 0x11,R24
 0076                   .dbline 32
 0076           ;        PORTD=0XF0;
 0076 80EF              ldi R24,240
 0078 82BB              out 0x12,R24
 007A                   .dbline 34
 007A           ;        
 007A           ;        DDRD=0X0F;
 007A 8FE0              ldi R24,15
 007C 81BB              out 0x11,R24
 007E                   .dbline 36
 007E           ;        
 007E           ;        i=PIND;
 007E 00B3              in R16,0x10
 0080                   .dbline 37
 0080           ;        if(i==0XF0)
 0080 003F              cpi R16,240
 0082 21F4              brne L12
 0084           X2:
 0084                   .dbline 38
 0084           ;        {
 0084                   .dbline 39
 0084           ;          DDRD=0XFF;
 0084 8FEF              ldi R24,255
 0086 81BB              out 0x11,R24
 0088                   .dbline 40
 0088           ;          return 0;
 0088 0027              clr R16
 008A 03C0              xjmp L11
 008C           L12:
 008C                   .dbline 43
 008C           ;        }
 008C           ;        else
 008C           ;        {
 008C                   .dbline 44
 008C           ;          DDRD=0XFF;
 008C 8FEF              ldi R24,255
 008E 81BB              out 0x11,R24
 0090                   .dbline 45
 0090           ;          return 1;
 0090 01E0              ldi R16,1
 0092                   .dbline -2
 0092           L11:
 0092                   .dbline 0 ; func end
 0092 0895              ret
 0094                   .dbsym r i 16 c
 0094                   .dbend
 0094                   .dbfunc e key_scan _key_scan fc
 0094           ;              j -> R10
 0094           ;            key -> R20
 0094           ;              i -> R22
                        .even
 0094           _key_scan::
 0094 0E940000          xcall push_xgsetF00C
 0098                   .dbline -1
 0098                   .dbline 50
 0098           ;        }
 0098           ; }
 0098           ; 
 0098           ; uchar key_scan()
 0098           ; {
 0098                   .dbline 51
 0098           ;      uchar key,i=0X7F,j;
 0098 6FE7              ldi R22,127
 009A                   .dbline 52
 009A           ;      delay(10);
 009A 0AE0              ldi R16,10
 009C 10E0              ldi R17,0
 009E B0DF              xcall _delay
 00A0                   .dbline 53
 00A0           ;        if(key_press())
 00A0 E8DF              xcall _key_press
 00A2 0023              tst R16
 00A4 09F4              brne X24
 00A6 91C0              xjmp L15
 00A8           X24:
 00A8           X3:
 00A8                   .dbline 54
 00A8           ;        {
 00A8           L17:
 00A8                   .dbline 56
 00A8           ;           do
 00A8           ;               {
 00A8                   .dbline 57
 00A8           ;                i=(i<<1|i>>7);
 00A8 262E              mov R2,R22
 00AA 2694              lsr R2
 00AC 2694              lsr R2
 00AE 2694              lsr R2
 00B0 2694              lsr R2
 00B2 2694              lsr R2
 00B4 2694              lsr R2
 00B6 2694              lsr R2
 00B8 362E              mov R3,R22
 00BA 330C              lsl R3
 00BC 3228              or R3,R2
 00BE 632D              mov R22,R3
 00C0                   .dbline 58
 00C0           ;                PORTD=i;
 00C0 32BA              out 0x12,R3
 00C2                   .dbline 59
 00C2           ;                DDRD=0X0F;
 00C2 8FE0              ldi R24,15
 00C4 81BB              out 0x11,R24
 00C6                   .dbline 61
 00C6           ;                
 00C6           ;                key=PIND;
 00C6 40B3              in R20,0x10
 00C8                   .dbline 62
 00C8           ;                j=key&0XF0;
 00C8 842F              mov R24,R20
 00CA 807F              andi R24,240
 00CC A82E              mov R10,R24
 00CE                   .dbline 64
 00CE           ;                
 00CE           ;           }while(j==0XF0);
 00CE           L18:
 00CE                   .dbline 64
 00CE 8A2D              mov R24,R10
 00D0 803F              cpi R24,240
 00D2 51F3              breq L17
 00D4           X4:
 00D4           L20:
 00D4                   .dbline 66
 00D4           ;               
 00D4           ;               while(key_press());
 00D4           L21:
 00D4                   .dbline 66
 00D4 CEDF              xcall _key_press
 00D6 0023              tst R16
 00D8 E9F7              brne L20
 00DA           X5:
 00DA                   .dbline 67
 00DA           ;               switch(key)
 00DA 642F              mov R22,R20
 00DC 7727              clr R23
 00DE 673B              cpi R22,183
 00E0 E0E0              ldi R30,0
 00E2 7E07              cpc R23,R30
 00E4 09F4              brne X25
 00E6 6BC0              xjmp L40
 00E8           X25:
 00E8           X6:
 00E8 6B3B              cpi R22,187
 00EA E0E0              ldi R30,0
 00EC 7E07              cpc R23,R30
 00EE 09F4              brne X26
 00F0 5EC0              xjmp L36

⌨️ 快捷键说明

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