2x8_key.lss
来自「WINAVR写的2x8键盘扫描程序」· LSS 代码 · 共 1,833 行 · 第 1/5 页
LSS
1,833 行
25c: 8f 71 andi r24, 0x1F ; 31
25e: 80 93 3b 00 sts 0x003B, r24
key_SEL_PORT|=(row<<5); //把row值送到高3位
262: 89 81 ldd r24, Y+1 ; 0x01
264: 99 27 eor r25, r25
266: 88 0f add r24, r24
268: 99 1f adc r25, r25
26a: 82 95 swap r24
26c: 92 95 swap r25
26e: 90 7f andi r25, 0xF0 ; 240
270: 98 27 eor r25, r24
272: 80 7f andi r24, 0xF0 ; 240
274: 98 27 eor r25, r24
276: 20 91 3b 00 lds r18, 0x003B
27a: 82 2b or r24, r18
27c: 80 93 3b 00 sts 0x003B, r24
if((key_PIN&(1<<key_KIN1))==0) //第二行有按键按下
280: 80 91 33 00 lds r24, 0x0033
284: 88 23 and r24, r24
286: 34 f0 brlt .+12 ; 0x294 <key+0x58>
{
return(10+row); //返回第二行键值10-17
288: 89 81 ldd r24, Y+1 ; 0x01
28a: 86 5f subi r24, 0xF6 ; 246
28c: 99 27 eor r25, r25
28e: 9b 83 std Y+3, r25 ; 0x03
290: 8a 83 std Y+2, r24 ; 0x02
292: 14 c0 rjmp .+40 ; 0x2bc <key+0x80>
}
if((key_PIN&(1<<key_KIN0))==0) //第一行有按键按下
294: 80 91 33 00 lds r24, 0x0033
298: 99 27 eor r25, r25
29a: 80 74 andi r24, 0x40 ; 64
29c: 90 70 andi r25, 0x00 ; 0
29e: 00 97 sbiw r24, 0x00 ; 0
2a0: 29 f4 brne .+10 ; 0x2ac <key+0x70>
{
return(row); //返回第一行键值00-07
2a2: 89 81 ldd r24, Y+1 ; 0x01
2a4: 99 27 eor r25, r25
2a6: 9b 83 std Y+3, r25 ; 0x03
2a8: 8a 83 std Y+2, r24 ; 0x02
2aa: 08 c0 rjmp .+16 ; 0x2bc <key+0x80>
2ac: 89 81 ldd r24, Y+1 ; 0x01
2ae: 8f 5f subi r24, 0xFF ; 255
2b0: 89 83 std Y+1, r24 ; 0x01
2b2: cf cf rjmp .-98 ; 0x252 <key+0x16>
}
}
return(9);
2b4: 89 e0 ldi r24, 0x09 ; 9
2b6: 90 e0 ldi r25, 0x00 ; 0
2b8: 9b 83 std Y+3, r25 ; 0x03
2ba: 8a 83 std Y+2, r24 ; 0x02
}
2bc: 8a 81 ldd r24, Y+2 ; 0x02
2be: 9b 81 ldd r25, Y+3 ; 0x03
2c0: 23 96 adiw r28, 0x03 ; 3
2c2: 0f b6 in r0, 0x3f ; 63
2c4: f8 94 cli
2c6: de bf out 0x3e, r29 ; 62
2c8: 0f be out 0x3f, r0 ; 63
2ca: cd bf out 0x3d, r28 ; 61
2cc: df 91 pop r29
2ce: cf 91 pop r28
2d0: 08 95 ret
000002d2 <LCM1602Init>:
------------------------------------------------------------------------------------------ */
//1602液晶初始化
void LCM1602Init(void )
{
2d2: cf 93 push r28
2d4: df 93 push r29
2d6: cd b7 in r28, 0x3d ; 61
2d8: de b7 in r29, 0x3e ; 62
2da: 2c 97 sbiw r28, 0x0c ; 12
2dc: 0f b6 in r0, 0x3f ; 63
2de: f8 94 cli
2e0: de bf out 0x3e, r29 ; 62
2e2: 0f be out 0x3f, r0 ; 63
2e4: cd bf out 0x3d, r28 ; 61
RS_DDR|=(1<<RS_PIN);
2e6: 80 91 31 00 lds r24, 0x0031
2ea: 80 61 ori r24, 0x10 ; 16
2ec: 80 93 31 00 sts 0x0031, r24
RW_DDR|=(1<<RW_PIN);
2f0: 80 91 31 00 lds r24, 0x0031
2f4: 80 62 ori r24, 0x20 ; 32
2f6: 80 93 31 00 sts 0x0031, r24
E_DDR|=(1<<E_PIN);
2fa: 80 91 31 00 lds r24, 0x0031
2fe: 80 68 ori r24, 0x80 ; 128
300: 80 93 31 00 sts 0x0031, r24
DB_OUT; //PB设为输出
304: 8f ef ldi r24, 0xFF ; 255
306: 80 93 37 00 sts 0x0037, r24
DB_PORT = 0x00;
30a: 10 92 38 00 sts 0x0038, r1
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
30e: 80 e0 ldi r24, 0x00 ; 0
310: 90 e0 ldi r25, 0x00 ; 0
312: a0 e7 ldi r26, 0x70 ; 112
314: b1 e4 ldi r27, 0x41 ; 65
316: 89 83 std Y+1, r24 ; 0x01
318: 9a 83 std Y+2, r25 ; 0x02
31a: ab 83 std Y+3, r26 ; 0x03
31c: bc 83 std Y+4, r27 ; 0x04
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
31e: 26 e6 ldi r18, 0x66 ; 102
320: 36 e6 ldi r19, 0x66 ; 102
322: 46 ee ldi r20, 0xE6 ; 230
324: 54 e4 ldi r21, 0x44 ; 68
326: 69 81 ldd r22, Y+1 ; 0x01
328: 7a 81 ldd r23, Y+2 ; 0x02
32a: 8b 81 ldd r24, Y+3 ; 0x03
32c: 9c 81 ldd r25, Y+4 ; 0x04
32e: 0e 94 0e 07 call 0xe1c <__mulsf3>
332: dc 01 movw r26, r24
334: cb 01 movw r24, r22
336: 8f 83 std Y+7, r24 ; 0x07
338: 98 87 std Y+8, r25 ; 0x08
33a: a9 87 std Y+9, r26 ; 0x09
33c: ba 87 std Y+10, r27 ; 0x0a
if (__tmp < 1.0)
33e: 20 e0 ldi r18, 0x00 ; 0
340: 30 e0 ldi r19, 0x00 ; 0
342: 40 e8 ldi r20, 0x80 ; 128
344: 5f e3 ldi r21, 0x3F ; 63
346: 6f 81 ldd r22, Y+7 ; 0x07
348: 78 85 ldd r23, Y+8 ; 0x08
34a: 89 85 ldd r24, Y+9 ; 0x09
34c: 9a 85 ldd r25, Y+10 ; 0x0a
34e: 0e 94 be 06 call 0xd7c <__eqsf2>
352: 88 23 and r24, r24
354: 0c f0 brlt .+2 ; 0x358 <LCM1602Init+0x86>
356: 05 c0 rjmp .+10 ; 0x362 <LCM1602Init+0x90>
__ticks = 1;
358: 81 e0 ldi r24, 0x01 ; 1
35a: 90 e0 ldi r25, 0x00 ; 0
35c: 9e 83 std Y+6, r25 ; 0x06
35e: 8d 83 std Y+5, r24 ; 0x05
360: 1a c0 rjmp .+52 ; 0x396 <LCM1602Init+0xc4>
else if (__tmp > 65535)
362: 20 e0 ldi r18, 0x00 ; 0
364: 3f ef ldi r19, 0xFF ; 255
366: 4f e7 ldi r20, 0x7F ; 127
368: 57 e4 ldi r21, 0x47 ; 71
36a: 6f 81 ldd r22, Y+7 ; 0x07
36c: 78 85 ldd r23, Y+8 ; 0x08
36e: 89 85 ldd r24, Y+9 ; 0x09
370: 9a 85 ldd r25, Y+10 ; 0x0a
372: 0e 94 c1 06 call 0xd82 <__gesf2>
376: 18 16 cp r1, r24
378: 0c f0 brlt .+2 ; 0x37c <LCM1602Init+0xaa>
37a: 03 c0 rjmp .+6 ; 0x382 <LCM1602Init+0xb0>
__ticks = 0; /* i.e. 65536 */
37c: 1e 82 std Y+6, r1 ; 0x06
37e: 1d 82 std Y+5, r1 ; 0x05
380: 0a c0 rjmp .+20 ; 0x396 <LCM1602Init+0xc4>
else
__ticks = (uint16_t)__tmp;
382: 6f 81 ldd r22, Y+7 ; 0x07
384: 78 85 ldd r23, Y+8 ; 0x08
386: 89 85 ldd r24, Y+9 ; 0x09
388: 9a 85 ldd r25, Y+10 ; 0x0a
38a: 0e 94 a3 06 call 0xd46 <__fixsfsi>
38e: dc 01 movw r26, r24
390: cb 01 movw r24, r22
392: 9e 83 std Y+6, r25 ; 0x06
394: 8d 83 std Y+5, r24 ; 0x05
396: 8d 81 ldd r24, Y+5 ; 0x05
398: 9e 81 ldd r25, Y+6 ; 0x06
39a: 9c 87 std Y+12, r25 ; 0x0c
39c: 8b 87 std Y+11, r24 ; 0x0b
39e: 8b 85 ldd r24, Y+11 ; 0x0b
3a0: 9c 85 ldd r25, Y+12 ; 0x0c
3a2: 01 97 sbiw r24, 0x01 ; 1
3a4: f1 f7 brne .-4 ; 0x3a2 <LCM1602Init+0xd0>
3a6: 9c 87 std Y+12, r25 ; 0x0c
3a8: 8b 87 std Y+11, r24 ; 0x0b
_delay_ms(15);
LCM1602WriteCommand(0x38,0); //设定LCD为16×2显示,5×7点阵,8位数据接口,不检测忙信号
3aa: 60 e0 ldi r22, 0x00 ; 0
3ac: 88 e3 ldi r24, 0x38 ; 56
3ae: 0e 94 10 03 call 0x620 <LCM1602WriteCommand>
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
3b2: 80 e0 ldi r24, 0x00 ; 0
3b4: 90 e0 ldi r25, 0x00 ; 0
3b6: a0 ea ldi r26, 0xA0 ; 160
3b8: b0 e4 ldi r27, 0x40 ; 64
3ba: 8f 83 std Y+7, r24 ; 0x07
3bc: 98 87 std Y+8, r25 ; 0x08
3be: a9 87 std Y+9, r26 ; 0x09
3c0: ba 87 std Y+10, r27 ; 0x0a
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
3c2: 26 e6 ldi r18, 0x66 ; 102
3c4: 36 e6 ldi r19, 0x66 ; 102
3c6: 46 ee ldi r20, 0xE6 ; 230
3c8: 54 e4 ldi r21, 0x44 ; 68
3ca: 6f 81 ldd r22, Y+7 ; 0x07
3cc: 78 85 ldd r23, Y+8 ; 0x08
3ce: 89 85 ldd r24, Y+9 ; 0x09
3d0: 9a 85 ldd r25, Y+10 ; 0x0a
3d2: 0e 94 0e 07 call 0xe1c <__mulsf3>
3d6: dc 01 movw r26, r24
3d8: cb 01 movw r24, r22
3da: 89 83 std Y+1, r24 ; 0x01
3dc: 9a 83 std Y+2, r25 ; 0x02
3de: ab 83 std Y+3, r26 ; 0x03
3e0: bc 83 std Y+4, r27 ; 0x04
if (__tmp < 1.0)
3e2: 20 e0 ldi r18, 0x00 ; 0
3e4: 30 e0 ldi r19, 0x00 ; 0
3e6: 40 e8 ldi r20, 0x80 ; 128
3e8: 5f e3 ldi r21, 0x3F ; 63
3ea: 69 81 ldd r22, Y+1 ; 0x01
3ec: 7a 81 ldd r23, Y+2 ; 0x02
3ee: 8b 81 ldd r24, Y+3 ; 0x03
3f0: 9c 81 ldd r25, Y+4 ; 0x04
3f2: 0e 94 be 06 call 0xd7c <__eqsf2>
3f6: 88 23 and r24, r24
3f8: 0c f0 brlt .+2 ; 0x3fc <LCM1602Init+0x12a>
3fa: 05 c0 rjmp .+10 ; 0x406 <LCM1602Init+0x134>
__ticks = 1;
3fc: 81 e0 ldi r24, 0x01 ; 1
3fe: 90 e0 ldi r25, 0x00 ; 0
400: 9c 87 std Y+12, r25 ; 0x0c
402: 8b 87 std Y+11, r24 ; 0x0b
404: 1a c0 rjmp .+52 ; 0x43a <LCM1602Init+0x168>
else if (__tmp > 65535)
406: 20 e0 ldi r18, 0x00 ; 0
408: 3f ef ldi r19, 0xFF ; 255
40a: 4f e7 ldi r20, 0x7F ; 127
40c: 57 e4 ldi r21, 0x47 ; 71
40e: 69 81 ldd r22, Y+1 ; 0x01
410: 7a 81 ldd r23, Y+2 ; 0x02
412: 8b 81 ldd r24, Y+3 ; 0x03
414: 9c 81 ldd r25, Y+4 ; 0x04
416: 0e 94 c1 06 call 0xd82 <__gesf2>
41a: 18 16 cp r1, r24
41c: 0c f0 brlt .+2 ; 0x420 <LCM1602Init+0x14e>
41e: 03 c0 rjmp .+6 ; 0x426 <LCM1602Init+0x154>
__ticks = 0; /* i.e. 65536 */
420: 1c 86 std Y+12, r1 ; 0x0c
422: 1b 86 std Y+11, r1 ; 0x0b
424: 0a c0 rjmp .+20 ; 0x43a <LCM1602Init+0x168>
else
__ticks = (uint16_t)__tmp;
426: 69 81 ldd r22, Y+1 ; 0x01
428: 7a 81 ldd r23, Y+2 ; 0x02
42a: 8b 81 ldd r24, Y+3 ; 0x03
42c: 9c 81 ldd r25, Y+4 ; 0x04
42e: 0e 94 a3 06 call 0xd46 <__fixsfsi>
432: dc 01 movw r26, r24
434: cb 01 movw r24, r22
436: 9c 87 std Y+12, r25 ; 0x0c
438: 8b 87 std Y+11, r24 ; 0x0b
43a: 8b 85 ldd r24, Y+11 ; 0x0b
43c: 9c 85 ldd r25, Y+12 ; 0x0c
43e: 9e 83 std Y+6, r25 ; 0x06
440: 8d 83 std Y+5, r24 ; 0x05
442: 8d 81 ldd r24, Y+5 ; 0x05
444: 9e 81 ldd r25, Y+6 ; 0x06
446: 01 97 sbiw r24, 0x01 ; 1
448: f1 f7 brne .-4 ; 0x446 <LCM1602Init+0x174>
44a: 9e 83 std Y+6, r25 ; 0x06
44c: 8d 83 std Y+5, r24 ; 0x05
_delay_ms(5);
LCM1602WriteCommand(0x38,0);
44e: 60 e0 ldi r22, 0x00 ; 0
450: 88 e3 ldi r24, 0x38 ; 56
452: 0e 94 10 03 call 0x620 <LCM1602WriteCommand>
The maximal possible delay is 262.14 ms / F_CPU in MHz.
*/
void
_delay_ms(double __ms)
{
456: 80 e0 ldi r24, 0x00 ; 0
458: 90 e0 ldi r25, 0x00 ; 0
45a: a0 ea ldi r26, 0xA0 ; 160
45c: b0 e4 ldi r27, 0x40 ; 64
45e: 8f 83 std Y+7, r24 ; 0x07
460: 98 87 std Y+8, r25 ; 0x08
462: a9 87 std Y+9, r26 ; 0x09
464: ba 87 std Y+10, r27 ; 0x0a
uint16_t __ticks;
double __tmp = ((F_CPU) / 4e3) * __ms;
466: 26 e6 ldi r18, 0x66 ; 102
468: 36 e6 ldi r19, 0x66 ; 102
46a: 46 ee ldi r20, 0xE6 ; 230
46c: 54 e4 ldi r21, 0x44 ; 68
46e: 6f 81 ldd r22, Y+7 ; 0x07
470: 78 85 ldd r23, Y+8 ; 0x08
472: 89 85 ldd r24, Y+9 ; 0x09
474: 9a 85 ldd r25, Y+10 ; 0x0a
476: 0e 94 0e 07 call 0xe1c <__mulsf3>
47a: dc 01 movw r26, r24
47c: cb 01 movw r24, r22
47e: 89 83 std Y+1, r24 ; 0x01
480: 9a 83 std Y+2, r25 ; 0x02
482: ab 83 std Y+3, r26 ; 0x03
484: bc 83 std Y+4, r27 ; 0x04
if (__tmp < 1.0)
486: 20 e0 ldi r18, 0x00 ; 0
488: 30 e0 ldi r19, 0x00 ; 0
48a: 40 e8 ldi r20, 0x80 ; 128
48c: 5f e3 ldi r21, 0x3F ; 63
48e: 69 81 ldd r22, Y+1 ; 0x01
490: 7a 81 ldd r23, Y+2 ; 0x02
492: 8b 81 ldd r24, Y+3 ; 0x03
494: 9c 81 ldd r25, Y+4 ; 0x04
496: 0e 94 be 06 call 0xd7c <__eqsf2>
49a: 88 23 and r24, r24
49c: 0c f0 brlt .+2 ; 0x4a0 <__stack+0x41>
49e: 05 c0 rjmp .+10 ; 0x4aa <__stack+0x4b>
__ticks = 1;
4a0: 81 e0 ldi r24, 0x01 ; 1
4a2: 90 e0 ldi r25, 0x00 ; 0
4a4: 9c 87 std Y+12, r25 ; 0x0c
4a6: 8b 87 std Y+11, r24 ; 0x0b
4a8: 1a c0 rjmp .+52 ; 0x4de <__stack+0x7f>
else if (__tmp > 65535)
4aa: 20 e0 ldi r18, 0x00 ; 0
4ac: 3f ef ldi r19, 0xFF ; 255
4ae: 4f e7 ldi r20, 0x7F ; 127
4b0: 57 e4 ldi r21, 0x47 ; 71
4b2: 69 81 ldd r22, Y+1 ; 0x01
4b4: 7a 81 ldd r23, Y+2 ; 0x02
4b6: 8b 81 ldd r24, Y+3 ; 0x03
4b8: 9c 81 ldd r25, Y+4 ; 0x04
4ba: 0e 94 c1 06 call 0xd82 <__gesf2>
4be: 18 16 cp r1, r24
4c0: 0c f0 brlt .+2 ; 0x4c4 <__stack+0x65>
4c2: 03 c0 rjmp .+6 ; 0x4ca <__stack+0x6b>
__ticks = 0; /* i.e. 65536 */
4c4: 1c 86 std Y+12, r1 ; 0x0c
4c6: 1b 86 std Y+11, r1 ; 0x0b
4c8: 0a c0 rjmp .+20 ; 0x4de <__stack+0x7f>
else
__ticks = (uint16_t)__tmp;
4ca: 69 81 ldd r22, Y+1 ; 0x01
4cc: 7a 81 ldd r23, Y+2 ; 0x02
4ce: 8b 81 ldd r24, Y+3 ; 0x03
4d0: 9c 81 ldd r25, Y+4 ; 0x04
4d2: 0e 94 a3 06 call 0xd46 <__fixsfsi>
4d6: dc 01 movw r26, r24
4d8: cb 01 movw r24, r22
4da: 9c 87 std Y+12, r25 ; 0x0c
4dc: 8b 87 std Y+11, r24 ; 0x0b
4de: 8b 85 ldd r24, Y+11 ; 0x0b
4e0: 9c 85 ldd r25, Y+12 ; 0x0c
4e2: 9e 83 std Y+6, r25 ; 0x06
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?