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

📄 2x8_key.lss

📁 WINAVR写的2x8键盘扫描程序
💻 LSS
📖 第 1 页 / 共 5 页
字号:
	LCD_set_xy(x, y);
 75c:	6a 81       	ldd	r22, Y+2	; 0x02
 75e:	89 81       	ldd	r24, Y+1	; 0x01
 760:	0e 94 70 03 	call	0x6e0 <LCD_set_xy>
	while(x<XSIZE&&*string>=0x20)
 764:	89 81       	ldd	r24, Y+1	; 0x01
 766:	80 31       	cpi	r24, 0x10	; 16
 768:	a0 f4       	brcc	.+40     	; 0x792 <LCM1602Write_String+0x68>
 76a:	eb 81       	ldd	r30, Y+3	; 0x03
 76c:	fc 81       	ldd	r31, Y+4	; 0x04
 76e:	80 81       	ld	r24, Z
 770:	80 32       	cpi	r24, 0x20	; 32
 772:	78 f0       	brcs	.+30     	; 0x792 <LCM1602Write_String+0x68>
	{
	LCM1602WriteData(*string++);
 774:	de 01       	movw	r26, r28
 776:	13 96       	adiw	r26, 0x03	; 3
 778:	ed 91       	ld	r30, X+
 77a:	fc 91       	ld	r31, X
 77c:	11 97       	sbiw	r26, 0x01	; 1
 77e:	80 81       	ld	r24, Z
 780:	31 96       	adiw	r30, 0x01	; 1
 782:	ed 93       	st	X+, r30
 784:	fc 93       	st	X, r31
 786:	0e 94 42 03 	call	0x684 <LCM1602WriteData>
	x++;
 78a:	89 81       	ldd	r24, Y+1	; 0x01
 78c:	8f 5f       	subi	r24, 0xFF	; 255
 78e:	89 83       	std	Y+1, r24	; 0x01
 790:	e9 cf       	rjmp	.-46     	; 0x764 <LCM1602Write_String+0x3a>
 792:	24 96       	adiw	r28, 0x04	; 4
 794:	0f b6       	in	r0, 0x3f	; 63
 796:	f8 94       	cli
 798:	de bf       	out	0x3e, r29	; 62
 79a:	0f be       	out	0x3f, r0	; 63
 79c:	cd bf       	out	0x3d, r28	; 61
 79e:	df 91       	pop	r29
 7a0:	cf 91       	pop	r28
 7a2:	08 95       	ret

000007a4 <LCM1602Write_number>:
  }
}


//两位数字显示函数
void LCM1602Write_number(uchar number)
{
 7a4:	cf 93       	push	r28
 7a6:	df 93       	push	r29
 7a8:	cd b7       	in	r28, 0x3d	; 61
 7aa:	de b7       	in	r29, 0x3e	; 62
 7ac:	23 97       	sbiw	r28, 0x03	; 3
 7ae:	0f b6       	in	r0, 0x3f	; 63
 7b0:	f8 94       	cli
 7b2:	de bf       	out	0x3e, r29	; 62
 7b4:	0f be       	out	0x3f, r0	; 63
 7b6:	cd bf       	out	0x3d, r28	; 61
 7b8:	89 83       	std	Y+1, r24	; 0x01
	uchar x,y;
	x=number/10;
 7ba:	89 81       	ldd	r24, Y+1	; 0x01
 7bc:	9a e0       	ldi	r25, 0x0A	; 10
 7be:	69 2f       	mov	r22, r25
 7c0:	0e 94 76 07 	call	0xeec <__udivmodqi4>
 7c4:	8a 83       	std	Y+2, r24	; 0x02
	y=number-10*x;
 7c6:	9a 81       	ldd	r25, Y+2	; 0x02
 7c8:	8a e0       	ldi	r24, 0x0A	; 10
 7ca:	98 9f       	mul	r25, r24
 7cc:	c0 01       	movw	r24, r0
 7ce:	11 24       	eor	r1, r1
 7d0:	29 81       	ldd	r18, Y+1	; 0x01
 7d2:	28 1b       	sub	r18, r24
 7d4:	82 2f       	mov	r24, r18
 7d6:	8b 83       	std	Y+3, r24	; 0x03
	LCM1602WriteData(x+0x30);
 7d8:	8a 81       	ldd	r24, Y+2	; 0x02
 7da:	80 5d       	subi	r24, 0xD0	; 208
 7dc:	0e 94 42 03 	call	0x684 <LCM1602WriteData>
	LCM1602WriteData(y+0x30);
 7e0:	8b 81       	ldd	r24, Y+3	; 0x03
 7e2:	80 5d       	subi	r24, 0xD0	; 208
 7e4:	0e 94 42 03 	call	0x684 <LCM1602WriteData>
 7e8:	23 96       	adiw	r28, 0x03	; 3
 7ea:	0f b6       	in	r0, 0x3f	; 63
 7ec:	f8 94       	cli
 7ee:	de bf       	out	0x3e, r29	; 62
 7f0:	0f be       	out	0x3f, r0	; 63
 7f2:	cd bf       	out	0x3d, r28	; 61
 7f4:	df 91       	pop	r29
 7f6:	cf 91       	pop	r28
 7f8:	08 95       	ret

000007fa <RunString>:
}



/***************************************************************************
  函数说明:滚屏字幕效果                               
  输入:    (需要滚屏的字符串, x起始位置,x终止位置,y坐标,方向)                
***************************************************************************/
void RunString(uchar *String,uchar StartX,uchar EndX,uchar Y,uchar Direction)
{   
 7fa:	0f 93       	push	r16
 7fc:	cf 93       	push	r28
 7fe:	df 93       	push	r29
 800:	cd b7       	in	r28, 0x3d	; 61
 802:	de b7       	in	r29, 0x3e	; 62
 804:	a6 97       	sbiw	r28, 0x26	; 38
 806:	0f b6       	in	r0, 0x3f	; 63
 808:	f8 94       	cli
 80a:	de bf       	out	0x3e, r29	; 62
 80c:	0f be       	out	0x3f, r0	; 63
 80e:	cd bf       	out	0x3d, r28	; 61
 810:	9a 83       	std	Y+2, r25	; 0x02
 812:	89 83       	std	Y+1, r24	; 0x01
 814:	6b 83       	std	Y+3, r22	; 0x03
 816:	4c 83       	std	Y+4, r20	; 0x04
 818:	2d 83       	std	Y+5, r18	; 0x05
 81a:	0e 83       	std	Y+6, r16	; 0x06
	static uchar StringHead = 0;//StringHead为每次滚动后第一个要显示的字符号
	uchar Screen[17];
	uchar a = 0 ;
 81c:	18 8e       	std	Y+24, r1	; 0x18
	uchar Point = StringHead;//Point当前这次显示的字符串的第一个字符
 81e:	80 91 60 00 	lds	r24, 0x0060
 822:	89 8f       	std	Y+25, r24	; 0x19
	uchar StringLong = StringLength(String);//字符串的长度
 824:	89 81       	ldd	r24, Y+1	; 0x01
 826:	9a 81       	ldd	r25, Y+2	; 0x02
 828:	0e 94 4e 05 	call	0xa9c <StringLength>
 82c:	8a 8f       	std	Y+26, r24	; 0x1a
   The maximal possible delay is 262.14 ms / F_CPU in MHz.
 */
void
_delay_ms(double __ms)
{
 82e:	80 e0       	ldi	r24, 0x00	; 0
 830:	90 e0       	ldi	r25, 0x00	; 0
 832:	a0 e0       	ldi	r26, 0x00	; 0
 834:	b1 e4       	ldi	r27, 0x41	; 65
 836:	8b 8f       	std	Y+27, r24	; 0x1b
 838:	9c 8f       	std	Y+28, r25	; 0x1c
 83a:	ad 8f       	std	Y+29, r26	; 0x1d
 83c:	be 8f       	std	Y+30, r27	; 0x1e
	uint16_t __ticks;
	double __tmp = ((F_CPU) / 4e3) * __ms;
 83e:	26 e6       	ldi	r18, 0x66	; 102
 840:	36 e6       	ldi	r19, 0x66	; 102
 842:	46 ee       	ldi	r20, 0xE6	; 230
 844:	54 e4       	ldi	r21, 0x44	; 68
 846:	6b 8d       	ldd	r22, Y+27	; 0x1b
 848:	7c 8d       	ldd	r23, Y+28	; 0x1c
 84a:	8d 8d       	ldd	r24, Y+29	; 0x1d
 84c:	9e 8d       	ldd	r25, Y+30	; 0x1e
 84e:	0e 94 0e 07 	call	0xe1c <__mulsf3>
 852:	dc 01       	movw	r26, r24
 854:	cb 01       	movw	r24, r22
 856:	89 a3       	std	Y+33, r24	; 0x21
 858:	9a a3       	std	Y+34, r25	; 0x22
 85a:	ab a3       	std	Y+35, r26	; 0x23
 85c:	bc a3       	std	Y+36, r27	; 0x24
	if (__tmp < 1.0)
 85e:	20 e0       	ldi	r18, 0x00	; 0
 860:	30 e0       	ldi	r19, 0x00	; 0
 862:	40 e8       	ldi	r20, 0x80	; 128
 864:	5f e3       	ldi	r21, 0x3F	; 63
 866:	69 a1       	ldd	r22, Y+33	; 0x21
 868:	7a a1       	ldd	r23, Y+34	; 0x22
 86a:	8b a1       	ldd	r24, Y+35	; 0x23
 86c:	9c a1       	ldd	r25, Y+36	; 0x24
 86e:	0e 94 be 06 	call	0xd7c <__eqsf2>
 872:	88 23       	and	r24, r24
 874:	0c f0       	brlt	.+2      	; 0x878 <RunString+0x7e>
 876:	05 c0       	rjmp	.+10     	; 0x882 <RunString+0x88>
		__ticks = 1;
 878:	81 e0       	ldi	r24, 0x01	; 1
 87a:	90 e0       	ldi	r25, 0x00	; 0
 87c:	98 a3       	std	Y+32, r25	; 0x20
 87e:	8f 8f       	std	Y+31, r24	; 0x1f
 880:	1a c0       	rjmp	.+52     	; 0x8b6 <RunString+0xbc>
	else if (__tmp > 65535)
 882:	20 e0       	ldi	r18, 0x00	; 0
 884:	3f ef       	ldi	r19, 0xFF	; 255
 886:	4f e7       	ldi	r20, 0x7F	; 127
 888:	57 e4       	ldi	r21, 0x47	; 71
 88a:	69 a1       	ldd	r22, Y+33	; 0x21
 88c:	7a a1       	ldd	r23, Y+34	; 0x22
 88e:	8b a1       	ldd	r24, Y+35	; 0x23
 890:	9c a1       	ldd	r25, Y+36	; 0x24
 892:	0e 94 c1 06 	call	0xd82 <__gesf2>
 896:	18 16       	cp	r1, r24
 898:	0c f0       	brlt	.+2      	; 0x89c <RunString+0xa2>
 89a:	03 c0       	rjmp	.+6      	; 0x8a2 <RunString+0xa8>
		__ticks = 0;	/* i.e. 65536 */
 89c:	18 a2       	std	Y+32, r1	; 0x20
 89e:	1f 8e       	std	Y+31, r1	; 0x1f
 8a0:	0a c0       	rjmp	.+20     	; 0x8b6 <RunString+0xbc>
	else
		__ticks = (uint16_t)__tmp;
 8a2:	69 a1       	ldd	r22, Y+33	; 0x21
 8a4:	7a a1       	ldd	r23, Y+34	; 0x22
 8a6:	8b a1       	ldd	r24, Y+35	; 0x23
 8a8:	9c a1       	ldd	r25, Y+36	; 0x24
 8aa:	0e 94 a3 06 	call	0xd46 <__fixsfsi>
 8ae:	dc 01       	movw	r26, r24
 8b0:	cb 01       	movw	r24, r22
 8b2:	98 a3       	std	Y+32, r25	; 0x20
 8b4:	8f 8f       	std	Y+31, r24	; 0x1f
 8b6:	8f 8d       	ldd	r24, Y+31	; 0x1f
 8b8:	98 a1       	ldd	r25, Y+32	; 0x20
 8ba:	9e a3       	std	Y+38, r25	; 0x26
 8bc:	8d a3       	std	Y+37, r24	; 0x25
 8be:	8d a1       	ldd	r24, Y+37	; 0x25
 8c0:	9e a1       	ldd	r25, Y+38	; 0x26
 8c2:	01 97       	sbiw	r24, 0x01	; 1
 8c4:	f1 f7       	brne	.-4      	; 0x8c2 <RunString+0xc8>
 8c6:	9e a3       	std	Y+38, r25	; 0x26
 8c8:	8d a3       	std	Y+37, r24	; 0x25
	static uint RunTimeCounter = 0 ;
	_delay_ms(8);
	if (Direction==0)//向左滚动
 8ca:	8e 81       	ldd	r24, Y+6	; 0x06
 8cc:	88 23       	and	r24, r24
 8ce:	09 f0       	breq	.+2      	; 0x8d2 <RunString+0xd8>
 8d0:	6e c0       	rjmp	.+220    	; 0x9ae <RunString+0x1b4>
	{		
		for (a = 0;a<(EndX - StartX + 1);a++)
 8d2:	18 8e       	std	Y+24, r1	; 0x18
 8d4:	88 8d       	ldd	r24, Y+24	; 0x18
 8d6:	48 2f       	mov	r20, r24
 8d8:	55 27       	eor	r21, r21
 8da:	8c 81       	ldd	r24, Y+4	; 0x04
 8dc:	28 2f       	mov	r18, r24
 8de:	33 27       	eor	r19, r19
 8e0:	8b 81       	ldd	r24, Y+3	; 0x03
 8e2:	99 27       	eor	r25, r25
 8e4:	28 1b       	sub	r18, r24
 8e6:	39 0b       	sbc	r19, r25
 8e8:	c9 01       	movw	r24, r18
 8ea:	01 96       	adiw	r24, 0x01	; 1
 8ec:	48 17       	cp	r20, r24
 8ee:	59 07       	cpc	r21, r25
 8f0:	fc f4       	brge	.+62     	; 0x930 <RunString+0x136>
		{
			Screen[a] = String[Point];
 8f2:	88 8d       	ldd	r24, Y+24	; 0x18
 8f4:	28 2f       	mov	r18, r24
 8f6:	33 27       	eor	r19, r19
 8f8:	ce 01       	movw	r24, r28
 8fa:	01 96       	adiw	r24, 0x01	; 1
 8fc:	82 0f       	add	r24, r18
 8fe:	93 1f       	adc	r25, r19
 900:	dc 01       	movw	r26, r24
 902:	16 96       	adiw	r26, 0x06	; 6
 904:	89 8d       	ldd	r24, Y+25	; 0x19
 906:	28 2f       	mov	r18, r24
 908:	33 27       	eor	r19, r19
 90a:	89 81       	ldd	r24, Y+1	; 0x01
 90c:	9a 81       	ldd	r25, Y+2	; 0x02
 90e:	f9 01       	movw	r30, r18
 910:	e8 0f       	add	r30, r24
 912:	f9 1f       	adc	r31, r25
 914:	80 81       	ld	r24, Z
 916:	8c 93       	st	X, r24
			Point ++;
 918:	89 8d       	ldd	r24, Y+25	; 0x19
 91a:	8f 5f       	subi	r24, 0xFF	; 255
 91c:	89 8f       	std	Y+25, r24	; 0x19
			if (Point == StringLong)	//如果字符串长度小于Endx-Startx+1,循环显示,类似以圆环
 91e:	99 8d       	ldd	r25, Y+25	; 0x19
 920:	8a 8d       	ldd	r24, Y+26	; 0x1a
 922:	98 17       	cp	r25, r24
 924:	09 f4       	brne	.+2      	; 0x928 <RunString+0x12e>
			{							
				Point = 0;
 926:	19 8e       	std	Y+25, r1	; 0x19
 928:	88 8d       	ldd	r24, Y+24	; 0x18
 92a:	8f 5f       	subi	r24, 0xFF	; 255
 92c:	88 8f       	std	Y+24, r24	; 0x18
 92e:	d2 cf       	rjmp	.-92     	; 0x8d4 <RunString+0xda>
			}
		}
			
		for (;a < 17;a++)  //无字符的补空白
 930:	88 8d       	ldd	r24, Y+24	; 0x18
 932:	81 31       	cpi	r24, 0x11	; 17
 934:	78 f4       	brcc	.+30     	; 0x954 <RunString+0x15a>
		{
			Screen[a] =' ';
 936:	88 8d       	ldd	r24, Y+24	; 0x18
 938:	28 2f       	mov	r18, r24
 93a:	33 27       	eor	r19, r19
 93c:	ce 01       	movw	r24, r28
 93e:	01 96       	adiw	r24, 0x01	; 1
 940:	82 0f       	add	r24, r18
 942:	93 1f       	adc	r25, r19
 944:	fc 01       	movw	r30, r24
 946:	36 96       	adiw	r30, 0x06	; 6
 948:	80 e2       	ldi	r24, 0x20	; 32
 94a:	80 83       	st	Z, r24
 94c:	88 8d       	ldd	r24, Y+24	; 0x18
 94e:	8f 5f       	subi	r24, 0xFF	; 255
 950:	88 8f       	std	Y+24, r24	; 0x18
 952:	ee cf       	rjmp	.-36     	; 0x930 <RunString+0x136>
		}			
	
		RunTimeCounter ++;
 954:	80 91 61 00 	lds	r24, 0x0061
 958:	90 91 62 00 	lds	r25, 0x0062
 95c:	01 96       	adiw	r24, 0x01	; 1
 95e:	90 93 62 00 	sts	0x0062, r25
 962:	80 93 61 00 	sts	0x0061, r24
		if ((RunTimeCounter % RunStringSpeed) > (RunStringSpeed >>1)	)//滚动频率为为(RunStringSpeed/2)*8ms
 966:	80 91 61 00 	lds	r24, 0x0061
 96a:	90 91 62 00 	lds	r25, 0x0062
 96e:	2a ef       	ldi	r18, 0xFA	; 250
 970:	30 e0       	ldi	r19, 0x00	; 0
 972:	b9 01       	movw	r22, r18
 974:	0e 94 82 07 	call	0xf04 <__udivmodhi4>
 978:	8e 37       	cpi	r24, 0x7E	; 126
 97a:	91 05       	cpc	r25, r1
 97c:	80 f0       	brcs	.+32     	; 0x99e <RunString+0x1a4>
		{
			StringHead ++;//向左滚动
 97e:	80 91 60 00 	lds	r24, 0x0060
 982:	8f 5f       	subi	r24, 0xFF	; 255
 984:	80 93 60 00 	sts	0x0060, r24
			RunTimeCounter = 0;
 988:	10 92 62 00 	sts	0x0062, r1
 98c:	10 92 61 00 	sts	0x0061, r1
			if (StringHead == StringLong)
 990:	90 91 60 00 	lds	r25, 0x0060
 994:	8a 8d       	ldd	r24, Y+26	; 0x1a
 996:	98 17       	cp	r25, r24
 998:	11 f4       	brne	.+4      	; 0x99e <RunString+0x1a4>
			{
				StringHead = 0;
 99a:	10 92 60 00 	sts	0x0060, r1
			}
		}
		LCM1602Write_String(StartX,Y, Screen);
 99e:	ce 01       	movw	r24, r28
 9a0:	07 96       	adiw	r24, 0x07	; 7
 9a2:	ac 01       	movw	r20, r24
 9a4:	6d 81       	ldd	r22, Y+5	; 0x05
 9a6:	8b 81       	ldd	r24, Y+3	; 0x03
 9a8:	0e 94 95 03 	call	0x72a <LCM1602Write_String>
 9ac:	6d c0       	rjmp	.+218    	; 0xa88 <RunString+0x28e>
	}	
	else//向右滚动
	{			
		for (a = 0;a<(EndX - StartX + 1);a++)
 9ae:	18 8e       	std	Y+24, r1	; 0x18
 9b0:	88 8d       	ldd	r24, Y+24	; 0x18
 9b2:	48 2f       	mov	r20, r24
 9b4:	55 27       	eor	r21, r21
 9b6:	8c 81       	ldd	r24, Y+4	; 0x04
 9b8:	28 2f       	mov	r18, r24
 9ba:	33 27       	eor	r19, r19
 9bc:	8b 81       	ldd	r24, Y+3	; 0x03
 9be:	99 27       	eor	r25, r25
 9c0:	28 1b       	sub	r18, r24
 9c2:	39 0b       	sbc	r19, r25
 9c4:	c9 01       	movw	r24, r18

⌨️ 快捷键说明

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