📄 keyboard.s
字号:
.module keyboard.c
.area text(rom, con, rel)
.dbfile F:\yyjapp\yymk\software\keyboard.c
.dbfunc e scankey _scankey fc
; keya -> R16
.even
_scankey::
.dbline -1
.dbline 15
; #include <f:\yyjapp\yymk\software\main.h>
; #include <f:\yyjapp\yymk\software\keyboard.h>
; #include <f:\yyjapp\yymk\software\MfRc500.h>
; #include <f:\yyjapp\yymk\software\at45db161.h>
; #include <iom128v.h>
; #include <macros.h>
; #include <eeprom.h>
; extern unsigned char key_pw[6];
; extern unsigned char oldkey_pw[6];
; extern unsigned int keycount;
; extern unsigned char T2IR;
; extern unsigned int timecounter;
;
; unsigned char scankey(void)
; {
.dbline 17
; unsigned char keya;
; DDRC=0xff;
ldi R24,255
out 0x14,R24
.dbline 18
; SET_KEY3();
cbi 0x14,3
.dbline 19
; SET_KEY4();
cbi 0x14,4
.dbline 20
; SET_KEY5();
cbi 0x14,5
.dbline 21
; SET_KEY6();
cbi 0x14,6
.dbline 22
; CLEAR_KEY0();
sbi 0x14,0
.dbline 23
; CLEAR_KEY1();
sbi 0x14,1
.dbline 24
; CLEAR_KEY2();
sbi 0x14,2
.dbline 25
; DDRC=PORTC=0;
clr R2
out 0x15,R2
out 0x14,R2
.dbline 27
; // PORTA=0xff;
; keya=PINC;
in R16,0x13
.dbline 28
; keya=keya<<1;
lsl R16
.dbline 29
; if(keya==0xf0)
cpi R16,240
brne L3
.dbline 30
; return 1;
ldi R16,1
xjmp L2
L3:
.dbline 32
; else
; return 0;
clr R16
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbsym r keya 16 c
.dbend
.dbfunc e keyvalue1 _keyvalue1 fc
; value -> R16
; key1 -> R16
.even
_keyvalue1::
.dbline -1
.dbline 35
; }
; unsigned char keyvalue1(void)
; {
.dbline 37
; unsigned char key1,value;
; DDRC=0xFF;
ldi R24,255
out 0x14,R24
.dbline 38
; CLEAR_KEY3();
sbi 0x14,3
.dbline 39
; SET_KEY4();
cbi 0x14,4
.dbline 40
; SET_KEY5();
cbi 0x14,5
.dbline 41
; SET_KEY6();
cbi 0x14,6
.dbline 43
;
; SET_KEY0();
cbi 0x14,0
.dbline 44
; SET_KEY1();
cbi 0x14,1
.dbline 45
; SET_KEY2();
cbi 0x14,2
.dbline 46
; DDRC=PORTC=0;
clr R2
out 0x15,R2
out 0x14,R2
.dbline 47
; key1=PINC;
in R16,0x13
.dbline 48
; key1=key1&0x07;
andi R16,7
.dbline 50
; // key1=key1<<1;
; switch(key1)
clr R17
cpi R16,3
ldi R30,0
cpc R17,R30
breq L11
cpi R16,5
ldi R30,0
cpc R17,R30
breq L10
cpi R16,6
ldi R30,0
cpc R17,R30
breq L9
xjmp L6
X0:
.dbline 51
; {
L9:
.dbline 53
; case 0x06: // 3 keyvalue
; value=0x03; // 3 key
ldi R16,3
.dbline 54
; break;
xjmp L7
L10:
.dbline 56
; case 0x05: // 2 keyvalue
; value=0x02; // 2 key
ldi R16,2
.dbline 57
; break;
xjmp L7
L11:
.dbline 59
; case 0x03: // 1 keyvalue
; value=0x01; // 1 key
ldi R16,1
.dbline 60
; break;
xjmp L7
L6:
.dbline 62
; default:
; value=0xff;
ldi R16,255
.dbline 63
; break;
L7:
.dbline 65
; }
; return value;
.dbline -2
L5:
.dbline 0 ; func end
ret
.dbsym r value 16 c
.dbsym r key1 16 c
.dbend
.dbfunc e keyvalue2 _keyvalue2 fc
; value -> R16
; key1 -> R16
.even
_keyvalue2::
.dbline -1
.dbline 68
; }
; unsigned char keyvalue2(void)
; {
.dbline 70
; unsigned char key1,value;
; DDRC=0xFF;
ldi R24,255
out 0x14,R24
.dbline 71
; SET_KEY3();
cbi 0x14,3
.dbline 72
; CLEAR_KEY4();
sbi 0x14,4
.dbline 73
; SET_KEY5();
cbi 0x14,5
.dbline 74
; SET_KEY6();
cbi 0x14,6
.dbline 76
;
; SET_KEY0();
cbi 0x14,0
.dbline 77
; SET_KEY1();
cbi 0x14,1
.dbline 78
; SET_KEY2();
cbi 0x14,2
.dbline 79
; DDRC=PORTC=0;
clr R2
out 0x15,R2
out 0x14,R2
.dbline 80
; key1=PINC;
in R16,0x13
.dbline 81
; key1=key1&0x07;
andi R16,7
.dbline 83
; // key1=key1<<1;
; switch(key1)
clr R17
cpi R16,3
ldi R30,0
cpc R17,R30
breq L18
cpi R16,5
ldi R30,0
cpc R17,R30
breq L17
cpi R16,6
ldi R30,0
cpc R17,R30
breq L16
xjmp L13
X1:
.dbline 84
; {
L16:
.dbline 86
; case 0x06: // 6 keyvalue
; value=0x06; // 6 key
ldi R16,6
.dbline 87
; break;
xjmp L14
L17:
.dbline 89
; case 0x05: // 5 keyvalue
; value=0x05; // 5 key
ldi R16,5
.dbline 90
; break;
xjmp L14
L18:
.dbline 92
; case 0x03: // 4 keyvalue
; value=0x04; // 4 key
ldi R16,4
.dbline 93
; break;
xjmp L14
L13:
.dbline 95
; default:
; value=0xff;
ldi R16,255
.dbline 96
; break;
L14:
.dbline 98
; }
; return value;
.dbline -2
L12:
.dbline 0 ; func end
ret
.dbsym r value 16 c
.dbsym r key1 16 c
.dbend
.dbfunc e keyvalue3 _keyvalue3 fc
; value -> R16
; key1 -> R16
.even
_keyvalue3::
.dbline -1
.dbline 101
; }
; unsigned char keyvalue3(void)
; {
.dbline 103
; unsigned char key1,value;
; DDRC=0xFF;
ldi R24,255
out 0x14,R24
.dbline 104
; SET_KEY3();
cbi 0x14,3
.dbline 105
; SET_KEY4();
cbi 0x14,4
.dbline 106
; CLEAR_KEY5();
sbi 0x14,5
.dbline 107
; SET_KEY6();
cbi 0x14,6
.dbline 109
;
; SET_KEY0();
cbi 0x14,0
.dbline 110
; SET_KEY1();
cbi 0x14,1
.dbline 111
; SET_KEY2();
cbi 0x14,2
.dbline 112
; DDRC=PORTC=0;
clr R2
out 0x15,R2
out 0x14,R2
.dbline 113
; key1=PINC;
in R16,0x13
.dbline 114
; key1=key1&0x07;
andi R16,7
.dbline 116
; // key1=key1<<1;
; switch(key1)
clr R17
cpi R16,3
ldi R30,0
cpc R17,R30
breq L25
cpi R16,5
ldi R30,0
cpc R17,R30
breq L24
cpi R16,6
ldi R30,0
cpc R17,R30
breq L23
xjmp L20
X2:
.dbline 117
; {
L23:
.dbline 119
; case 0x06: // 9 keyvalue
; value=0x09; // 9 key
ldi R16,9
.dbline 120
; break;
xjmp L21
L24:
.dbline 122
; case 0x05: // 8 keyvalue
; value=0x08; // 8 key
ldi R16,8
.dbline 123
; break;
xjmp L21
L25:
.dbline 125
; case 0x03: // 7 keyvalue
; value=0x07; // 7 key
ldi R16,7
.dbline 126
; break;
xjmp L21
L20:
.dbline 128
; default:
; value=0xff;
ldi R16,255
.dbline 129
; break;
L21:
.dbline 131
; }
; return value;
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbsym r value 16 c
.dbsym r key1 16 c
.dbend
.dbfunc e keyvalue4 _keyvalue4 fc
; value -> R16
; key1 -> R16
.even
_keyvalue4::
.dbline -1
.dbline 134
; }
; unsigned char keyvalue4(void)
; {
.dbline 136
; unsigned char key1,value;
; DDRC=0xFF;
ldi R24,255
out 0x14,R24
.dbline 137
; SET_KEY3();
cbi 0x14,3
.dbline 138
; SET_KEY4();
cbi 0x14,4
.dbline 139
; SET_KEY5();
cbi 0x14,5
.dbline 140
; CLEAR_KEY6();
sbi 0x14,6
.dbline 142
;
; SET_KEY0();
cbi 0x14,0
.dbline 143
; SET_KEY1();
cbi 0x14,1
.dbline 144
; SET_KEY2();
cbi 0x14,2
.dbline 145
; DDRC=PORTC=0;
clr R2
out 0x15,R2
out 0x14,R2
.dbline 146
; key1=PINC;
in R16,0x13
.dbline 147
; key1=key1&0x07;
andi R16,7
.dbline 149
; // key1=key1<<1;
; switch(key1)
clr R17
cpi R16,3
ldi R30,0
cpc R17,R30
breq L32
cpi R16,5
ldi R30,0
cpc R17,R30
breq L31
cpi R16,6
ldi R30,0
cpc R17,R30
breq L30
xjmp L27
X3:
.dbline 150
; {
L30:
.dbline 152
; case 0x06: // # keyvalue
; value=0x0b; // # key
ldi R16,11
.dbline 153
; break;
xjmp L28
L31:
.dbline 155
; case 0x05: // 0 keyvalue
; value=0x00; // 0 key
clr R16
.dbline 156
; break;
xjmp L28
L32:
.dbline 158
; case 0x03: // * keyvalue
; value=0x0a; // * key
ldi R16,10
.dbline 159
; break;
xjmp L28
L27:
.dbline 161
; default:
; value=0xff;
ldi R16,255
.dbline 162
; break;
L28:
.dbline 164
; }
; return value;
.dbline -2
L26:
.dbline 0 ; func end
ret
.dbsym r value 16 c
.dbsym r key1 16 c
.dbend
.dbfunc e keyvalue _keyvalue fc
; cc4 -> R12
; cc3 -> R10
; cc2 -> R22
; cc1 -> R20
.even
_keyvalue::
xcall push_gset4
.dbline -1
.dbline 167
; }
; unsigned char keyvalue(void)
; {
.dbline 169
; unsigned char cc1,cc2,cc3,cc4;
; cc1=keyvalue1();
xcall _keyvalue1
mov R20,R16
.dbline 170
; cc2=keyvalue2();
xcall _keyvalue2
mov R22,R16
.dbline 171
; cc3=keyvalue3();
xcall _keyvalue3
mov R10,R16
.dbline 172
; cc4=keyvalue4();
xcall _keyvalue4
mov R12,R16
.dbline 173
; if(cc4!=0xff)
cpi R16,255
breq L34
.dbline 174
; {
.dbline 175
; beep(1);
ldi R16,1
xcall _beep
.dbline 176
; return cc4;
mov R16,R12
xjmp L33
L34:
.dbline 178
; }
; if(cc3!=0xff)
mov R24,R10
cpi R24,255
breq L36
.dbline 179
; {
.dbline 180
; beep(1);
ldi R16,1
xcall _beep
.dbline 181
; return cc3;
mov R16,R10
xjmp L33
L36:
.dbline 183
; }
; if(cc2!=0xff)
cpi R22,255
breq L38
.dbline 184
; {
.dbline 185
; beep(1);
ldi R16,1
xcall _beep
.dbline 186
; return cc2;
mov R16,R22
xjmp L33
L38:
.dbline 188
; }
; if(cc1!=0xff)
cpi R20,255
breq L40
.dbline 189
; {
.dbline 190
; beep(1);
ldi R16,1
xcall _beep
.dbline 191
; return cc1;
mov R16,R20
xjmp L33
L40:
.dbline 193
; }
; return 0xff;
ldi R16,255
.dbline -2
L33:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r cc4 12 c
.dbsym r cc3 10 c
.dbsym r cc2 22 c
.dbsym r cc1 20 c
.dbend
.dbfunc e delay1 _delay1 fV
; i -> R20
; j -> R22,R23
; second -> R16
.even
_delay1::
xcall push_gset2
.dbline -1
.dbline 198
; }
;
;
; void delay1(unsigned char second)
; {
.dbline 201
; unsigned char i;
; unsigned int j;
; for(i=0;i<second;i++)
clr R20
xjmp L46
L43:
.dbline 202
clr R22
clr R23
xjmp L50
L47:
.dbline 202
L48:
.dbline 202
subi R22,255 ; offset = 1
sbci R23,255
L50:
.dbline 202
cpi R22,232
ldi R30,253
cpc R23,R30
brlo L47
L44:
.dbline 201
inc R20
L46:
.dbline 201
cp R20,R16
brlo L43
.dbline -2
L42:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r j 22 i
.dbsym r second 16 c
.dbend
.dbfunc e CMP_STRING _CMP_STRING fc
; ct -> R20
; len -> R22
; pt2 -> R18,R19
; pt1 -> R16,R17
.even
_CMP_STRING::
xcall push_gset2
ldd R22,y+4
.dbline -1
.dbline 206
; for(j=0;j<65000;j++);
; }
; unsigned char CMP_STRING(unsigned char *pt1,
; unsigned char *pt2,unsigned char len)
; {
.dbline 208
; unsigned char ct; // fixed lenth 4.
; for (ct=0;ct<len;ct++)
clr R20
xjmp L55
L52:
.dbline 209
; {
.dbline 210
; if (*pt1++ != *pt2++)
movw R30,R18
ld R2,Z+
movw R18,R30
movw R30,R16
ld R3,Z+
movw R16,R30
cp R3,R2
breq L56
.dbline 211
; return 1;
ldi R16,1
xjmp L51
L56:
.dbline 212
L53:
.dbline 208
inc R20
L55:
.dbline 208
cp R20,R22
brlo L52
.dbline 213
; }
; return 0; // equal return 0.
clr R16
.dbline -2
L51:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r ct 20 c
.dbsym r len 22 c
.dbsym r pt2 18 pc
.dbsym r pt1 16 pc
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -