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

📄 矩阵键盘.lis

📁 avr基础程序大全
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _矩阵键盘.c
                        .area text(rom, con, rel)
 0000                   .dbfile 矩阵键盘.c
                        .area data(ram, con, rel)
 0000                   .dbfile 矩阵键盘.c
 0000           _table::
 0000                   .blkb 2
                        .area idata
 0000 3F06              .byte 63,6
                        .area data(ram, con, rel)
 0002                   .dbfile 矩阵键盘.c
 0002                   .blkb 2
                        .area idata
 0002 5B4F              .byte 91,'O
                        .area data(ram, con, rel)
 0004                   .dbfile 矩阵键盘.c
 0004                   .blkb 2
                        .area idata
 0004 666D              .byte 'f,'m
                        .area data(ram, con, rel)
 0006                   .dbfile 矩阵键盘.c
 0006                   .blkb 2
                        .area idata
 0006 7D07              .byte 125,7
                        .area data(ram, con, rel)
 0008                   .dbfile 矩阵键盘.c
 0008                   .blkb 2
                        .area idata
 0008 7F6F              .byte 127,'o
                        .area data(ram, con, rel)
 000A                   .dbfile 矩阵键盘.c
 000A                   .blkb 2
                        .area idata
 000A 777C              .byte 'w,124
                        .area data(ram, con, rel)
 000C                   .dbfile 矩阵键盘.c
 000C                   .blkb 2
                        .area idata
 000C 395E              .byte 57,94
                        .area data(ram, con, rel)
 000E                   .dbfile 矩阵键盘.c
 000E                   .blkb 2
                        .area idata
 000E 7971              .byte 'y,'q
                        .area data(ram, con, rel)
 0010                   .dbfile 矩阵键盘.c
 0010                   .blkb 1
                        .area idata
 0010 FF                .byte 255
                        .area data(ram, con, rel)
 0011                   .dbfile 矩阵键盘.c
 0011                   .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
 0011                   .dbsym e table _table A[17:17]c
 0011           _LED_W::
 0011                   .blkb 2
                        .area idata
 0011 0001              .byte 0,1
                        .area data(ram, con, rel)
 0013                   .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
 0013                   .blkb 2
                        .area idata
 0013 0203              .byte 2,3
                        .area data(ram, con, rel)
 0015                   .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
 0015                   .blkb 2
                        .area idata
 0015 0405              .byte 4,5
                        .area data(ram, con, rel)
 0017                   .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
 0017                   .blkb 2
                        .area idata
 0017 0607              .byte 6,7
                        .area data(ram, con, rel)
 0019                   .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.c
 0019                   .dbsym e LED_W _LED_W A[8:8]c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVR自编程序\11实验板\10矩阵键盘\矩阵键盘.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 10
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #define  uchar unsigned char
 0004           ; #define  uint  unsigned int
 0004           ; 
 0004           ; uchar const  table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
 0004           ;                          0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0XFF};
 0004           ; uchar const LED_W[8] = {0,1,2,3,4,5,6,7};                                        
 0004           ; void delay(uint ms)
 0004           ; {
 0004                   .dbline 12
 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 13
 000A           ;          {
 000A                   .dbline 14
 000A           ;          for(j=0;j<1141;j++);
 000A 6627              clr R22
 000C 7727              clr R23
 000E 02C0              xjmp L9
 0010           L6:
 0010                   .dbline 14
 0010           L7:
 0010                   .dbline 14
 0010 6F5F              subi R22,255  ; offset = 1
 0012 7F4F              sbci R23,255
 0014           L9:
 0014                   .dbline 14
 0014 6537              cpi R22,117
 0016 E4E0              ldi R30,4
 0018 7E07              cpc R23,R30
 001A D0F3              brlo L6
 001C           X0:
 001C                   .dbline 15
 001C           ;        }
 001C           L3:
 001C                   .dbline 12
 001C 4F5F              subi R20,255  ; offset = 1
 001E 5F4F              sbci R21,255
 0020           L5:
 0020                   .dbline 12
 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 18
 0032           ; }
 0032           ; void show(uchar j,uchar k)
 0032           ; {
 0032                   .dbline 19
 0032           ;       PORTA = table[j];                // i 值的 个位数
 0032 80E0              ldi R24,<_table
 0034 90E0              ldi R25,>_table
 0036 EC2D              mov R30,R12
 0038 FF27              clr R31
 003A E80F              add R30,R24
 003C F91F              adc R31,R25
 003E 2080              ldd R2,z+0
 0040 2BBA              out 0x1b,R2
 0042                   .dbline 20
 0042           ;               PORTC = LED_W[k];                //点亮第一位数码管
 0042 80E0              ldi R24,<_LED_W
 0044 90E0              ldi R25,>_LED_W
 0046 EA2D              mov R30,R10
 0048 FF27              clr R31
 004A E80F              add R30,R24
 004C F91F              adc R31,R25
 004E 2080              ldd R2,z+0
 0050 25BA              out 0x15,R2
 0052                   .dbline 22
 0052           ;               
 0052           ;               delay(2);
 0052 02E0              ldi R16,2
 0054 10E0              ldi R17,0
 0056 D4DF              xcall _delay
 0058                   .dbline -2
 0058           L10:
 0058                   .dbline 0 ; func end
 0058 C990              ld R12,y+
 005A A990              ld R10,y+
 005C 0895              ret
 005E                   .dbsym r k 10 c
 005E                   .dbsym r j 12 c
 005E                   .dbend
 005E                   .dbfunc e key_press _key_press fc
 005E           ;              i -> R16
                        .even
 005E           _key_press::
 005E                   .dbline -1
 005E                   .dbline 25
 005E           ; }
 005E           ; uchar key_press()
 005E           ; { 
 005E                   .dbline 27
 005E           ;      uchar i;
 005E           ;      DDRB=0XFF;
 005E 8FEF              ldi R24,255
 0060 87BB              out 0x17,R24
 0062                   .dbline 28
 0062           ;        PORTB=0XF0;
 0062 80EF              ldi R24,240
 0064 88BB              out 0x18,R24
 0066                   .dbline 30
 0066           ;        
 0066           ;        DDRB=0X0F;
 0066 8FE0              ldi R24,15
 0068 87BB              out 0x17,R24
 006A                   .dbline 32
 006A           ;        
 006A           ;        i=PINB;
 006A 06B3              in R16,0x16
 006C                   .dbline 33
 006C           ;        if(i==0XF0)
 006C 003F              cpi R16,240
 006E 21F4              brne L12
 0070           X2:
 0070                   .dbline 34
 0070           ;        {
 0070                   .dbline 35
 0070           ;          DDRB=0XFF;
 0070 8FEF              ldi R24,255
 0072 87BB              out 0x17,R24
 0074                   .dbline 36
 0074           ;          return 0;
 0074 0027              clr R16
 0076 03C0              xjmp L11
 0078           L12:
 0078                   .dbline 39
 0078           ;        }
 0078           ;        else
 0078           ;        {
 0078                   .dbline 40
 0078           ;          DDRB=0XFF;
 0078 8FEF              ldi R24,255
 007A 87BB              out 0x17,R24
 007C                   .dbline 41
 007C           ;          return 1;
 007C 01E0              ldi R16,1
 007E                   .dbline -2
 007E           L11:
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbsym r i 16 c
 0080                   .dbend
 0080                   .dbfunc e key_scan _key_scan fc
 0080           ;              j -> R10
 0080           ;            key -> R20
 0080           ;              i -> R22
                        .even
 0080           _key_scan::
 0080 0E940000          xcall push_xgsetF00C
 0084                   .dbline -1
 0084                   .dbline 46
 0084           ;        }
 0084           ; }
 0084           ; 
 0084           ; uchar key_scan()
 0084           ; {
 0084                   .dbline 47
 0084           ;      uchar key,i=0X7F,j;
 0084 6FE7              ldi R22,127
 0086                   .dbline 48
 0086           ;      delay(10);
 0086 0AE0              ldi R16,10
 0088 10E0              ldi R17,0
 008A BADF              xcall _delay
 008C                   .dbline 49
 008C           ;        if(key_press())
 008C E8DF              xcall _key_press
 008E 0023              tst R16
 0090 09F4              brne X24
 0092 91C0              xjmp L15
 0094           X24:
 0094           X3:
 0094                   .dbline 50
 0094           ;        {
 0094           L17:
 0094                   .dbline 52
 0094           ;           do
 0094           ;               {
 0094                   .dbline 53
 0094           ;                i=(i<<1|i>>7);
 0094 262E              mov R2,R22
 0096 2694              lsr R2
 0098 2694              lsr R2
 009A 2694              lsr R2
 009C 2694              lsr R2
 009E 2694              lsr R2
 00A0 2694              lsr R2
 00A2 2694              lsr R2
 00A4 362E              mov R3,R22
 00A6 330C              lsl R3
 00A8 3228              or R3,R2
 00AA 632D              mov R22,R3
 00AC                   .dbline 54
 00AC           ;                PORTB=i;
 00AC 38BA              out 0x18,R3
 00AE                   .dbline 55
 00AE           ;                DDRB=0X0F;
 00AE 8FE0              ldi R24,15
 00B0 87BB              out 0x17,R24
 00B2                   .dbline 57
 00B2           ;                
 00B2           ;                key=PINB;
 00B2 46B3              in R20,0x16
 00B4                   .dbline 58
 00B4           ;                j=key&0XF0;
 00B4 842F              mov R24,R20
 00B6 807F              andi R24,240
 00B8 A82E              mov R10,R24
 00BA                   .dbline 60
 00BA           ;                
 00BA           ;           }while(j==0XF0);
 00BA           L18:
 00BA                   .dbline 60
 00BA 8A2D              mov R24,R10
 00BC 803F              cpi R24,240
 00BE 51F3              breq L17
 00C0           X4:
 00C0           L20:
 00C0                   .dbline 62
 00C0           ;               
 00C0           ;               while(key_press());
 00C0           L21:
 00C0                   .dbline 62
 00C0 CEDF              xcall _key_press
 00C2 0023              tst R16
 00C4 E9F7              brne L20

⌨️ 快捷键说明

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