📄 keyboard.lis
字号:
.module keyboard.c
.area text(rom, con, rel)
0000 .dbfile F:\yyjapp\yymk\software\keyboard.c
0000 .dbfunc e scankey _scankey fc
0000 ; keya -> R16
.even
0000 _scankey::
0000 .dbline -1
0000 .dbline 15
0000 ; #include <f:\yyjapp\yymk\software\main.h>
0000 ; #include <f:\yyjapp\yymk\software\keyboard.h>
0000 ; #include <f:\yyjapp\yymk\software\MfRc500.h>
0000 ; #include <f:\yyjapp\yymk\software\at45db161.h>
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ; #include <eeprom.h>
0000 ; extern unsigned char key_pw[6];
0000 ; extern unsigned char oldkey_pw[6];
0000 ; extern unsigned int keycount;
0000 ; extern unsigned char T2IR;
0000 ; extern unsigned int timecounter;
0000 ;
0000 ; unsigned char scankey(void)
0000 ; {
0000 .dbline 17
0000 ; unsigned char keya;
0000 ; DDRC=0xff;
0000 8FEF ldi R24,255
0002 84BB out 0x14,R24
0004 .dbline 18
0004 ; SET_KEY3();
0004 A398 cbi 0x14,3
0006 .dbline 19
0006 ; SET_KEY4();
0006 A498 cbi 0x14,4
0008 .dbline 20
0008 ; SET_KEY5();
0008 A598 cbi 0x14,5
000A .dbline 21
000A ; SET_KEY6();
000A A698 cbi 0x14,6
000C .dbline 22
000C ; CLEAR_KEY0();
000C A09A sbi 0x14,0
000E .dbline 23
000E ; CLEAR_KEY1();
000E A19A sbi 0x14,1
0010 .dbline 24
0010 ; CLEAR_KEY2();
0010 A29A sbi 0x14,2
0012 .dbline 25
0012 ; DDRC=PORTC=0;
0012 2224 clr R2
0014 25BA out 0x15,R2
0016 24BA out 0x14,R2
0018 .dbline 27
0018 ; // PORTA=0xff;
0018 ; keya=PINC;
0018 03B3 in R16,0x13
001A .dbline 28
001A ; keya=keya<<1;
001A 000F lsl R16
001C .dbline 29
001C ; if(keya==0xf0)
001C 003F cpi R16,240
001E 11F4 brne L3
0020 .dbline 30
0020 ; return 1;
0020 01E0 ldi R16,1
0022 01C0 xjmp L2
0024 L3:
0024 .dbline 32
0024 ; else
0024 ; return 0;
0024 0027 clr R16
0026 .dbline -2
0026 L2:
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r keya 16 c
0028 .dbend
0028 .dbfunc e keyvalue1 _keyvalue1 fc
0028 ; value -> R16
0028 ; key1 -> R16
.even
0028 _keyvalue1::
0028 .dbline -1
0028 .dbline 35
0028 ; }
0028 ; unsigned char keyvalue1(void)
0028 ; {
0028 .dbline 37
0028 ; unsigned char key1,value;
0028 ; DDRC=0xFF;
0028 8FEF ldi R24,255
002A 84BB out 0x14,R24
002C .dbline 38
002C ; CLEAR_KEY3();
002C A39A sbi 0x14,3
002E .dbline 39
002E ; SET_KEY4();
002E A498 cbi 0x14,4
0030 .dbline 40
0030 ; SET_KEY5();
0030 A598 cbi 0x14,5
0032 .dbline 41
0032 ; SET_KEY6();
0032 A698 cbi 0x14,6
0034 .dbline 43
0034 ;
0034 ; SET_KEY0();
0034 A098 cbi 0x14,0
0036 .dbline 44
0036 ; SET_KEY1();
0036 A198 cbi 0x14,1
0038 .dbline 45
0038 ; SET_KEY2();
0038 A298 cbi 0x14,2
003A .dbline 46
003A ; DDRC=PORTC=0;
003A 2224 clr R2
003C 25BA out 0x15,R2
003E 24BA out 0x14,R2
0040 .dbline 47
0040 ; key1=PINC;
0040 03B3 in R16,0x13
0042 .dbline 48
0042 ; key1=key1&0x07;
0042 0770 andi R16,7
0044 .dbline 50
0044 ; // key1=key1<<1;
0044 ; switch(key1)
0044 1127 clr R17
0046 0330 cpi R16,3
0048 E0E0 ldi R30,0
004A 1E07 cpc R17,R30
004C 69F0 breq L11
004E 0530 cpi R16,5
0050 E0E0 ldi R30,0
0052 1E07 cpc R17,R30
0054 39F0 breq L10
0056 0630 cpi R16,6
0058 E0E0 ldi R30,0
005A 1E07 cpc R17,R30
005C 09F0 breq L9
005E 06C0 xjmp L6
0060 X0:
0060 .dbline 51
0060 ; {
0060 L9:
0060 .dbline 53
0060 ; case 0x06: // 3 keyvalue
0060 ; value=0x03; // 3 key
0060 03E0 ldi R16,3
0062 .dbline 54
0062 ; break;
0062 05C0 xjmp L7
0064 L10:
0064 .dbline 56
0064 ; case 0x05: // 2 keyvalue
0064 ; value=0x02; // 2 key
0064 02E0 ldi R16,2
0066 .dbline 57
0066 ; break;
0066 03C0 xjmp L7
0068 L11:
0068 .dbline 59
0068 ; case 0x03: // 1 keyvalue
0068 ; value=0x01; // 1 key
0068 01E0 ldi R16,1
006A .dbline 60
006A ; break;
006A 01C0 xjmp L7
006C L6:
006C .dbline 62
006C ; default:
006C ; value=0xff;
006C 0FEF ldi R16,255
006E .dbline 63
006E ; break;
006E L7:
006E .dbline 65
006E ; }
006E ; return value;
006E .dbline -2
006E L5:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbsym r value 16 c
0070 .dbsym r key1 16 c
0070 .dbend
0070 .dbfunc e keyvalue2 _keyvalue2 fc
0070 ; value -> R16
0070 ; key1 -> R16
.even
0070 _keyvalue2::
0070 .dbline -1
0070 .dbline 68
0070 ; }
0070 ; unsigned char keyvalue2(void)
0070 ; {
0070 .dbline 70
0070 ; unsigned char key1,value;
0070 ; DDRC=0xFF;
0070 8FEF ldi R24,255
0072 84BB out 0x14,R24
0074 .dbline 71
0074 ; SET_KEY3();
0074 A398 cbi 0x14,3
0076 .dbline 72
0076 ; CLEAR_KEY4();
0076 A49A sbi 0x14,4
0078 .dbline 73
0078 ; SET_KEY5();
0078 A598 cbi 0x14,5
007A .dbline 74
007A ; SET_KEY6();
007A A698 cbi 0x14,6
007C .dbline 76
007C ;
007C ; SET_KEY0();
007C A098 cbi 0x14,0
007E .dbline 77
007E ; SET_KEY1();
007E A198 cbi 0x14,1
0080 .dbline 78
0080 ; SET_KEY2();
0080 A298 cbi 0x14,2
0082 .dbline 79
0082 ; DDRC=PORTC=0;
0082 2224 clr R2
0084 25BA out 0x15,R2
0086 24BA out 0x14,R2
0088 .dbline 80
0088 ; key1=PINC;
0088 03B3 in R16,0x13
008A .dbline 81
008A ; key1=key1&0x07;
008A 0770 andi R16,7
008C .dbline 83
008C ; // key1=key1<<1;
008C ; switch(key1)
008C 1127 clr R17
008E 0330 cpi R16,3
0090 E0E0 ldi R30,0
0092 1E07 cpc R17,R30
0094 69F0 breq L18
0096 0530 cpi R16,5
0098 E0E0 ldi R30,0
009A 1E07 cpc R17,R30
009C 39F0 breq L17
009E 0630 cpi R16,6
00A0 E0E0 ldi R30,0
00A2 1E07 cpc R17,R30
00A4 09F0 breq L16
00A6 06C0 xjmp L13
00A8 X1:
00A8 .dbline 84
00A8 ; {
00A8 L16:
00A8 .dbline 86
00A8 ; case 0x06: // 6 keyvalue
00A8 ; value=0x06; // 6 key
00A8 06E0 ldi R16,6
00AA .dbline 87
00AA ; break;
00AA 05C0 xjmp L14
00AC L17:
00AC .dbline 89
00AC ; case 0x05: // 5 keyvalue
00AC ; value=0x05; // 5 key
00AC 05E0 ldi R16,5
00AE .dbline 90
00AE ; break;
00AE 03C0 xjmp L14
00B0 L18:
00B0 .dbline 92
00B0 ; case 0x03: // 4 keyvalue
00B0 ; value=0x04; // 4 key
00B0 04E0 ldi R16,4
00B2 .dbline 93
00B2 ; break;
00B2 01C0 xjmp L14
00B4 L13:
00B4 .dbline 95
00B4 ; default:
00B4 ; value=0xff;
00B4 0FEF ldi R16,255
00B6 .dbline 96
00B6 ; break;
00B6 L14:
00B6 .dbline 98
00B6 ; }
00B6 ; return value;
00B6 .dbline -2
00B6 L12:
00B6 .dbline 0 ; func end
00B6 0895 ret
00B8 .dbsym r value 16 c
00B8 .dbsym r key1 16 c
00B8 .dbend
00B8 .dbfunc e keyvalue3 _keyvalue3 fc
00B8 ; value -> R16
00B8 ; key1 -> R16
.even
00B8 _keyvalue3::
00B8 .dbline -1
00B8 .dbline 101
00B8 ; }
00B8 ; unsigned char keyvalue3(void)
00B8 ; {
00B8 .dbline 103
00B8 ; unsigned char key1,value;
00B8 ; DDRC=0xFF;
00B8 8FEF ldi R24,255
00BA 84BB out 0x14,R24
00BC .dbline 104
00BC ; SET_KEY3();
00BC A398 cbi 0x14,3
00BE .dbline 105
00BE ; SET_KEY4();
00BE A498 cbi 0x14,4
00C0 .dbline 106
00C0 ; CLEAR_KEY5();
00C0 A59A sbi 0x14,5
00C2 .dbline 107
00C2 ; SET_KEY6();
00C2 A698 cbi 0x14,6
00C4 .dbline 109
00C4 ;
00C4 ; SET_KEY0();
00C4 A098 cbi 0x14,0
00C6 .dbline 110
00C6 ; SET_KEY1();
00C6 A198 cbi 0x14,1
00C8 .dbline 111
00C8 ; SET_KEY2();
00C8 A298 cbi 0x14,2
00CA .dbline 112
00CA ; DDRC=PORTC=0;
00CA 2224 clr R2
00CC 25BA out 0x15,R2
00CE 24BA out 0x14,R2
00D0 .dbline 113
00D0 ; key1=PINC;
00D0 03B3 in R16,0x13
00D2 .dbline 114
00D2 ; key1=key1&0x07;
00D2 0770 andi R16,7
00D4 .dbline 116
00D4 ; // key1=key1<<1;
00D4 ; switch(key1)
00D4 1127 clr R17
00D6 0330 cpi R16,3
00D8 E0E0 ldi R30,0
00DA 1E07 cpc R17,R30
00DC 69F0 breq L25
00DE 0530 cpi R16,5
00E0 E0E0 ldi R30,0
00E2 1E07 cpc R17,R30
00E4 39F0 breq L24
00E6 0630 cpi R16,6
00E8 E0E0 ldi R30,0
00EA 1E07 cpc R17,R30
00EC 09F0 breq L23
00EE 06C0 xjmp L20
00F0 X2:
00F0 .dbline 117
00F0 ; {
00F0 L23:
00F0 .dbline 119
00F0 ; case 0x06: // 9 keyvalue
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -