📄 keyboard_int.lis
字号:
.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 + -