⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ps2_lcm1602.lss

📁 WINAVR编写的PS2键盘驱动
💻 LSS
📖 第 1 页 / 共 5 页
字号:
     1fe:	28 2f       	mov	r18, r24
     200:	33 27       	eor	r19, r19
     202:	3c 83       	std	Y+4, r19	; 0x04
     204:	2b 83       	std	Y+3, r18	; 0x03
     206:	8b 81       	ldd	r24, Y+3	; 0x03
     208:	9c 81       	ldd	r25, Y+4	; 0x04
     20a:	82 31       	cpi	r24, 0x12	; 18
     20c:	91 05       	cpc	r25, r1
     20e:	d1 f0       	breq	.+52     	; 0x244 <decode+0x68>
     210:	2b 81       	ldd	r18, Y+3	; 0x03
     212:	3c 81       	ldd	r19, Y+4	; 0x04
     214:	23 31       	cpi	r18, 0x13	; 19
     216:	31 05       	cpc	r19, r1
     218:	34 f4       	brge	.+12     	; 0x226 <decode+0x4a>
     21a:	8b 81       	ldd	r24, Y+3	; 0x03
     21c:	9c 81       	ldd	r25, Y+4	; 0x04
     21e:	85 30       	cpi	r24, 0x05	; 5
     220:	91 05       	cpc	r25, r1
     222:	c1 f0       	breq	.+48     	; 0x254 <decode+0x78>
     224:	27 c0       	rjmp	.+78     	; 0x274 <decode+0x98>
     226:	2b 81       	ldd	r18, Y+3	; 0x03
     228:	3c 81       	ldd	r19, Y+4	; 0x04
     22a:	29 35       	cpi	r18, 0x59	; 89
     22c:	31 05       	cpc	r19, r1
     22e:	71 f0       	breq	.+28     	; 0x24c <decode+0x70>
     230:	8b 81       	ldd	r24, Y+3	; 0x03
     232:	9c 81       	ldd	r25, Y+4	; 0x04
     234:	80 3f       	cpi	r24, 0xF0	; 240
     236:	91 05       	cpc	r25, r1
     238:	09 f0       	breq	.+2      	; 0x23c <decode+0x60>
     23a:	1c c0       	rjmp	.+56     	; 0x274 <decode+0x98>
        {
          case 0xF0 :        // The up-key identifier
            is_up = 1;
     23c:	81 e0       	ldi	r24, 0x01	; 1
     23e:	80 93 87 01 	sts	0x0187, r24
            break;
     242:	ce c0       	rjmp	.+412    	; 0x3e0 <decode+0x204>

          case 0x12 :        // Left SHIFT
            shift = 1;
     244:	81 e0       	ldi	r24, 0x01	; 1
     246:	80 93 88 01 	sts	0x0188, r24
            break;
     24a:	ca c0       	rjmp	.+404    	; 0x3e0 <decode+0x204>

          case 0x59 :        // Right SHIFT
            shift = 1;
     24c:	81 e0       	ldi	r24, 0x01	; 1
     24e:	80 93 88 01 	sts	0x0188, r24
            break;
     252:	c6 c0       	rjmp	.+396    	; 0x3e0 <decode+0x204>

          case 0x05 :        // F1
            if(mode == 0)
     254:	80 91 89 01 	lds	r24, 0x0189
     258:	88 23       	and	r24, r24
     25a:	19 f4       	brne	.+6      	; 0x262 <decode+0x86>
                mode = 1;    // Enter scan code mode
     25c:	81 e0       	ldi	r24, 0x01	; 1
     25e:	80 93 89 01 	sts	0x0189, r24
            if(mode == 2)
     262:	80 91 89 01 	lds	r24, 0x0189
     266:	82 30       	cpi	r24, 0x02	; 2
     268:	09 f0       	breq	.+2      	; 0x26c <decode+0x90>
     26a:	ba c0       	rjmp	.+372    	; 0x3e0 <decode+0x204>
                mode = 3;    // Leave scan code mode
     26c:	83 e0       	ldi	r24, 0x03	; 3
     26e:	80 93 89 01 	sts	0x0189, r24
            break;
     272:	b6 c0       	rjmp	.+364    	; 0x3e0 <decode+0x204>

          default:
            if(mode == 0 || mode == 3)        // If ASCII mode
     274:	80 91 89 01 	lds	r24, 0x0189
     278:	88 23       	and	r24, r24
     27a:	29 f0       	breq	.+10     	; 0x286 <decode+0xaa>
     27c:	80 91 89 01 	lds	r24, 0x0189
     280:	83 30       	cpi	r24, 0x03	; 3
     282:	09 f0       	breq	.+2      	; 0x286 <decode+0xaa>
     284:	76 c0       	rjmp	.+236    	; 0x372 <decode+0x196>
            {
                if(!shift)                    //  识别有没有按下shift键
     286:	80 91 88 01 	lds	r24, 0x0188
     28a:	88 23       	and	r24, r24
     28c:	c9 f5       	brne	.+114    	; 0x300 <decode+0x124>
                {                            // for语句又于寻找键盘码
                    for(i = 0; unshifted[i][0]!=sc && unshifted[i][0]; i++);//输出没按shift键的码
     28e:	1a 82       	std	Y+2, r1	; 0x02
     290:	8a 81       	ldd	r24, Y+2	; 0x02
     292:	28 2f       	mov	r18, r24
     294:	33 27       	eor	r19, r19
     296:	c9 01       	movw	r24, r18
     298:	82 0f       	add	r24, r18
     29a:	93 1f       	adc	r25, r19
     29c:	fc 01       	movw	r30, r24
     29e:	ea 58       	subi	r30, 0x8A	; 138
     2a0:	ff 4f       	sbci	r31, 0xFF	; 255
     2a2:	90 81       	ld	r25, Z
     2a4:	89 81       	ldd	r24, Y+1	; 0x01
     2a6:	98 17       	cp	r25, r24
     2a8:	81 f0       	breq	.+32     	; 0x2ca <decode+0xee>
     2aa:	8a 81       	ldd	r24, Y+2	; 0x02
     2ac:	28 2f       	mov	r18, r24
     2ae:	33 27       	eor	r19, r19
     2b0:	c9 01       	movw	r24, r18
     2b2:	82 0f       	add	r24, r18
     2b4:	93 1f       	adc	r25, r19
     2b6:	fc 01       	movw	r30, r24
     2b8:	ea 58       	subi	r30, 0x8A	; 138
     2ba:	ff 4f       	sbci	r31, 0xFF	; 255
     2bc:	80 81       	ld	r24, Z
     2be:	88 23       	and	r24, r24
     2c0:	21 f0       	breq	.+8      	; 0x2ca <decode+0xee>
     2c2:	8a 81       	ldd	r24, Y+2	; 0x02
     2c4:	8f 5f       	subi	r24, 0xFF	; 255
     2c6:	8a 83       	std	Y+2, r24	; 0x02
     2c8:	e3 cf       	rjmp	.-58     	; 0x290 <decode+0xb4>
                    if (unshifted[i][0] == sc) {
     2ca:	8a 81       	ldd	r24, Y+2	; 0x02
     2cc:	28 2f       	mov	r18, r24
     2ce:	33 27       	eor	r19, r19
     2d0:	c9 01       	movw	r24, r18
     2d2:	82 0f       	add	r24, r18
     2d4:	93 1f       	adc	r25, r19
     2d6:	fc 01       	movw	r30, r24
     2d8:	ea 58       	subi	r30, 0x8A	; 138
     2da:	ff 4f       	sbci	r31, 0xFF	; 255
     2dc:	90 81       	ld	r25, Z
     2de:	89 81       	ldd	r24, Y+1	; 0x01
     2e0:	98 17       	cp	r25, r24
     2e2:	09 f0       	breq	.+2      	; 0x2e6 <decode+0x10a>
     2e4:	7d c0       	rjmp	.+250    	; 0x3e0 <decode+0x204>
                        put_kbbuff(unshifted[i][1]);
     2e6:	8a 81       	ldd	r24, Y+2	; 0x02
     2e8:	28 2f       	mov	r18, r24
     2ea:	33 27       	eor	r19, r19
     2ec:	c9 01       	movw	r24, r18
     2ee:	82 0f       	add	r24, r18
     2f0:	93 1f       	adc	r25, r19
     2f2:	fc 01       	movw	r30, r24
     2f4:	e9 58       	subi	r30, 0x89	; 137
     2f6:	ff 4f       	sbci	r31, 0xFF	; 255
     2f8:	80 81       	ld	r24, Z
     2fa:	0e 94 f9 01 	call	0x3f2 <put_kbbuff>
     2fe:	70 c0       	rjmp	.+224    	; 0x3e0 <decode+0x204>
                    }
                } else {                    // If shift pressed
                    for(i = 0; shifted[i][0]!=sc && shifted[i][0]; i++);//输出按下shift键的码
     300:	1a 82       	std	Y+2, r1	; 0x02
     302:	8a 81       	ldd	r24, Y+2	; 0x02
     304:	28 2f       	mov	r18, r24
     306:	33 27       	eor	r19, r19
     308:	c9 01       	movw	r24, r18
     30a:	82 0f       	add	r24, r18
     30c:	93 1f       	adc	r25, r19
     30e:	fc 01       	movw	r30, r24
     310:	e2 50       	subi	r30, 0x02	; 2
     312:	ff 4f       	sbci	r31, 0xFF	; 255
     314:	90 81       	ld	r25, Z
     316:	89 81       	ldd	r24, Y+1	; 0x01
     318:	98 17       	cp	r25, r24
     31a:	81 f0       	breq	.+32     	; 0x33c <decode+0x160>
     31c:	8a 81       	ldd	r24, Y+2	; 0x02
     31e:	28 2f       	mov	r18, r24
     320:	33 27       	eor	r19, r19
     322:	c9 01       	movw	r24, r18
     324:	82 0f       	add	r24, r18
     326:	93 1f       	adc	r25, r19
     328:	fc 01       	movw	r30, r24
     32a:	e2 50       	subi	r30, 0x02	; 2
     32c:	ff 4f       	sbci	r31, 0xFF	; 255
     32e:	80 81       	ld	r24, Z
     330:	88 23       	and	r24, r24
     332:	21 f0       	breq	.+8      	; 0x33c <decode+0x160>
     334:	8a 81       	ldd	r24, Y+2	; 0x02
     336:	8f 5f       	subi	r24, 0xFF	; 255
     338:	8a 83       	std	Y+2, r24	; 0x02
     33a:	e3 cf       	rjmp	.-58     	; 0x302 <decode+0x126>
                    if (shifted[i][0] == sc) {
     33c:	8a 81       	ldd	r24, Y+2	; 0x02
     33e:	28 2f       	mov	r18, r24
     340:	33 27       	eor	r19, r19
     342:	c9 01       	movw	r24, r18
     344:	82 0f       	add	r24, r18
     346:	93 1f       	adc	r25, r19
     348:	fc 01       	movw	r30, r24
     34a:	e2 50       	subi	r30, 0x02	; 2
     34c:	ff 4f       	sbci	r31, 0xFF	; 255
     34e:	90 81       	ld	r25, Z
     350:	89 81       	ldd	r24, Y+1	; 0x01
     352:	98 17       	cp	r25, r24
     354:	09 f0       	breq	.+2      	; 0x358 <decode+0x17c>
     356:	44 c0       	rjmp	.+136    	; 0x3e0 <decode+0x204>
                        put_kbbuff(shifted[i][1]);
     358:	8a 81       	ldd	r24, Y+2	; 0x02
     35a:	28 2f       	mov	r18, r24
     35c:	33 27       	eor	r19, r19
     35e:	c9 01       	movw	r24, r18
     360:	82 0f       	add	r24, r18
     362:	93 1f       	adc	r25, r19
     364:	fc 01       	movw	r30, r24
     366:	e1 50       	subi	r30, 0x01	; 1
     368:	ff 4f       	sbci	r31, 0xFF	; 255
     36a:	80 81       	ld	r24, Z
     36c:	0e 94 f9 01 	call	0x3f2 <put_kbbuff>
     370:	37 c0       	rjmp	.+110    	; 0x3e0 <decode+0x204>
                    }
                }
            } 
			else{                                   // Scan code mode
                print_hexbyte(sc);            // Print scan code
     372:	89 81       	ldd	r24, Y+1	; 0x01
     374:	0e 94 6f 02 	call	0x4de <print_hexbyte>
                put_kbbuff(' ');
     378:	80 e2       	ldi	r24, 0x20	; 32
     37a:	0e 94 f9 01 	call	0x3f2 <put_kbbuff>

            }
            break;
     37e:	30 c0       	rjmp	.+96     	; 0x3e0 <decode+0x204>
        }
    } else {
        is_up = 0;                            // Two 0xF0 in a row not allowed
     380:	10 92 87 01 	sts	0x0187, r1
        switch (sc)
     384:	89 81       	ldd	r24, Y+1	; 0x01
     386:	28 2f       	mov	r18, r24
     388:	33 27       	eor	r19, r19
     38a:	3e 83       	std	Y+6, r19	; 0x06
     38c:	2d 83       	std	Y+5, r18	; 0x05
     38e:	8d 81       	ldd	r24, Y+5	; 0x05
     390:	9e 81       	ldd	r25, Y+6	; 0x06
     392:	82 31       	cpi	r24, 0x12	; 18
     394:	91 05       	cpc	r25, r1
     396:	89 f0       	breq	.+34     	; 0x3ba <decode+0x1de>
     398:	2d 81       	ldd	r18, Y+5	; 0x05
     39a:	3e 81       	ldd	r19, Y+6	; 0x06
     39c:	23 31       	cpi	r18, 0x13	; 19
     39e:	31 05       	cpc	r19, r1
     3a0:	34 f4       	brge	.+12     	; 0x3ae <decode+0x1d2>
     3a2:	8d 81       	ldd	r24, Y+5	; 0x05
     3a4:	9e 81       	ldd	r25, Y+6	; 0x06
     3a6:	85 30       	cpi	r24, 0x05	; 5
     3a8:	91 05       	cpc	r25, r1
     3aa:	69 f0       	breq	.+26     	; 0x3c6 <decode+0x1ea>
     3ac:	19 c0       	rjmp	.+50     	; 0x3e0 <decode+0x204>
     3ae:	2d 81       	ldd	r18, Y+5	; 0x05
     3b0:	3e 81       	ldd	r19, Y+6	; 0x06
     3b2:	29 35       	cpi	r18, 0x59	; 89
     3b4:	31 05       	cpc	r19, r1
     3b6:	21 f0       	breq	.+8      	; 0x3c0 <decode+0x1e4>
     3b8:	13 c0       	rjmp	.+38     	; 0x3e0 <decode+0x204>
        {
          case 0x12 :                        // Left SHIFT
            shift = 0;
     3ba:	10 92 88 01 	sts	0x0188, r1
            break;
     3be:	10 c0       	rjmp	.+32     	; 0x3e0 <decode+0x204>
            
          case 0x59 :                        // Right SHIFT
            shift = 0;
     3c0:	10 92 88 01 	sts	0x0188, r1
            break;
     3c4:	0d c0       	rjmp	.+26     	; 0x3e0 <decode+0x204>

          case 0x05 :                        // F1
            if(mode == 1)
     3c6:	80 91 89 01 	lds	r24, 0x0189
     3ca:	81 30       	cpi	r24, 0x01	; 1
     3cc:	19 f4       	brne	.+6      	; 0x3d4 <decode+0x1f8>
                mode = 2;
     3ce:	82 e0       	ldi	r24, 0x02	; 2
     3d0:	80 93 89 01 	sts	0x0189, r24
            if(mode == 3)
     3d4:	80 91 89 01 	lds	r24, 0x0189
     3d8:	83 30       	cpi	r24, 0x03	; 3
     3da:	11 f4       	brne	.+4      	; 0x3e0 <decode+0x204>
                mode = 0;
     3dc:	10 92 89 01 	sts	0x0189, r1
     3e0:	26 96       	adiw	r28, 0x06	; 6
     3e2:	0f b6       	in	r0, 0x3f	; 63
     3e4:	f8 94       	cli
     3e6:	de bf       	out	0x3e, r29	; 62
     3e8:	0f be       	out	0x3f, r0	; 63
     3ea:	cd bf       	out	0x3d, r28	; 61
     3ec:	df 91       	pop	r29
     3ee:	cf 91       	pop	r28
     3f0:	08 95       	ret

000003f2 <put_kbbuff>:
            break;
          case 0x06 :                        // F2
            break;  
            
        } 
    }    
} 


/*-----------------------------------------------------------
put_kbbuff    :键码保存到缓冲区
输入参数 c    :经解码所得键码数据
输出参数      :无
作者          :ken
日期          :2007-8-18
------------------------------------------------------------*/ 
void put_kbbuff(unsigned char c)
{
     3f2:	cf 93       	push	r28
     3f4:	df 93       	push	r29
     3f6:	cd b7       	in	r28, 0x3d	; 61
     3f8:	de b7       	in	r29, 0x3e	; 62
     3fa:	21 97       	sbiw	r28, 0x01	; 1
     3fc:	0f b6       	in	r0, 0x3f	; 63
     3fe:	f8 94       	cli
     400:	de bf       	out	0x3e, r29	; 62
     402:	0f be       	out	0x3f, r0	; 63
     404:	cd bf       	out	0x3d, r28	; 61
     406:	89 83       	std	Y+1, r24	; 0x01
    if (buffcnt<BUFF_SIZE)                        // If buffer not full
     408:	80 91 d7 01 	lds	r24, 0x01D7
     40c:	80 34       	cpi	r24, 0x40	; 64
     40e:	10 f5       	brcc	.+68     	; 0x454 <put_kbbuff+0x62>
    {
        *inpt = c;                                // Put character into buffer
     410:	e0 91 91 01 	lds	r30, 0x0191
     414:	f0 91 92 01 	lds	r31, 0x0192
     418:	89 81       	ldd	r24, Y+1	; 0x01
     41a:	80 83       	st	Z, r24
        inpt++;                                    // Increment pointer
     41c:	80 91 91 01 	lds	r24, 0x0191
     420:	90 91 92 01 	lds	r25, 0x0192
     424:	01 96       	adiw	r24, 0x01	; 1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -