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

📄 keyboard_int.lis

📁 在这个实例中
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module keyboard_int.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\实例8_中断唤醒的键盘扫描_加入抗抖动/delay.h
 0000                   .dbfunc e Delay_ms _Delay_ms fV
 0000           ;              n -> R20
 0000           ;           Time -> R16,R17
                        .even
 0000           _Delay_ms::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 14
 0002           ; #include "iom48v.h"
 0002           ; #include "macros.h"
 0002           ; #include "delay.h"
 0002           ; #include "led_dis.h"
 0002           ; 
 0002           ; #define Key_X_1 PORTC = 0b11011111          //扫描第1行键
 0002           ; #define Key_X_2 PORTC = 0b11101111          //扫描第2行键
 0002           ; 
 0002           ; #define Key_Scan_Port PINC                  //定义用于扫描键盘的端口
 0002           ; #define Key_Y_1 0b11110111                  //第1列上有键按下
 0002           ; #define Key_Y_2 0b11111011                  //第2列上有键按下
 0002           ; #define Key_Y_3 0b11111101                  //第3列上有键按下
 0002           ; 
 0002           ; #define Key_A 0x0A
 0002                   .dbline 15
 0002           ; #define Key_B 0x0B
 0002 4427              clr R20
 0004 08C0              rjmp L3
 0006           L2:
 0006                   .dbline 17
 0006           ; #define Key_C 0x0C
 0006           ; #define Key_D 0x0D
 0006                   .dbline 18
 0006           ; #define Key_E 0x0E
 0006 41E0              ldi R20,1
 0008 02C0              rjmp L8
 000A           L5:
 000A                   .dbline 19
 000A                   .dbline 20
 000A 0000              nop
 000C                   .dbline 21
 000C           L6:
 000C                   .dbline 18
 000C 4395              inc R20
 000E           L8:
 000E                   .dbline 18
 000E 4B3B              cpi R20,187
 0010 E0F3              brlo L5
 0012                   .dbline 22
 0012 0150              subi R16,1
 0014 1040              sbci R17,0
 0016                   .dbline 23
 0016           L3:
 0016                   .dbline 16
 0016 0030              cpi R16,0
 0018 0107              cpc R16,R17
 001A A9F7              brne L2
 001C           X0:
 001C                   .dbline -2
 001C           L1:
 001C 00D0              rcall pop_gset1
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbsym r n 20 c
 0020                   .dbsym r Time 16 i
 0020                   .dbend
                        .area lit(rom, con, rel)
 0000           _DisTab::
 0000 FC60              .byte 252,96
 0002 DAF2              .byte 218,242
 0004 66B6              .byte 'f,182
 0006 BEE0              .byte 190,224
 0008 FEF6              .byte 254,246
 000A EE3E              .byte 238,62
 000C 9C7A              .byte 156,'z
 000E 9E8E              .byte 158,142
 0010 CE1C              .byte 206,28
 0012 6E7C              .byte 'n,124
 0014 0A10              .byte 10,16
 0016 02                .byte 2
 0017                   .dbfile D:\实例8_中断唤醒的键盘扫描_加入抗抖动/led_dis.h
 0017                   .dbsym e DisTab _DisTab A[23:23]kc
                        .area text(rom, con, rel)
 0020                   .dbfile D:\实例8_中断唤醒的键盘扫描_加入抗抖动/led_dis.h
 0020                   .dbfile D:\实例8_中断唤醒的键盘扫描_加入抗抖动\keyboard_int.c
 0020                   .dbfunc e Key_Scan _Key_Scan fc
                        .even
 0020           _Key_Scan::
 0020                   .dbline -1
 0020                   .dbline 25
 0020           ; #define Key_F 0x0F
 0020           ; #define NoKey 0x00
 0020           ; 
 0020           ; #define LedDisPort PORTD
 0020           ; 
 0020           ; unsigned char Key_Scan (void)                             //键盘扫描函数,扫描键盘一次并返回键值
 0020           ; {
 0020                   .dbline 27
 0020           ; /*-----------------------扫描第1行-----------------------*/
 0020           ;     Key_X_1;
 0020 8FED              ldi R24,223
 0022 88B9              out 0x8,R24
 0024                   .dbline 29
 0024           ; 
 0024           ;     Delay_ms(1);
 0024 01E0              ldi R16,1
 0026 10E0              ldi R17,0
 0028 EBDF              rcall _Delay_ms
 002A                   .dbline 31
 002A           ; 
 002A           ;     if ((Key_Scan_Port|Key_Y_1)==Key_Y_1)
 002A 86B1              in R24,0x6
 002C 876F              ori R24,247
 002E 873F              cpi R24,247
 0030 11F4              brne L10
 0032                   .dbline 32
 0032           ;         return Key_A;
 0032 0AE0              ldi R16,10
 0034 24C0              rjmp L9
 0036           L10:
 0036                   .dbline 33
 0036           ;     else if ((Key_Scan_Port|Key_Y_2)==Key_Y_2)
 0036 86B1              in R24,0x6
 0038 8B6F              ori R24,251
 003A 8B3F              cpi R24,251
 003C 11F4              brne L12
 003E                   .dbline 34
 003E           ;         return Key_B;
 003E 0BE0              ldi R16,11
 0040 1EC0              rjmp L9
 0042           L12:
 0042                   .dbline 35
 0042           ;     else if ((Key_Scan_Port|Key_Y_3)==Key_Y_3)
 0042 86B1              in R24,0x6
 0044 8D6F              ori R24,253
 0046 8D3F              cpi R24,253
 0048 11F4              brne L14
 004A                   .dbline 36
 004A           ;         return Key_C;
 004A 0CE0              ldi R16,12
 004C 18C0              rjmp L9
 004E           L14:
 004E                   .dbline 39
 004E           ; 
 004E           ; /*-----------------------扫描第2行-----------------------*/
 004E           ;     Key_X_2;
 004E 8FEE              ldi R24,239
 0050 88B9              out 0x8,R24
 0052                   .dbline 41
 0052           ;     
 0052           ;     Delay_ms(1);
 0052 01E0              ldi R16,1
 0054 10E0              ldi R17,0
 0056 D4DF              rcall _Delay_ms
 0058                   .dbline 43
 0058           ; 
 0058           ;     if ((Key_Scan_Port|Key_Y_1)==Key_Y_1)
 0058 86B1              in R24,0x6
 005A 876F              ori R24,247
 005C 873F              cpi R24,247
 005E 11F4              brne L16
 0060                   .dbline 44
 0060           ;         return Key_D;
 0060 0DE0              ldi R16,13
 0062 0DC0              rjmp L9
 0064           L16:
 0064                   .dbline 45
 0064           ;     else if ((Key_Scan_Port|Key_Y_2)==Key_Y_2)
 0064 86B1              in R24,0x6
 0066 8B6F              ori R24,251
 0068 8B3F              cpi R24,251
 006A 11F4              brne L18
 006C                   .dbline 46
 006C           ;         return Key_E;
 006C 0EE0              ldi R16,14
 006E 07C0              rjmp L9
 0070           L18:
 0070                   .dbline 47
 0070           ;     else if ((Key_Scan_Port|Key_Y_3)==Key_Y_3)
 0070 86B1              in R24,0x6
 0072 8D6F              ori R24,253
 0074 8D3F              cpi R24,253
 0076 11F4              brne L20
 0078                   .dbline 48
 0078           ;         return Key_F;
 0078 0FE0              ldi R16,15
 007A 01C0              rjmp L9
 007C           L20:
 007C                   .dbline 50
 007C           ; 
 007C           ;     return NoKey;
 007C 0027              clr R16
 007E                   .dbline -2
 007E           L9:
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbend
 0080                   .dbfunc e Key_Scan_Ant_Dither _Key_Scan_Ant_Dither fc
 0080           ;    TmpKeyValue -> R20
                        .even
 0080           _Key_Scan_Ant_Dither::
 0080 00D0              rcall push_gset1
 0082                   .dbline -1
 0082                   .dbline 54
 0082           ; }
 0082           ; 
 0082           ; unsigned char Key_Scan_Ant_Dither(void)                   //抗抖动的键盘扫描函数,扫描键盘并返回键值
 0082           ; {
 0082                   .dbline 55
 0082           ;     unsigned char TmpKeyValue=NoKey;
 0082 4427              clr R20
 0084                   .dbline 57
 0084           ; 
 0084           ;     TmpKeyValue=Key_Scan();
 0084 CDDF              rcall _Key_Scan
 0086 402F              mov R20,R16
 0088                   .dbline 59
 0088           ; 
 0088           ;     if (TmpKeyValue==NoKey)
 0088 0023              tst R16
 008A 11F4              brne L23
 008C                   .dbline 60
 008C           ;         return NoKey;

⌨️ 快捷键说明

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