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 + -
显示快捷键?