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

📄 2x8_key.lss

📁 WINAVR写的2x8键盘扫描程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
 9c6:	01 96       	adiw	r24, 0x01	; 1
 9c8:	48 17       	cp	r20, r24
 9ca:	59 07       	cpc	r21, r25
 9cc:	fc f4       	brge	.+62     	; 0xa0c <RunString+0x212>
		{
			Screen[a] = String[Point];
 9ce:	88 8d       	ldd	r24, Y+24	; 0x18
 9d0:	28 2f       	mov	r18, r24
 9d2:	33 27       	eor	r19, r19
 9d4:	ce 01       	movw	r24, r28
 9d6:	01 96       	adiw	r24, 0x01	; 1
 9d8:	82 0f       	add	r24, r18
 9da:	93 1f       	adc	r25, r19
 9dc:	dc 01       	movw	r26, r24
 9de:	16 96       	adiw	r26, 0x06	; 6
 9e0:	89 8d       	ldd	r24, Y+25	; 0x19
 9e2:	28 2f       	mov	r18, r24
 9e4:	33 27       	eor	r19, r19
 9e6:	89 81       	ldd	r24, Y+1	; 0x01
 9e8:	9a 81       	ldd	r25, Y+2	; 0x02
 9ea:	f9 01       	movw	r30, r18
 9ec:	e8 0f       	add	r30, r24
 9ee:	f9 1f       	adc	r31, r25
 9f0:	80 81       	ld	r24, Z
 9f2:	8c 93       	st	X, r24
			Point ++;
 9f4:	89 8d       	ldd	r24, Y+25	; 0x19
 9f6:	8f 5f       	subi	r24, 0xFF	; 255
 9f8:	89 8f       	std	Y+25, r24	; 0x19
			if (Point == StringLong)			//如果字符串长度小于Endx-Startx+1,循环显示,类似以圆环
 9fa:	99 8d       	ldd	r25, Y+25	; 0x19
 9fc:	8a 8d       	ldd	r24, Y+26	; 0x1a
 9fe:	98 17       	cp	r25, r24
 a00:	09 f4       	brne	.+2      	; 0xa04 <RunString+0x20a>
			{									//eg.  startendstartendstartend......
				Point = 0;
 a02:	19 8e       	std	Y+25, r1	; 0x19
 a04:	88 8d       	ldd	r24, Y+24	; 0x18
 a06:	8f 5f       	subi	r24, 0xFF	; 255
 a08:	88 8f       	std	Y+24, r24	; 0x18
 a0a:	d2 cf       	rjmp	.-92     	; 0x9b0 <RunString+0x1b6>
			}
		}
			
		for (;a < 17;a++)
 a0c:	88 8d       	ldd	r24, Y+24	; 0x18
 a0e:	81 31       	cpi	r24, 0x11	; 17
 a10:	78 f4       	brcc	.+30     	; 0xa30 <RunString+0x236>
		{
			Screen[a] =' ';
 a12:	88 8d       	ldd	r24, Y+24	; 0x18
 a14:	28 2f       	mov	r18, r24
 a16:	33 27       	eor	r19, r19
 a18:	ce 01       	movw	r24, r28
 a1a:	01 96       	adiw	r24, 0x01	; 1
 a1c:	82 0f       	add	r24, r18
 a1e:	93 1f       	adc	r25, r19
 a20:	fc 01       	movw	r30, r24
 a22:	36 96       	adiw	r30, 0x06	; 6
 a24:	80 e2       	ldi	r24, 0x20	; 32
 a26:	80 83       	st	Z, r24
 a28:	88 8d       	ldd	r24, Y+24	; 0x18
 a2a:	8f 5f       	subi	r24, 0xFF	; 255
 a2c:	88 8f       	std	Y+24, r24	; 0x18
 a2e:	ee cf       	rjmp	.-36     	; 0xa0c <RunString+0x212>
		}
				
		RunTimeCounter ++;
 a30:	80 91 61 00 	lds	r24, 0x0061
 a34:	90 91 62 00 	lds	r25, 0x0062
 a38:	01 96       	adiw	r24, 0x01	; 1
 a3a:	90 93 62 00 	sts	0x0062, r25
 a3e:	80 93 61 00 	sts	0x0061, r24
		if ((RunTimeCounter % RunStringSpeed) > (RunStringSpeed >>1)	)//滚动频率为为(RunStringSpeed/2)*8ms
 a42:	80 91 61 00 	lds	r24, 0x0061
 a46:	90 91 62 00 	lds	r25, 0x0062
 a4a:	2a ef       	ldi	r18, 0xFA	; 250
 a4c:	30 e0       	ldi	r19, 0x00	; 0
 a4e:	b9 01       	movw	r22, r18
 a50:	0e 94 82 07 	call	0xf04 <__udivmodhi4>
 a54:	8e 37       	cpi	r24, 0x7E	; 126
 a56:	91 05       	cpc	r25, r1
 a58:	80 f0       	brcs	.+32     	; 0xa7a <RunString+0x280>
		{
			StringHead --;//向右滚动
 a5a:	80 91 60 00 	lds	r24, 0x0060
 a5e:	81 50       	subi	r24, 0x01	; 1
 a60:	80 93 60 00 	sts	0x0060, r24
			RunTimeCounter = 0;
 a64:	10 92 62 00 	sts	0x0062, r1
 a68:	10 92 61 00 	sts	0x0061, r1
			if (StringHead == 0xff)//因为StringHead--后变成0xff所以要调整成StringLong,字符串的最后一个字符号
 a6c:	80 91 60 00 	lds	r24, 0x0060
 a70:	8f 3f       	cpi	r24, 0xFF	; 255
 a72:	19 f4       	brne	.+6      	; 0xa7a <RunString+0x280>
			{
				StringHead = StringLong;
 a74:	8a 8d       	ldd	r24, Y+26	; 0x1a
 a76:	80 93 60 00 	sts	0x0060, r24
			}
		}
	    LCM1602Write_String(StartX,Y, Screen);
 a7a:	ce 01       	movw	r24, r28
 a7c:	07 96       	adiw	r24, 0x07	; 7
 a7e:	ac 01       	movw	r20, r24
 a80:	6d 81       	ldd	r22, Y+5	; 0x05
 a82:	8b 81       	ldd	r24, Y+3	; 0x03
 a84:	0e 94 95 03 	call	0x72a <LCM1602Write_String>
 a88:	a6 96       	adiw	r28, 0x26	; 38
 a8a:	0f b6       	in	r0, 0x3f	; 63
 a8c:	f8 94       	cli
 a8e:	de bf       	out	0x3e, r29	; 62
 a90:	0f be       	out	0x3f, r0	; 63
 a92:	cd bf       	out	0x3d, r28	; 61
 a94:	df 91       	pop	r29
 a96:	cf 91       	pop	r28
 a98:	0f 91       	pop	r16
 a9a:	08 95       	ret

00000a9c <StringLength>:
	}
}



//字符串长度测试函数               
unsigned char StringLength(uchar *String)
{
 a9c:	cf 93       	push	r28
 a9e:	df 93       	push	r29
 aa0:	cd b7       	in	r28, 0x3d	; 61
 aa2:	de b7       	in	r29, 0x3e	; 62
 aa4:	23 97       	sbiw	r28, 0x03	; 3
 aa6:	0f b6       	in	r0, 0x3f	; 63
 aa8:	f8 94       	cli
 aaa:	de bf       	out	0x3e, r29	; 62
 aac:	0f be       	out	0x3f, r0	; 63
 aae:	cd bf       	out	0x3d, r28	; 61
 ab0:	9a 83       	std	Y+2, r25	; 0x02
 ab2:	89 83       	std	Y+1, r24	; 0x01
	uchar n = 0;
 ab4:	1b 82       	std	Y+3, r1	; 0x03
	while (*String)//不到字符末尾不退出循环
 ab6:	e9 81       	ldd	r30, Y+1	; 0x01
 ab8:	fa 81       	ldd	r31, Y+2	; 0x02
 aba:	80 81       	ld	r24, Z
 abc:	88 23       	and	r24, r24
 abe:	49 f0       	breq	.+18     	; 0xad2 <StringLength+0x36>
	{
		n++;
 ac0:	8b 81       	ldd	r24, Y+3	; 0x03
 ac2:	8f 5f       	subi	r24, 0xFF	; 255
 ac4:	8b 83       	std	Y+3, r24	; 0x03
		String ++;
 ac6:	89 81       	ldd	r24, Y+1	; 0x01
 ac8:	9a 81       	ldd	r25, Y+2	; 0x02
 aca:	01 96       	adiw	r24, 0x01	; 1
 acc:	9a 83       	std	Y+2, r25	; 0x02
 ace:	89 83       	std	Y+1, r24	; 0x01
 ad0:	f2 cf       	rjmp	.-28     	; 0xab6 <StringLength+0x1a>
	}	
	return n;
 ad2:	8b 81       	ldd	r24, Y+3	; 0x03
 ad4:	99 27       	eor	r25, r25
 ad6:	23 96       	adiw	r28, 0x03	; 3
 ad8:	0f b6       	in	r0, 0x3f	; 63
 ada:	f8 94       	cli
 adc:	de bf       	out	0x3e, r29	; 62
 ade:	0f be       	out	0x3f, r0	; 63
 ae0:	cd bf       	out	0x3d, r28	; 61
 ae2:	df 91       	pop	r29
 ae4:	cf 91       	pop	r28
 ae6:	08 95       	ret

00000ae8 <Flash>:
}



//闪烁显示函数                               
void Flash(uchar *String,uchar *Icon,uchar X,uchar Y)
{
 ae8:	cf 93       	push	r28
 aea:	df 93       	push	r29
 aec:	cd b7       	in	r28, 0x3d	; 61
 aee:	de b7       	in	r29, 0x3e	; 62
 af0:	62 97       	sbiw	r28, 0x12	; 18
 af2:	0f b6       	in	r0, 0x3f	; 63
 af4:	f8 94       	cli
 af6:	de bf       	out	0x3e, r29	; 62
 af8:	0f be       	out	0x3f, r0	; 63
 afa:	cd bf       	out	0x3d, r28	; 61
 afc:	9a 83       	std	Y+2, r25	; 0x02
 afe:	89 83       	std	Y+1, r24	; 0x01
 b00:	7c 83       	std	Y+4, r23	; 0x04
 b02:	6b 83       	std	Y+3, r22	; 0x03
 b04:	4d 83       	std	Y+5, r20	; 0x05
 b06:	2e 83       	std	Y+6, r18	; 0x06
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
 b08:	80 e0       	ldi	r24, 0x00	; 0
 b0a:	90 e0       	ldi	r25, 0x00	; 0
 b0c:	a0 e0       	ldi	r26, 0x00	; 0
 b0e:	b1 e4       	ldi	r27, 0x41	; 65
 b10:	8f 83       	std	Y+7, r24	; 0x07
 b12:	98 87       	std	Y+8, r25	; 0x08
 b14:	a9 87       	std	Y+9, r26	; 0x09
 b16:	ba 87       	std	Y+10, r27	; 0x0a
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
 b18:	26 e6       	ldi	r18, 0x66	; 102
 b1a:	36 e6       	ldi	r19, 0x66	; 102
 b1c:	46 ee       	ldi	r20, 0xE6	; 230
 b1e:	54 e4       	ldi	r21, 0x44	; 68
 b20:	6f 81       	ldd	r22, Y+7	; 0x07
 b22:	78 85       	ldd	r23, Y+8	; 0x08
 b24:	89 85       	ldd	r24, Y+9	; 0x09
 b26:	9a 85       	ldd	r25, Y+10	; 0x0a
 b28:	0e 94 0e 07 	call	0xe1c <__mulsf3>
 b2c:	dc 01       	movw	r26, r24
 b2e:	cb 01       	movw	r24, r22
 b30:	8d 87       	std	Y+13, r24	; 0x0d
 b32:	9e 87       	std	Y+14, r25	; 0x0e
 b34:	af 87       	std	Y+15, r26	; 0x0f
 b36:	b8 8b       	std	Y+16, r27	; 0x10
	if (__tmp < 1.0)
 b38:	20 e0       	ldi	r18, 0x00	; 0
 b3a:	30 e0       	ldi	r19, 0x00	; 0
 b3c:	40 e8       	ldi	r20, 0x80	; 128
 b3e:	5f e3       	ldi	r21, 0x3F	; 63
 b40:	6d 85       	ldd	r22, Y+13	; 0x0d
 b42:	7e 85       	ldd	r23, Y+14	; 0x0e
 b44:	8f 85       	ldd	r24, Y+15	; 0x0f
 b46:	98 89       	ldd	r25, Y+16	; 0x10
 b48:	0e 94 be 06 	call	0xd7c <__eqsf2>
 b4c:	88 23       	and	r24, r24
 b4e:	0c f0       	brlt	.+2      	; 0xb52 <Flash+0x6a>
 b50:	05 c0       	rjmp	.+10     	; 0xb5c <Flash+0x74>
		__ticks = 1;
 b52:	81 e0       	ldi	r24, 0x01	; 1
 b54:	90 e0       	ldi	r25, 0x00	; 0
 b56:	9c 87       	std	Y+12, r25	; 0x0c
 b58:	8b 87       	std	Y+11, r24	; 0x0b
 b5a:	1a c0       	rjmp	.+52     	; 0xb90 <Flash+0xa8>
	else if (__tmp > 65535)
 b5c:	20 e0       	ldi	r18, 0x00	; 0
 b5e:	3f ef       	ldi	r19, 0xFF	; 255
 b60:	4f e7       	ldi	r20, 0x7F	; 127
 b62:	57 e4       	ldi	r21, 0x47	; 71
 b64:	6d 85       	ldd	r22, Y+13	; 0x0d
 b66:	7e 85       	ldd	r23, Y+14	; 0x0e
 b68:	8f 85       	ldd	r24, Y+15	; 0x0f
 b6a:	98 89       	ldd	r25, Y+16	; 0x10
 b6c:	0e 94 c1 06 	call	0xd82 <__gesf2>
 b70:	18 16       	cp	r1, r24
 b72:	0c f0       	brlt	.+2      	; 0xb76 <Flash+0x8e>
 b74:	03 c0       	rjmp	.+6      	; 0xb7c <Flash+0x94>
		__ticks = 0;	/* i.e. 65536 */
 b76:	1c 86       	std	Y+12, r1	; 0x0c
 b78:	1b 86       	std	Y+11, r1	; 0x0b
 b7a:	0a c0       	rjmp	.+20     	; 0xb90 <Flash+0xa8>
	else
		__ticks = (uint16_t)__tmp;
 b7c:	6d 85       	ldd	r22, Y+13	; 0x0d
 b7e:	7e 85       	ldd	r23, Y+14	; 0x0e
 b80:	8f 85       	ldd	r24, Y+15	; 0x0f
 b82:	98 89       	ldd	r25, Y+16	; 0x10
 b84:	0e 94 a3 06 	call	0xd46 <__fixsfsi>
 b88:	dc 01       	movw	r26, r24
 b8a:	cb 01       	movw	r24, r22
 b8c:	9c 87       	std	Y+12, r25	; 0x0c
 b8e:	8b 87       	std	Y+11, r24	; 0x0b
 b90:	8b 85       	ldd	r24, Y+11	; 0x0b
 b92:	9c 85       	ldd	r25, Y+12	; 0x0c
 b94:	9a 8b       	std	Y+18, r25	; 0x12
 b96:	89 8b       	std	Y+17, r24	; 0x11
 b98:	89 89       	ldd	r24, Y+17	; 0x11
 b9a:	9a 89       	ldd	r25, Y+18	; 0x12
 b9c:	01 97       	sbiw	r24, 0x01	; 1
 b9e:	f1 f7       	brne	.-4      	; 0xb9c <Flash+0xb4>
 ba0:	9a 8b       	std	Y+18, r25	; 0x12
 ba2:	89 8b       	std	Y+17, r24	; 0x11
//  unsigned char a = 0;
//	unsigned char StringLong = StringLength(String);//字符串的长度	
	static uchar FlashTimeCounter = 0;
	_delay_ms(8);
	FlashTimeCounter ++;
 ba4:	80 91 63 00 	lds	r24, 0x0063
 ba8:	8f 5f       	subi	r24, 0xFF	; 255
 baa:	80 93 63 00 	sts	0x0063, r24
		
    if ((FlashTimeCounter % FlashTimeOut) > (FlashTimeOut >> 1))//闪烁频率,为(FlashTimeOut/2)*8ms
 bae:	80 91 63 00 	lds	r24, 0x0063
 bb2:	9a ef       	ldi	r25, 0xFA	; 250
 bb4:	69 2f       	mov	r22, r25
 bb6:	0e 94 76 07 	call	0xeec <__udivmodqi4>
 bba:	89 2f       	mov	r24, r25
 bbc:	8e 37       	cpi	r24, 0x7E	; 126
 bbe:	38 f0       	brcs	.+14     	; 0xbce <Flash+0xe6>
	{
	    LCM1602Write_String(X,Y, String);   
 bc0:	49 81       	ldd	r20, Y+1	; 0x01
 bc2:	5a 81       	ldd	r21, Y+2	; 0x02
 bc4:	6e 81       	ldd	r22, Y+6	; 0x06
 bc6:	8d 81       	ldd	r24, Y+5	; 0x05
 bc8:	0e 94 95 03 	call	0x72a <LCM1602Write_String>
 bcc:	06 c0       	rjmp	.+12     	; 0xbda <Flash+0xf2>
	}
	else
	{
	    LCM1602Write_String(X,Y, Icon);
 bce:	4b 81       	ldd	r20, Y+3	; 0x03
 bd0:	5c 81       	ldd	r21, Y+4	; 0x04
 bd2:	6e 81       	ldd	r22, Y+6	; 0x06
 bd4:	8d 81       	ldd	r24, Y+5	; 0x05
 bd6:	0e 94 95 03 	call	0x72a <LCM1602Write_String>
 bda:	62 96       	adiw	r28, 0x12	; 18
 bdc:	0f b6       	in	r0, 0x3f	; 63
 bde:	f8 94       	cli
 be0:	de bf       	out	0x3e, r29	; 62
 be2:	0f be       	out	0x3f, r0	; 63
 be4:	cd bf       	out	0x3d, r28	; 61
 be6:	df 91       	pop	r29
 be8:	cf 91       	pop	r28
 bea:	08 95       	ret

00000bec <FlashStringGroup>:
	}
}


//字幕GIF函数                               
void FlashStringGroup(uchar String[][16],uchar StringCounter, uchar X,uchar Y)//StringCounter是字符串数,也就是显示页数
{
 bec:	cf 93       	push	r28
 bee:	df 93       	push	r29
 bf0:	cd b7       	in	r28, 0x3d	; 61
 bf2:	de b7       	in	r29, 0x3e	; 62
 bf4:	61 97       	sbiw	r28, 0x11	; 17
 bf6:	0f b6       	in	r0, 0x3f	; 63
 bf8:	f8 94       	cli
 bfa:	de bf       	out	0x3e, r29	; 62
 bfc:	0f be       	out	0x3f, r0	; 63
 bfe:	cd bf       	out	0x3d, r28	; 61
 c00:	9a 83       	std	Y+2, r25	; 0x02
 c02:	89 83       	std	Y+1, r24	; 0x01
 c04:	6b 83       	std	Y+3, r22	; 0x03
 c06:	4c 83       	std	Y+4, r20	; 0x04
 c08:	2d 83       	std	Y+5, r18	; 0x05
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
 c0a:	80 e0       	ldi	r24, 0x00	; 0
 c0c:	90 e0       	ldi	r25, 0x00	; 0
 c0e:	a0 e0       	ldi	r26, 0x00	; 0
 c10:	b1 e4       	ldi	r27, 0x41	; 65
 c12:	8e 83       	std	Y+6, r24	; 0x06
 c14:	9f 83       	std	Y+7, r25	; 0x07
 c16:	a8 87       	std	Y+8, r26	; 0x08
 c18:	b9 87  

⌨️ 快捷键说明

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