📄 ex_support.s
字号:
clr R18
L35:
tst R18
brne L32
X12:
.dbline 247
; {
.dbline 248
; chTempKeyCode = 0x04;
ldi R16,4
.dbline 249
; }
L32:
L29:
.dbline 251
;
; CLR_C;
in R24,0x15
ori R24,56
out 0x15,R24
.dbline 251
.dbline 251
cbi 0x15,5
.dbline 251
nop
.dbline 251
.dbline 252
; if (!READ_PINX)
sbis 0x13,1
rjmp L38
X13:
ldi R18,1
rjmp L39
L38:
clr R18
L39:
tst R18
brne L36
X14:
.dbline 253
; {
.dbline 254
; chTempKeyCode = 0x02;
ldi R16,2
.dbline 255
; }
rjmp L37
L36:
.dbline 256
; else if (!READ_PINY)
sbis 0x13,2
rjmp L42
X15:
ldi R18,1
rjmp L43
L42:
clr R18
L43:
tst R18
brne L40
X16:
.dbline 257
; {
.dbline 258
; chTempKeyCode = 0x05;
ldi R16,5
.dbline 259
; }
L40:
L37:
.dbline 261
;
; return chTempKeyCode;
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbsym r chTempKeyCode0 16 c
.dbend
.dbfunc e Key_Scan_New _Key_Scan_New fc
.even
_Key_Scan_New::
.dbline -1
.dbline 265
; }
; ////////////////////////////////////////////////////////////////////////////
; UINT8 Key_Scan_New(void)
; {
.dbline 266
; UINT8 chTempKeyCode = KEY_NULL; //为按键的编码设初值
.dbline 270
;
;
; //先对21-25按钮进行扫描
; DDRC &= ~(BIT(1) | BIT(2) | BIT(3) |
in R24,0x14
andi R24,193
out 0x14,R24
.dbline 273
; BIT(4) | BIT(5)); //把端口pc1-pc5都置为输入
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 275
; BIT(4) | BIT(5); //全部端口拉高
; NOP();
nop
.dbline 276
; NOP();
nop
.dbline 279
;
;
; if (!(PINC & (BIT(1)))) //读取pc1端口,如果返回值是0则表明按键被按下,
sbic 0x13,1
rjmp L45
X17:
.dbline 281
; //则返回按键的值
; {
.dbline 282
; chTempKeyCode = 21;
.dbline 283
; return chTempKeyCode;
ldi R16,21
rjmp L44
L45:
.dbline 285
; }
; else if (!(PINC & (BIT(2)))) //读取pc2端口,如果返回值是0则表明按键被按下,
sbic 0x13,2
rjmp L47
X18:
.dbline 287
; //则返回按键的值,下面以此类推。
; {
.dbline 288
; chTempKeyCode = 22;
.dbline 289
; return chTempKeyCode;
ldi R16,22
rjmp L44
L47:
.dbline 291
; }
; else if (!(PINC & (BIT(3))))
sbic 0x13,3
rjmp L49
X19:
.dbline 292
; {
.dbline 293
; chTempKeyCode = 23;
.dbline 294
; return chTempKeyCode;
ldi R16,23
rjmp L44
L49:
.dbline 296
; }
; else if (!(PINC & (BIT(4))))
sbic 0x13,4
rjmp L51
X20:
.dbline 297
; {
.dbline 298
; chTempKeyCode = 24;
.dbline 299
; return chTempKeyCode;
ldi R16,24
rjmp L44
L51:
.dbline 301
; }
; else if (!(PINC & (BIT(5))))
sbic 0x13,5
rjmp L53
X21:
.dbline 302
; {
.dbline 303
; chTempKeyCode = 25;
.dbline 304
; return chTempKeyCode;
ldi R16,25
rjmp L44
L53:
.dbline 309
; }
;
; //////////////////////////////////////////////////////////////
; //对1-4按钮进行扫描
; DDRC &= ~(BIT(2) | BIT(3) |
in R24,0x14
andi R24,195
out 0x14,R24
.dbline 311
; BIT(4) | BIT(5)); //把端口pc2-pc5设置为输入
; DDRC |= BIT(1); //把pc1端口设为输出
sbi 0x14,1
.dbline 313
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 316
; BIT(4) | BIT(5);
;
; PORTC &=~ BIT(1); //把pc1端口拉低
cbi 0x15,1
.dbline 317
; NOP();
nop
.dbline 318
; NOP();
nop
.dbline 321
;
;
; if (!(PINC & (BIT(2)))) //读取pc2端口,如果返回值是0则表明按键被按下,
sbic 0x13,2
rjmp L55
X22:
.dbline 325
; //则返回按键的值
; //以下依次对pc3、pc4、pc5逐个读取值,如果返回值为0
; //则返回相应按键值
; {
.dbline 326
; chTempKeyCode = 1;
.dbline 327
; return chTempKeyCode;
ldi R16,1
rjmp L44
L55:
.dbline 329
; }
; else if (!(PINC & (BIT(3))))
sbic 0x13,3
rjmp L57
X23:
.dbline 330
; {
.dbline 331
; chTempKeyCode = 2;
.dbline 332
; return chTempKeyCode;
ldi R16,2
rjmp L44
L57:
.dbline 334
; }
; else if (!(PINC & (BIT(4))))
sbic 0x13,4
rjmp L59
X24:
.dbline 335
; {
.dbline 336
; chTempKeyCode = 3;
.dbline 337
; return chTempKeyCode;
ldi R16,3
rjmp L44
L59:
.dbline 339
; }
; else if (!(PINC & (BIT(5))))
sbic 0x13,5
rjmp L61
X25:
.dbline 340
; {
.dbline 341
; chTempKeyCode = 4;
.dbline 342
; return chTempKeyCode;
ldi R16,4
rjmp L44
L61:
.dbline 349
; }
;
;
; //////////////////////////////////////////////////////////////
;
; //对6-7按钮进行扫描
; DDRC &= ~(BIT(1) | BIT(3) |
in R24,0x14
andi R24,197
out 0x14,R24
.dbline 352
; BIT(4) | BIT(5));//把端口pc1,pc3-pc5设置为输入
;
; DDRC |= BIT(2);//把pc2端口设为输出
sbi 0x14,2
.dbline 354
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 357
; BIT(4) | BIT(5);
;
; PORTC &= ~BIT(2); //把pc2端口拉低
cbi 0x15,2
.dbline 358
; NOP();
nop
.dbline 359
; NOP();
nop
.dbline 362
;
;
; if (!(PINC & (BIT(3)))) //读取pc3端口,如果返回值是0则表明按键被按下,
sbic 0x13,3
rjmp L63
X26:
.dbline 366
; //则返回按键的值
; //以下依次对pc4、pc5逐个读取值,如果返回值为0
; //则返回相应按键值
; {
.dbline 367
; chTempKeyCode = 6;
.dbline 368
; return chTempKeyCode;
ldi R16,6
rjmp L44
L63:
.dbline 370
; }
; else if (!(PINC & (BIT(4))))
sbic 0x13,4
rjmp L65
X27:
.dbline 371
; {
.dbline 372
; chTempKeyCode = 7;
.dbline 373
; return chTempKeyCode;
ldi R16,7
rjmp L44
L65:
.dbline 375
; }
; else if (!(PINC & (BIT(5))))
sbic 0x13,5
rjmp L67
X28:
.dbline 376
; {
.dbline 377
; chTempKeyCode = 8;
.dbline 378
; return chTempKeyCode;
ldi R16,8
rjmp L44
L67:
.dbline 384
; }
;
; //////////////////////////////////////////////////////////////
;
; //对11-12按钮进行扫描
; DDRC &= ~(BIT(2) | BIT(1) |
in R24,0x14
andi R24,201
out 0x14,R24
.dbline 387
; BIT(4) | BIT(5));//把端口pc1-pc2,pc4-pc5设置为输入
;
; DDRC |= BIT(3);//把pc3端口设为输出
sbi 0x14,3
.dbline 389
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 392
; BIT(4) | BIT(5);
;
; PORTC &= ~BIT(3);//把pc2端口拉低
cbi 0x15,3
.dbline 393
; NOP();
nop
.dbline 394
; NOP();
nop
.dbline 396
;
; if (!(PINC & (BIT(4)))) //读取pc4端口,如果返回值是0则表明按键被按下,
sbic 0x13,4
rjmp L69
X29:
.dbline 399
; //则返回按键的值
;
; {
.dbline 400
; chTempKeyCode = 11;
.dbline 401
; return chTempKeyCode;
ldi R16,11
rjmp L44
L69:
.dbline 403
; }
; else if (!(PINC & (BIT(5))))//读取pc5端口,如果返回值是0则表明按键被按下,
sbic 0x13,5
rjmp L71
X30:
.dbline 405
; //则返回按键的值
; {
.dbline 406
; chTempKeyCode = 12;
.dbline 407
; return chTempKeyCode;
ldi R16,12
rjmp L44
L71:
.dbline 411
; }
; ////////////////////////////////////////////////////////////////
; //对16按钮进行扫描
; DDRC &= ~(BIT(2) | BIT(1) |
in R24,0x14
andi R24,209
out 0x14,R24
.dbline 414
; BIT(3) | BIT(5));//把端口pc1-pc3、pc5设置为输入
;
; DDRC |= BIT(4); //把pc4端口设为输出
sbi 0x14,4
.dbline 416
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 419
; BIT(4) | BIT(5);
;
; PORTC &=~ BIT(4); //把pc4端口拉低
cbi 0x15,4
.dbline 420
; NOP();
nop
.dbline 421
; NOP();
nop
.dbline 424
;
;
; if (!(PINC & (BIT(5))))
sbic 0x13,5
rjmp L73
X31:
.dbline 425
; {
.dbline 426
; chTempKeyCode = 16;
.dbline 427
; return chTempKeyCode; //读取pc5端口,如果返回值是0则表明按键被按下,
ldi R16,16
rjmp L44
L73:
.dbline 434
; //则返回按键的值
; }
;
;
; //////////////////////////////////////////////////////////////
; //对20-17按钮进行扫描
; DDRC &= ~(BIT(2) | BIT(3) |
in R24,0x14
andi R24,225
out 0x14,R24
.dbline 437
; BIT(4) | BIT(1)); //把端口pc1-pc4设置为输入
;
; DDRC |= BIT(5); //把pc5端口设为输出
sbi 0x14,5
.dbline 439
;
; PORTC |= BIT(1) | BIT(2) | BIT(3) |
in R24,0x15
ori R24,62
out 0x15,R24
.dbline 442
; BIT(4) | BIT(5);
;
; PORTC &= ~BIT(5); //把pc5端口拉低
cbi 0x15,5
.dbline 443
; NOP();
nop
.dbline 444
; NOP();
nop
.dbline 448
;
;
;
; if (!(PINC & (BIT(4)))) //读取pc4端口,如果返回值是0则表明按键被按下,
sbic 0x13,4
rjmp L75
X32:
.dbline 452
; //则返回按键的值
; //以下依次对pc3-pc1逐个读取值,如果返回值为0
; //则返回相应按键值
; {
.dbline 453
; chTempKeyCode = 20;
.dbline 454
; return chTempKeyCode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -